MACD指标公式

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*+------------------------------------------------------------------
说明:
某汇友喜欢4小时图的MACD指标,
当他把图表切换1小时或30分钟等图后,
MACD的周期时段也相应变了,不再是原4小时图的MACD指标了
但他还想在1小时或30分钟图上看到4小时图的MACD。
本程序所要解决的就是这个问题。
本程序提供2号、3号、4号、5号、6号、7号共6套方案,
分别代表周图、日图、4小时图、1小时图、30分钟图、15分钟图的MACD
就是MT4上的时段切换按钮的编号(从右到左)
如果方案号填入2,它能在日图、4小时图、1小时图、30分钟图上,显示周图的MACD
如果方案号填入3,它能在4小时图、1小时图、30分钟、15分钟图上,显示日图的MACD
如果方案号填入4,它能在1小时图、30分钟、15分钟、5分钟图上,显示4小时图的MACD
如果方案号填入5,它能在30分钟、15分钟、5分钟、1分钟图上,显示1小时图的MACD
如果方案号填入6,它能在15分钟、5分钟、1分钟图上,显示30分钟图的MACD
如果方案号填入7,它能在5分钟、1分钟图上,显示15分钟图的MACD
如果方案号填入8,它能在1分钟图上,显示5分钟图的MACD
如果方案号填入别的:0、1等数字,那么就和原来的MACD是一样的了
+------------------------------------------------------------------*/
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Aqua
#property indicator_color2 Yellow
#property indicator_color3 Red
#property indicator_color4 Green
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
extern int 方案号=4;
//extern int scheme=4;
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
double temp;
int multiple=1;
int init()
{
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID);
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID);
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID);
SetIndexDrawBegin(1,SignalSMA);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
if(!SetIndexBuffer(0,ind_buffer1)
&&!SetIndexBuffer(1,ind_buffer2)
&&!SetIndexBuffer(2,ind_buffer3)
&& !SetIndexBuffer(3,ind_buffer4))
Print("cannot set indicator buffers!");
IndicatorShortName("MACD_auto("+FastEMA+","+SlowEMA+","+SignalSMA+","+方案号+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
switch (方案号)
{
case 2: switch (Period()) //PERIOD_W1
{
case PERIOD_D1: multiple=5; break;
case PERIOD_H4: multiple=30; break;
case PERIOD_H1: multiple=120; break;
case PERIOD_M30: multiple=240; break;
default: multiple=1; break;
} break;
case 3: switch (Period()) //

PERIOD_D1
{
case PERIOD_H4: multiple=6; break;
case PERIOD_H1: multiple=24; break;
case PERIOD_M30: multiple=48; break;
case PERIOD_M15: multiple=96; break;
default: multiple=1; break;
} break;
case 4: switch (Period()) //PERIOD_H4
{
case PERIOD_H1: multiple=4; break;
case PERIOD_M30: multiple=8; break;
case PERIOD_M15: multiple=16; break;
case PERIOD_M5: multiple=48; break;
default: multiple=1; break;
} break;
case 5: switch (Period()) //PERIOD_H1
{
case PERIOD_M30: multiple=2; break;
case PERIOD_M15: multiple=4; break;
case PERIOD_M5: multiple=12; break;
case PERIOD_M1: multiple=60; break;
default: multiple=1; break;
} break;
case 6: switch (Period()) //PERIOD_M30
{
case PERIOD_M15: multiple=2; break;
case PERIOD_M5: multiple=6; break;
case PERIOD_M1: multiple=30; break;
default: multiple=1; break;
} break;
case 7: switch (Period()) //PERIOD_M15
{
case PERIOD_M5: multiple=3; break;
case PERIOD_M1: multiple=15; break;
default: multiple=1; break;
} break;
case 8: switch (Period()) //PERIOD_M5
{
case PERIOD_M1: multiple=5; break;
default: multiple=1; break;
} break;
default: multiple=1; break;
}
return(0);
}
int start()
{
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(int i=0; iind_buffer1[i]=iMA(NULL,0,FastEMA*multiple,0,MODE_EMA,PRICE_CLOSE,i)
-iMA(NULL,0,SlowEMA*multiple,0,MODE_EMA,PRICE_CLOSE,i);
for(i=0; iind_buffer2[i]=iMAOnArray(ind_buffer1,Bars,SignalSMA*multiple,0,MODE_SMA,i);
for(i=0; i{temp=1.3*(ind_buffer1[i]-ind_buffer2[i]);
if(temp>0) {ind_buffer3[i]=temp;ind_buffer4[i]=EMPTY_VALUE;}
else {ind_buffer3[i]=EMPTY_VALUE;ind_buffer4[i]=temp;}
}
return(0);
}

相关文档
最新文档