写入TICK数据的EA,但是调试时候始终报array out of range
数据越界,检查数组是否有值。
检查CopyTick的返回值,可能没有拷贝到50个数据。
复盘测试时,只有前面两种tick模式下,CopyTick才能拷贝到数据。
供参考:
//+------------------------------------------------------------------+ //| test2.mq5 | //| Copyright 2021,fxMeter | //| https://www.mql5.com/zh/users/fxmeters | //+------------------------------------------------------------------+ #property copyright "Copyright 2021,fxMeter" #property link "https://www.mql5.com/zh/users/fxmeters" #property version "1.00" MqlTick myticks[]; double tick_bid[]; double tick_ask[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { ArraySetAsSeries(myticks,true); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { int n = CopyTicks("XAUUSD",myticks,COPY_TICKS_INFO,0,50); //开始将TICKS数据传入数组myticks if(n <= 0)return; ArrayResize(tick_bid,n); ArrayResize(tick_ask,n); ArrayInitialize(tick_bid,0);//初始化数组tick_bid、tick_ask; ArrayInitialize(tick_ask,0); for(int i = 0; i < n; i++) // 将myticks中报价信息传入数组 { tick_bid[i] = myticks[i].bid; tick_ask[i] = myticks[i].ask; } } //+------------------------------------------------------------------+
任何时候都可以使用动态数组,使用前要先分配空间。
不过有些函数比如CopyTicks内部就能给数组分配空间,这种情况下可以不必事先分配空间。
下面这段代码比较简单,但是在mt5的Testing Visualization下一直报array out of range 错误。
新手不知道为什么,觉得可能是OnTick()函数中缓存的问题,请各位高手指导,谢谢!