【问题标题】:Getting garbage values from iStochastic function MQL5从 iStochastic 函数 MQL5 获取垃圾值
【发布时间】:2018-03-24 19:20:52
【问题描述】:

这是策略测试器的代码和输出:

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

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

【问题讨论】:

    标签: mql5 metatrader5


    【解决方案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() 毫秒。

    【讨论】:

    • 让我试试看。我会告诉你的。
    【解决方案2】:

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

    【讨论】:

    • 我用`OnTick()`尝试过,但我遇到了同样的结果:(很遗憾。
    • 如果我想使用OnInit() 访问随机值,可以吗?
    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    相关资源
    最近更新 更多