加一个这试试:
Print("Current bar for 0 is: ",iTime(_Symbol,PERIOD_M1,0)," OT= ",OT);
if(iTime(_Symbol,PERIOD_M1,0) == OT= ) dt=2;
你的dt=0, 已经说明, OT不是当前的时间了, 虽然它来自初始化的 m1的0, 但初始化的值 跟打开文件时的瞬时数据状态有关,那数据不一定是当前最新数据最新时间。
加一个这试试:
Print("Current bar for 0 is: ",iTime(_Symbol,PERIOD_M1,0)," OT= ",OT);
if(iTime(_Symbol,PERIOD_M1,0) == OT= ) dt=2;
你的dt=0, 已经说明, OT不是当前的时间了, 虽然它来自初始化的 m1的0, 但初始化的值 跟打开文件时的瞬时数据状态有关,那数据不一定是当前最新数据最新时间。
上面的代码稍微有一些问题,我是获取OT,Spread,O0,H1,L1,H2,L2天图的数据,现在已经更新,朋友可以重新看一下。
我想问题可能出在全局变量上面,OT,Spread,O0,H1,L1,H2,L2定义为全局变量,在tick当中全局变量就保持了初始值,不会随图表更新而更新?
上面的代码稍微有一些问题,我是获取OT,Spread,O0,H1,L1,H2,L2天图的数据,现在已经更新,朋友可以重新看一下。
我想问题可能出在全局变量上面,OT,Spread,O0,H1,L1,H2,L2定义为全局变量,在tick当中全局变量就保持了初始值,不会随图表更新而更新?
0T与TimeDay(TimeCurrent()))的值相等的话,说明图表与函数数据是一致的。
而 ,OT,Spread,O0,H1,L1,H2,L2定义为全局变量,在tick当中全局变量就保持了初始值,不会随图表更新而更新,不知道是不是这样的?
加一个这试试:
Print("Current bar for 0 is: ",iTime(_Symbol,PERIOD_M1,0)," OT= ",OT);
if(iTime(_Symbol,PERIOD_M1,0) == OT= ) dt=2;
你的dt=0, 已经说明, OT不是当前的时间了, 虽然它来自初始化的 m1的0, 但初始化的值 跟打开文件时的瞬时数据状态有关,那数据不一定是当前最新数据最新时间。
这样是不是可以解决,把全局变量改为局部变量
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { int dt=0; if(TimeDay(D0T())==TimeDay(TimeCurrent()))dt=1; printf("dt=%g",dt); printf("OT=%u,CT=%u",TimeDay(D0T()),TimeDay(TimeCurrent())); printf("O0=%g",SJ("O0")); printf("H1=%g",SJ("H1")); printf("L1=%g",SJ("L1")); printf("H2=%g",SJ("H2")); printf("L2=%g",SJ("L2")); } //+------------------------------------------------------------------+ datetime D0T() { datetime OT=iTime(_Symbol,PERIOD_D1,0); return(OT); } //+------------------------------------------------------------------+ double SJ(string sj) { double sjj=0; double Spread=MarketInfo(_Symbol,MODE_SPREAD); double O0=iOpen(_Symbol,PERIOD_D1,0); double H1=iHigh(_Symbol,PERIOD_D1,1); double L1=iLow(_Symbol,PERIOD_D1,1); double H2=iHigh(_Symbol,PERIOD_D1,2); double L2=iLow(_Symbol,PERIOD_D1,2); if(sj=="Spread")sjj=Spread; if(sj=="O0")sjj=O0; if(sj=="H1")sjj=H1; if(sj=="L1")sjj=L1; if(sj=="H2")sjj=H2; if(sj=="L2")sjj=L2; return(sjj); } //+------------------------------------------------------------------+
可以,但我不明白你要这信息干什么,隔24小时才变化的信息,需要在OnTick()每次价格变化就检查一次?
全局变量到不是问题,在返回前:
OT=iTime(_Symbol,PERIOD_D1,0);
就可以更新OT为最新的值。
问题说明:MT4 Build 610 图表与函数不同步,函数无法识别图表更新,请高手解决帮忙解决。