论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
查看:247回复:0
幽灵pits
注册时间2016-11-27
[MT4指标]编程参考 MT4 自定义指标 MACD 源代码中文注释
楼主发表于:2020-07-19 02:16只看该作者倒序浏览
1楼 电梯直达
电梯直达
#include /////////////////////////////////////////////////////////////////////////////////////////// // 指标属性的设置 #property indicator_separate_window // 独立窗口,副图显示 #property indicator_buffers 2 // 2个缓冲区分配内存,有方向指向意义(最多为8个[0,7]) #property indicator_color1 Silver // 银色 #property indicator_color2 Red // 红色 #property indicator_width1 2 // 线宽 // 指标参数 input int InpFastEMA=12; // Fast EMA Period 快线 input int InpSlowEMA=26; // Slow EMA Period 慢线 input int InpSignalSMA=9; // Signal SMA Period 平均信号周期 // 2个缓冲数组变量定义 double ExtMacdBuffer; //线数组,第1个缓冲区,索引为0 double ExtSignalBuffer; //柱数组,第2个缓冲区,索引为1 //--- right input parameters flag //输入参数标志 bool ExtParameters=false; //初始化拓展参数=假 // 自定义指标初始化功能 代码区 int OnInit(void) { // 指标精度格式(小数点后的位数计数),当前标的的小数位数+1,货币为5或3,黄金原油为2,后+1 IndicatorDigits(Digits+1); // 指标在副图上画线设置相关参数,包括类型、样式、宽度和颜色 SetIndexStyle(0,DRAW_HISTOGRAM); // 第1个,0号索引位,绘制柱状 SetIndexStyle(1,DRAW_LINE); // 第2个,1号索引位,绘制曲线 SetIndexDrawBegin(1,InpSignalSMA); // 设置指标线起始位置,从左向右根据K线画,第2个,从左边第9根K线向当前K线画,这里InpSignalSMA=9 // 指标画线与缓冲区连接映射 SetIndexBuffer(0,ExtMacdBuffer); // 第1个缓冲区,索引为0,绑定第1个,0号索引位,绘制柱状 SetIndexBuffer(1,ExtSignalBuffer); // 第2个缓冲区,索引为1,绑定第2个,1号索引位,绘制曲线 // 副图窗口设置命名和指标实时参数的标签 IndicatorShortName("MACD("+IntegerToString(InpFastEMA)+","+IntegerToString(InpSlowEMA)+","+IntegerToString(InpSignalSMA)+")"); //指标窗口命名显示,并转换成字符串拼接起来,如MACD(12,26,9) SetIndexLabel(0,"MACD"); // 第1个缓冲区,索引为0,绑定第1个,0号索引位,绘制柱状将标签为MCAD SetIndexLabel(1,"Signal"); // 第2个缓冲区,索引为1,绑定第2个,1号索引位,绘制曲线将标签为Signal // 检查输入的初始参数 if(InpFastEMA<=1 || InpSlowEMA<=1 || InpSignalSMA<=1 || InpFastEMA>=InpSlowEMA) //快、慢、信号线不能小于等于1,快线不能大于等于慢线(时间短,反应快;时间长,反应慢) { Print("Wrong input parameters"); // 打印输出Wrong input parameters ExtParameters=false; // 初始化拓展参数还是=假 return(INIT_FAILED); // 返回初始化失败 } else { ExtParameters=true; //初始化拓展参数还是=真 } // 返回初始化成功 return(INIT_SUCCEEDED); } // 移动平均聚散 int OnCalculate (const int rates_total, // 当前图形上K线的总个数 const int prev_calculated, // 上次计算到第几根K线了 const datetime& time, // 内置时间数组 const double& open, // 内置开盘价数组 const double& high, // 内置最高价数组 const double& low, // 内置最低价数组 const double& close, // 内置收盘价数组 const long& tick_volume, // 内置单位时间内的Tciku时序数组 const long& volume, // 内置成交量数组 const int& spread) // 内置点差数组 { int i,limit; // 图表上显示的K线总数<=InpSignalSMA9时或ExtParameters为假时,返回最后的K线数量 if(rates_total<=InpSignalSMA || !ExtParameters) { return(0); } // 返回最后被计算的K线数量 --->> K线是一根根的产生的,如果不动图表窗口,limit始终为1 limit=rates_total-prev_calculated; //图表上显示的K线总数-前面已经计算过的数量=得出剩下将要计算的K线数量 // 前面已经计算过的数量存在且大于0时,要计算的K线始终循环进行 if(prev_calculated>0) { limit++; } // 第1个缓冲区MACD计算 // 循环还在计算的K线数量limit值,并存入缓冲区冲 —->>借助MA均线计算函数来计算 for(i=0; i,将来自 price 数组的简单移动平均线的值输出到数组 ExtSignalBuffer中 SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer); // 返回K线总量 return(rates_total); } //+------------------------------------------------------------------+
TK29帖子1楼右侧xm竖版广告90-240
个性签名

韬客社区www.talkfx.co

广告
TK30+TK31帖子一樓廣告
TK30+TK31帖子一樓廣告

本站免责声明:

1、本站所有广告及宣传信息均与韬客无关,如需投资请依法自行决定是否投资、斟酌资金安全及交易亏损风险;

2、韬客是独立的、仅为投资者提供交流的平台,网友发布信息不代表韬客的观点与意思表示,所有因网友发布的信息而造成的任何法律后果、风险与责任,均与韬客无关;

3、金融交易存在极高法律风险,未必适合所有投资者,请不要轻信任何高额投资收益的诱导而贸然投资;投资保证金交易导致的损失可能超过您投入的资金和预期。请您考虑自身的投资经验及风险承担能力,进行合法、理性投资;

4、所有投资者的交易帐户应仅限本人使用,不应交由第三方操作,对于任何接受第三方喊单、操盘、理财等操作的投资和交易,由此导致的任何风险、亏损及责任由投资者个人自行承担;

5、韬客不隶属于任何券商平台,亦不受任何第三方控制,韬客不邀约客户投资任何保证金交易,不接触亦不涉及投资者的任何资金及账户信息,不代理任何交易操盘行为,不向客户推荐任何券商平台,亦不存在其他任何推荐行为。投资者应自行选择券商平台,券商平台的任何行为均与韬客无关。投资者注册及使用韬客即表示其接受和认可上述声明,并自行承担法律风险。

版权所有:韬客外汇论坛 www.talkfx.com 联络我们:[email protected]