求这个FXBS2指标的mt4版本,求大佬帮我改改,已经做出雏形了。但不知道如何取差值。 新评论 Fei Fan Chen 2021.10.20 16:58 //+------------------------------------------------------------------+ //| FXBS2.mq4 | //| Copyright 2021, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_separate_window #property indicator_buffers 3 #property indicator_plots 3 //--- plot FXBS_d #property indicator_label1 "FXBS_d" #property indicator_type1 DRAW_HISTOGRAM #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 2 //--- plot FXBS_x #property indicator_label2 "FXBS_x" #property indicator_type2 DRAW_HISTOGRAM #property indicator_color2 clrGreen #property indicator_style2 STYLE_SOLID #property indicator_width2 2 //--- plot 生命线 #property indicator_label3 "生命线" #property indicator_type3 DRAW_LINE #property indicator_color3 clrYellow #property indicator_style3 STYLE_SOLID #property indicator_width3 1 input int InpPeriod_1=9; // input int InpPeriod_2=60; // input int InpPeriod_3=34; // //--- indicator buffers double FXBS_dBuffer[]; double FXBS_xBuffer[]; double 生命线Buffer[]; double VAR1Buffer[]; double VAR2Buffer[]; double VAR3Buffer[]; double VAR4Buffer[]; double VAR5Buffer[]; double VAR6Buffer[]; double VAR7Buffer[]; double VAR8Buffer[]; double VAR9Buffer[]; double VAR10Buffer[]; double VAR11Buffer[]; double VAR12Buffer[]; double VAR13Buffer[]; double VAR14Buffer[]; double VAR15Buffer[]; double VAR16Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { string short_name; IndicatorBuffers(18); //--- indicator buffers mapping // SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Red); // SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Green); SetIndexBuffer(0,VAR12Buffer); SetIndexBuffer(1,VAR13Buffer); // SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,Yellow);// SetIndexStyle(1,DRAW_NONE); SetIndexBuffer(2,生命线Buffer); SetIndexStyle(3,DRAW_NONE); // SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(3,VAR1Buffer); SetIndexStyle(4,DRAW_NONE); // SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(4,VAR2Buffer); SetIndexStyle(5,DRAW_NONE); // SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(5,VAR3Buffer); SetIndexStyle(6,DRAW_NONE); // SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(6,VAR4Buffer); SetIndexStyle(7,DRAW_NONE); // SetIndexStyle(6,DRAW_LINE,STYLE_SOLID,1,Red); SetIndexBuffer(7,VAR5Buffer); SetIndexStyle(8,DRAW_NONE); // SetIndexStyle(7,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(8,VAR6Buffer); SetIndexStyle(9,DRAW_NONE); // SetIndexStyle(8,DRAW_LINE,STYLE_SOLID,1,Red); SetIndexBuffer(9,VAR7Buffer); SetIndexStyle(10,DRAW_NONE); //SetIndexStyle(9,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(10,VAR8Buffer); SetIndexStyle(11,DRAW_NONE); //SetIndexStyle(10,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(11,VAR9Buffer); SetIndexStyle(12,DRAW_NONE);// SetIndexStyle(11,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(12,VAR10Buffer); SetIndexStyle(13,DRAW_NONE); // SetIndexStyle(12,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(13,VAR11Buffer); SetIndexStyle(14,DRAW_NONE); // SetIndexStyle(15,DRAW_LINE,STYLE_SOLID,1,Red); SetIndexBuffer(14,VAR14Buffer); SetIndexStyle(15,DRAW_NONE); //SetIndexStyle(16,DRAW_LINE,STYLE_SOLID,1,Red); SetIndexBuffer(15,VAR15Buffer); SetIndexStyle(16,DRAW_NONE); // SetIndexStyle(17,DRAW_LINE,STYLE_SOLID,1,White); SetIndexBuffer(16,VAR16Buffer); short_name="FXBS2("+IntegerToString(InpPeriod_1)+","+IntegerToString(InpPeriod_2)+","+IntegerToString(InpPeriod_3)+")"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 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[]) { //--- int i,limit; //--- if(rates_total<InpPeriod_2) return(0); //--- last counted bar will be recounted limit=rates_total-prev_calculated; if(prev_calculated>0) limit++; //--- macd counted in the 1-st buffer for(i=0; i<limit; i++) { VAR1Buffer[i]= High[iHighest(NULL,0,MODE_HIGH,InpPeriod_1,i)] -Low[iLowest(NULL,0,MODE_LOW,InpPeriod_1,i)]; VAR2Buffer[i]= High[iHighest(NULL,0,MODE_HIGH,InpPeriod_1,i)]-close[i]; VAR3Buffer[i]= close[i]-Low[iLowest(NULL,0,MODE_LOW,InpPeriod_1,i)]; if(VAR1Buffer[i] !=0) VAR4Buffer[i] =VAR2Buffer[i]/VAR1Buffer[i]*100-70; if((High[iHighest(NULL,0,MODE_HIGH,InpPeriod_2,i)]-Low[iLowest(NULL,0,MODE_LOW,InpPeriod_2,i)])>0) VAR5Buffer[i]=(close[i]-Low[iLowest(NULL,0,MODE_LOW,InpPeriod_2,i)])/(High[iHighest(NULL,0,MODE_HIGH,InpPeriod_2,i)]-Low[iLowest(NULL,0,MODE_LOW,InpPeriod_2,i)])*100; VAR6Buffer[i]=(2*close[i]+high[i]+low[i])/4; if(VAR1Buffer[i] !=0) VAR14Buffer[i]=VAR3Buffer[i]/VAR1Buffer[i]*100; } for(i=0; i<limit; i++) { // VAR7Buffer[i]=SimpleMA(i,3,VAR14Buffer); VAR7Buffer[i]=iMAOnArray(VAR14Buffer,0,3,0,MODE_SMA,i); VAR8Buffer[i]=Low[iLowest(NULL,0,MODE_LOW,InpPeriod_3,i)]; } for(i=0; i<limit; i++) { //VAR9Buffer[i]=SimpleMA(i,3,VAR7Buffer)-SimpleMA(i,9,VAR4Buffer); VAR9Buffer[i]=iMAOnArray(VAR7Buffer,0,3,0,MODE_SMA,i)-iMAOnArray(VAR4Buffer,0,9,0,MODE_SMA,i); } for(i=0; i<limit; i++) { VAR10Buffer[i]=0; if(VAR9Buffer[i]>100) VAR10Buffer[i]=VAR9Buffer[i]-100; else VAR10Buffer[i]=0; VAR11Buffer[i]=High[iHighest(NULL,0,MODE_HIGH,InpPeriod_3,i)]; if((VAR11Buffer[i]-VAR8Buffer[i])!=0) VAR15Buffer[i]=(VAR6Buffer[i]-VAR8Buffer[i])/(VAR11Buffer[i]-VAR8Buffer[i])*100; } for(i=0; i<limit; i++) { //VAR12Buffer[i]=ExponentialMA(i,13,0,VAR15Buffer); VAR12Buffer[i]=iMAOnArray(VAR15Buffer,0,13,0,MODE_EMA,i); } for(i=0; i<limit; i++) { if(prev_calculated==0 && i==limit-1) VAR16Buffer[i]=0.667*VAR12Buffer[i]+0.333*VAR12Buffer[i]; else VAR16Buffer[i]=0.667*VAR12Buffer[i+1]+0.333*VAR12Buffer[i]; } for(i=0; i<limit; i++) { //VAR13Buffer[i]=ExponentialMA(i,2,0,VAR16Buffer); VAR13Buffer[i]=iMAOnArray(VAR16Buffer,0,2,0,MODE_EMA,i); } for(i=0; i<limit; i++) { // 生命线Buffer[i]=ExponentialMA(i,5,0,VAR13Buffer); 生命线Buffer[i]=iMAOnArray(VAR13Buffer,0,5,0,MODE_EMA,i); } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ 附加的文件: zddv.png 55 kb x561.png 123 kb 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录