从iStochastic函数MQL5获取垃圾值

时间:2018-03-23 12:24:48

标签: mql5 metatrader5

以下是策略测试程序的代码和输出:

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

以前我得到了正确的值,但现在这些值都是垃圾。

2 个答案:

答案 0 :(得分:1)

我猜你的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()毫秒。

答案 1 :(得分:0)

您请求随机指标在OnInit()函数中运行,可能尚未加载随机指标,或者无法识别图表。试试OnTick()功能。还要尝试确保你的句柄不是INVALID_HANDLE并且你成功复制了15个元素(但我不认为这是一个问题)。在MQL5中确保完成所有操作都非常重要!