MQL5多种颜色空心K线的方法

实际效果图如下:
原理:
这是MQL5文档中关于Draw_Cadles 的文档说明

//--- 不同颜色的蜡烛图和烛芯
#property indicator_label1  "One color candles"
#property indicator_type1   DRAW_CANDLES
//--- 烛芯和外框是绿色,牛市蜡烛图的主体是白色,而熊市蜡烛图的主体是红色
#property indicator_color1  clrGreen,clrWhite,clrRed

上面的最后一条预编译指令就是在设置K线颜色,第一个颜色(clrGreen)为上、下影线及主体外框线颜色,第一个颜色(clrWhite)为上涨K线的主体颜色,最后的一个颜色(clrRed)为下跌K线的主体颜色。要想形成空心K线实际上只要使K线的主体颜色与MT5的背景颜色相同,即可形成空心K线效果。MT5中背景色多半为黑色或白色,只要将中间的颜色设置为相应的颜色即可。

如果想要绘制出多种颜色的空心K线,只要利用画多个蜡烛图拼接而成。让显示的部分高开低收Buffer接收正常的K线数据,使不想显示的K线数据Buffer设置为0.0实现隐藏即可。

具体实现步骤:
(1)设置两色均线Buffer

//--- plot MA20
#property indicator_label1  "MA20"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrRed,clrDarkTurquoise
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

(2)设置多头空心蜡烛图1

//--- plot LongCandles
#property indicator_label2  "LongCandles"
#property indicator_type2   DRAW_CANDLES
#property indicator_color2  clrRed,clrBlack,clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

(3)设置空头空心蜡烛图2

//--- plot ShortCandles
#property indicator_label3  "ShortCandles"
#property indicator_type3   DRAW_CANDLES
#property indicator_color3  clrDarkTurquoise,clrBlack,clrDarkTurquoise
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1

(4)设置Buffer数组

//--- indicator buffers
double        MA20Buffer[];
double        MA20Colors[];
double        LongCandlesOpen[];
double        LongCandlesHigh[];
double        LongCandlesLow[];
double        LongCandlesClose[];
double        ShortCandlesOpen[];
double        ShortCandlesHigh[];
double        ShortCandlesLow[];
double        ShortCandlesClose[];

(5)OnInit()函数设置

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{//指标缓冲区Buffer绑定SetIndexBuffer(0,MA20Buffer,INDICATOR_DATA);SetIndexBuffer(1,MA20Colors,INDICATOR_COLOR_INDEX);SetIndexBuffer(2,LongCandlesOpen,INDICATOR_DATA);SetIndexBuffer(3,LongCandlesHigh,INDICATOR_DATA);SetIndexBuffer(4,LongCandlesLow,INDICATOR_DATA);SetIndexBuffer(5,LongCandlesClose,INDICATOR_DATA);SetIndexBuffer(6,ShortCandlesOpen,INDICATOR_DATA);SetIndexBuffer(7,ShortCandlesHigh,INDICATOR_DATA);SetIndexBuffer(8,ShortCandlesLow,INDICATOR_DATA);SetIndexBuffer(9,ShortCandlesClose,INDICATOR_DATA);//时间序列化指标BufferArraySetAsSeries(MA20Buffer,true);ArraySetAsSeries(MA20Colors,true);ArraySetAsSeries(LongCandlesOpen,true);ArraySetAsSeries(LongCandlesHigh,true);ArraySetAsSeries(LongCandlesLow,true);ArraySetAsSeries(LongCandlesClose,true);ArraySetAsSeries(ShortCandlesOpen,true);ArraySetAsSeries(ShortCandlesHigh,true);ArraySetAsSeries(ShortCandlesLow,true);ArraySetAsSeries(ShortCandlesClose,true);//buffer初始化填充0.0ArrayInitialize(LongCandlesOpen,0.0);ArrayInitialize(LongCandlesHigh,0.0);ArrayInitialize(LongCandlesLow,0.0);ArrayInitialize(LongCandlesClose,0.0);ArrayInitialize(ShortCandlesOpen,0.0);ArrayInitialize(ShortCandlesHigh,0.0);ArrayInitialize(LongCandlesOpen,0.0);ArrayInitialize(ShortCandlesLow,0.0);//设置空值不画线,将值为0.0的K线不显示PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);MA20_h = iMA(Symbol(),PERIOD_CURRENT,MA20_Period,MA20_Shift,SM_Mode,AppliedPrice);
//---return(INIT_SUCCEEDED);
}

(6)OnCalculate()函数实现

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[])
{//时间序列化高开低收价ArraySetAsSeries(open,true);ArraySetAsSeries(high,true);ArraySetAsSeries(low,true);ArraySetAsSeries(close,true);if(MA20_h > 0)//check the handle Valid?{//validif(BarsCalculated(MA20_h) < rates_total)//check all Bars Calculated?return(rates_total);else{if(prev_calculated <= 0){//all bars CalculatedCopyBuffer(MA20_h,0,0,rates_total,MA20Buffer);}else{  // 仅填充那些更新的数据 int to_copy=rates_total-prev_calculated;// 如果没有不同,我们仍然会复制一个值 - 在零柱if(to_copy == 0 )  to_copy = 1;CopyBuffer(MA20_h,0,0,to_copy,MA20Buffer);}}}//更新颜色缓冲区int start;if(prev_calculated <= 0){start = 0;}else{start = prev_calculated-1;}for(int i = start; i<rates_total; i++){if(MA20Buffer[i] < close[i]){  MA20Colors[i] = 0;//均线在收盘价之上LongCandlesBuffer填充数据LongCandlesOpen[i]=open[i];LongCandlesHigh[i]=high[i];LongCandlesLow[i]=low[i];LongCandlesClose[i]=close[i];//均线在收盘价之上ShortCandlesBuffer填充0.0,让其不显示ShortCandlesOpen[i]=0.0;ShortCandlesHigh[i]=0.0;ShortCandlesLow[i]=0.0;ShortCandlesClose[i]=0.0;}else{MA20Colors[i] = 1;//均线在收盘价之下LongCandlesBuffer填充0.0,让其不显示LongCandlesOpen[i]=0.0;LongCandlesHigh[i]=0.0;LongCandlesLow[i]=0.0;LongCandlesClose[i]=0.0;//均线在收盘价之下ShortCandlesBuffer填充数据ShortCandlesOpen[i]=open[i];ShortCandlesHigh[i]=high[i];ShortCandlesLow[i]=low[i];ShortCandlesClose[i]=close[i];}}//--- return value of prev_calculated for next callreturn(rates_total);
}

