自制了一个指标,编程EA测试,跑历史数据时EA在不断叠加,见图1,用模拟盘实时挂载EA时,日志显示自制指标在不断加载移除,见图2,单独在图表中加载指标时没问题,求高手解惑
附加的文件:
l1.png
40 kb
g2.png
37 kb
void OnTick() { double kdjk[]; double kdjj[]; data.loading_KDJ(kdjk,kdjj,10,NULL,0,5,3,3,MODE_SMA,STO_LOWHIGH); double open[],close[]; data.loading_双线乖离率(close,open,10,Symbol(),0,8); } 把指标封装到类里面,上面分别调用了KDJ指标和自定义指标,系统的KDJ指标没问题,但调用自定义指标回测会不断加载指标,下面是指标代码 //+------------------------------------------------------------------+ //| 双线乖离率.mq5 | //| Copyright 2024, songtq. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, songtq." #property link "https://www.mql5.com" #property version "1.00" #property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot close #property indicator_label1 "close" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot open #property indicator_label2 "open" #property indicator_type2 DRAW_LINE #property indicator_color2 clrAqua #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- indicator buffers double closeBuffer[]; double openBuffer[]; input int 指标周期=20; //20日均线 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { ArraySetAsSeries(closeBuffer,true); ArraySetAsSeries(openBuffer,true); SetIndexBuffer(0,closeBuffer,INDICATOR_DATA); SetIndexBuffer(1,openBuffer,INDICATOR_DATA); //--- 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 Num=0; //定义一个计数,用于存放指标运行时要存放的运行次数,如果每次都用rates_total,因为数很大,浪费算力 if(Num==0) Num=rates_total; //最开始,指标运行把图标内的K线柱数的数据都计算一遍 else Num=rates_total-prev_calculated+1; //指标运行后,就只计算就近的1到2根K线的数据 double buffer[]; ArraySetAsSeries(buffer,true); int indicator_EMA=iMA(NULL,0,指标周期,0,MODE_EMA,PRICE_CLOSE); //CopyBuffer多了这一步,指定取哪个指标的数值 CopyBuffer(indicator_EMA,0,0,rates_total,buffer); ArraySetAsSeries(close,true); //MT5指标中,自动生成的close[]数组数据里close[0]图表中最左边K线的收盘价,用ArraySetAsSeries函数给他倒过来,让close[0]表示最右边K线的收盘价 ArraySetAsSeries(open,true); for(int i=0;i<Num;i++) { closeBuffer[i]=(close[i]-buffer[i])/buffer[i]*1000; openBuffer[i]=(open[i]-buffer[i])/buffer[i]*1000; } return(rates_total); } //+------------------------------------------------------------------+
songtanqiang:
自制了一个指标,编程EA测试,跑历史数据时EA在不断叠加,见图1,用模拟盘实时挂载EA时,日志显示自制指标在不断加载移除,见图2,单独在图表中加载指标时没问题,求高手解惑
自制了一个指标,编程EA测试,跑历史数据时EA在不断叠加,见图1,用模拟盘实时挂载EA时,日志显示自制指标在不断加载移除,见图2,单独在图表中加载指标时没问题,求高手解惑