启者
关于另一个问题,我正在尝试创建一个数组,其内容是EURUSD之前的每小时结算值。我的代码如下:
void Trade()
{
double longThresh = this.longThreshold;
double longTP = this.longTakeProfit;
double longSL = this.longStopLoss;
double shortThresh = this.shortThreshold;
double shortTP = this.shortTakeProfit;
double shortSL = this.shortStopLoss;
int dummyIndex = 0;
Print( "Triggered reload of stack data for trading routine" );
this.stackArray[0] = iClose( "EURUSD", PERIOD_H1, 1 );
this.stackArray[1] = iClose( "EURUSD", PERIOD_H1, 2 );
this.stackArray[2] = iClose( "EURUSD", PERIOD_H1, 3 );
this.stackArray[3] = iClose( "EURUSD", PERIOD_H1, 4 );
this.stackArray[4] = iClose( "EURUSD", PERIOD_H1, 5 );
this.stackArray[5] = iClose( "EURUSD", PERIOD_H1, 6 );
this.stackArray[6] = iClose( "EURUSD", PERIOD_H1, 7 );
this.stackArray[7] = iClose( "EURUSD", PERIOD_H1, 8 );
this.PrintStackArray();
}
上面的函数实际上是一个对象方法。对象被实例化, do-while
循环导致上述方法在五分钟时刻每小时重新执行一次。
问题在于,当上述代码执行一小时后, PrintStackArray()
输出表明 iClose()
功能无法跟上每小时都有新的烛台。
换句话说,如果代码在5:05执行,它将提供与6:05时相同的输出,并在7:05提供相同的输出。
我不能为我的生活弄清楚为什么重新执行iClose()
函数不会使用新的烛台值更新数组。尽管对此问题进行了两周多的修补,但我无法强制我的EA更新并识别新的烛台值。
答案 0 :(得分:1)
这可能发生在这样的情况下,即代码在没有来自市场的事件的实时馈送的情况下运行,仅使用localhost时间限制触发的Object方法调用( which was not disclosed as an MCVE
above ),从而永远显示相同的时间序列数据头,在这种情况下根本不会获得实时更新,永远产生相同的[1,2,3,..]值:
if ( !IsConnected() )
{ Print( "No connection!" );
return( 0 );
}
可以针对实时服务器验证您的EA状态。