源码链接: MQL5多色空心K线源码.
作者:HalfGiant

MQL5画多种颜色空心K线的方法相关推荐

  1. 如何使用python画出好看的K线图

    tushare ID:468684 一.安装mplfinance库 画K线蜡烛图,使用python的mplfinance库比较方便 安装:pip install mplfinance mplfinan ...

  2. 在Python中画炫酷的K线图

    利用pyecharts包,在Jupyter里画K线图 需要传入的参数有两类: 第一类即包含股价数据的表格,表格中需要包含的数据为: date或/和time open ,close, high, low ...

  3. python画k线图_一步一步教你用Python画出专业的K线图

    漂亮的界面是量化程序的脸面,直观专业的界面能帮助我们了解股票的走势和形象地展示量化交易的结果.本文介绍如何使用matplotlib做出专业的K线图和展示各种技术指标: matplotlib是受MATL ...

  4. python绘制蜡烛图_一步一步教你用Python画出专业的K线图

    漂亮的界面是量化程序的脸面,直观专业的界面能帮助我们了解股票的走势和形象地展示量化交易的结果.本文介绍如何使用matplotlib做出专业的K线图和展示各种技术指标: matplotlib是受MATL ...

  5. 用python绘制股票图_一步一步教你用Python画出专业的K线图

    漂亮的界面是量化程序的脸面,直观专业的界面能帮助我们了解股票的走势和形象地展示量化交易的结果.本文介绍如何使用matplotlib做出专业的K线图和展示各种技术指标: matplotlib是受MATL ...

  6. 【零基础】简易价差K线合成方法介绍

    交流Q群1064240775 一.前言 价差K线合成一直是某种"高端"的应用,因为做套利交易的本来就少,做自设套利的就更少了.目前市面上支持套利且比较成熟的终端有极星和文华,极星支 ...

  7. 超级简单的K线合成方法

    使用python来合成K线数据 文章目录 使用python来合成K线数据 前言 一.源数据 二.使用步骤 1.引入库 2.数据格式 2.合成 前言 量化程序中不免需要将行情数据合成自己所需要的周期级别 ...

  8. python能画k线图吗_python画k线图(一天的k线图怎么画)

    1.大智慧软件在日线窗口的左上角标有主图的公式名称,(如ma sar bbi )等, 如果不是ma指标,请输入ma,回车.2.如果输入ma后还是没有均线,请按 f7 键,弹出 最好能举个例子的.非常感 ...

  9. 【python量化交易学习】pandas获取mysql数据,使用pyecharts画K线图,ma移动均线。

    将pyecharts官方提供的数据源,替换成已经存在mysql中的数据.画出专业的k线图(k线+ma移动均线+交易额柱状图(单位是千)) 参考: [python量化交易学习]pandas获取tusha ...

最新文章

  1. HyperLedger Fabric区块链技术形成(1.2)
  2. 学网络好帮手:路由器模拟软件RouteSim3.31
  3. linux kernel中的virt_to_phys代码解读
  4. 在导出本地文件时报了ABAP错误
  5. 安装mysql5.7出现问题_本地安装Mysql5.7过程中出现的一系列问题
  6. 死磕java并发cas_死磕Java——CAS
  7. css常用属性总结:颜色和单位
  8. HZOJ 大佬(kat)
  9. php属性未定义,PHP-警告-未定义的属性:stdClass-修复?
  10. 阶分差数 matlab,matlab中aicbic确定阶数的太小
  11. JProfiler 12 for Mac(Java开发分析工具)
  12. 物联网专业有哪些含金量高的比赛?
  13. 根据UI设计图得到android所需要的dp
  14. NIN:Network in Network
  15. 用cocos实现的《我的世界》已经上线微信小游戏,分享一下主要技术
  16. 《吴军信息论40讲》学习笔记(完)
  17. 落叶几度夕阳红,门掩深林中
  18. 狡猾的商人(带权并查集)
  19. Visual Studio 2019安装与配置
  20. delphi 11(10.5) 来了

热门文章

  1. 【愚公系列】2022年11月 微信小程序-优购电商项目-商品支付页面
  2. git submodule sync --recursive
  3. 限制python计算使用32位整数 (signed 32bit int)
  4. 数据库如何把null转化为空字符
  5. URAL 1229贴地砖 . 二分图匹配
  6. 转录组分析——差异表达分析
  7. CSS实现点击选中效果
  8. Web APIs-2023.4.9
  9. Hadoop,Spark,Kafka这些名字背后的故事!
  10. JavaWeb_Servlet_(知道什么是重点吗,每天多吃两顿你就知道了...)