从 iStochastic 函数获取垃圾值 MQL5
Getting garbage values from iStochastic function MQL5
这是策略测试器的代码和输出:
void OnInit()
{
double K[],D[];
int s = iStochastic(_Symbol,PERIOD_M1,5,3,3,MODE_SMA,STO_LOWHIGH);
ArraySetAsSeries(K,true);
CopyBuffer(s,0,0,15,K);
for (int i=0; i< ArraySize(K); i++) {
PrintFormat("K%d: %f",i,K[i]);
}
}
输出在这里:
2018.03.23 17:52:23.771 EURUSD,M1: testing of Experts\testing lines and trdae.ex5 from 2018.02.01 00:00 to 2018.02.20 00:00 started
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K0: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K1: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K2: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K3: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K4: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K5: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K6: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K7: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K8: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K9: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K10: -199836181689466826799237394770318879446132938967474237529901448300177121542331695157382317059237724271211152856484244886720180840440527383821209628107006660663428982847878694191497216.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K11: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K12: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K13: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K14: 0.000000
以前我得到的是正确的值,但现在这些值都是垃圾。
您在 OnInit()
函数中向 运行 请求了随机指标,可能随机指标尚未加载,或者图表未被识别。在 OnTick()
函数中尝试。还要尝试确保您的句柄不是 INVALID_HANDLE
并且您成功复制了 15 个元素(但我认为这不是问题)。在 MQL5 中确保您所做的一切都已完成非常重要!
我想您的 K[]
和 D[]
中没有任何内容。因此,您面临着垃圾价值。而你不愿意用 OnTick()
而是想用 OnInit()
来实现,那么我想我可以尝试一些东西,你可以调试它。
void OnInit()
{
double K[],D[];
int s = iStochastic(_Symbol,PERIOD_M1,5,3,3,MODE_SMA,STO_LOWHIGH);
ArraySetAsSeries(K,true);
int KBuffer = CopyBuffer(s,0,0,15,K);
if(KBuffer == -1)
{
Sleep(50);
s = iStochastic(_Symbol,PERIOD_M1,5,3,3,MODE_SMA,STO_LOWHIGH);
CopyBuffer(s,0,0,15,K);
}
for (int i=0; i< ArraySize(K); i++) {
PrintFormat("K%d: %f",i,K[i]);
}
}
我想就是这样了。如果您再次收到垃圾,请尝试增加 Sleep()
毫秒。
这是策略测试器的代码和输出:
void OnInit()
{
double K[],D[];
int s = iStochastic(_Symbol,PERIOD_M1,5,3,3,MODE_SMA,STO_LOWHIGH);
ArraySetAsSeries(K,true);
CopyBuffer(s,0,0,15,K);
for (int i=0; i< ArraySize(K); i++) {
PrintFormat("K%d: %f",i,K[i]);
}
}
输出在这里:
2018.03.23 17:52:23.771 EURUSD,M1: testing of Experts\testing lines and trdae.ex5 from 2018.02.01 00:00 to 2018.02.20 00:00 started
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K0: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K1: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K2: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K3: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K4: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K5: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K6: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K7: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K8: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K9: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K10: -199836181689466826799237394770318879446132938967474237529901448300177121542331695157382317059237724271211152856484244886720180840440527383821209628107006660663428982847878694191497216.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K11: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K12: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K13: 0.000000
2018.03.23 17:52:23.821 2018.02.01 00:00:00 K14: 0.000000
以前我得到的是正确的值,但现在这些值都是垃圾。
您在 OnInit()
函数中向 运行 请求了随机指标,可能随机指标尚未加载,或者图表未被识别。在 OnTick()
函数中尝试。还要尝试确保您的句柄不是 INVALID_HANDLE
并且您成功复制了 15 个元素(但我认为这不是问题)。在 MQL5 中确保您所做的一切都已完成非常重要!
我想您的 K[]
和 D[]
中没有任何内容。因此,您面临着垃圾价值。而你不愿意用 OnTick()
而是想用 OnInit()
来实现,那么我想我可以尝试一些东西,你可以调试它。
void OnInit()
{
double K[],D[];
int s = iStochastic(_Symbol,PERIOD_M1,5,3,3,MODE_SMA,STO_LOWHIGH);
ArraySetAsSeries(K,true);
int KBuffer = CopyBuffer(s,0,0,15,K);
if(KBuffer == -1)
{
Sleep(50);
s = iStochastic(_Symbol,PERIOD_M1,5,3,3,MODE_SMA,STO_LOWHIGH);
CopyBuffer(s,0,0,15,K);
}
for (int i=0; i< ArraySize(K); i++) {
PrintFormat("K%d: %f",i,K[i]);
}
}
我想就是这样了。如果您再次收到垃圾,请尝试增加 Sleep()
毫秒。