Получение мусорных значений из функции iStochastic 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

Раньше я получал правильные значения, но теперь все значения - мусор.


person Jaffer Wilson    schedule 23.03.2018    source источник


Ответы (2)


Я думаю, в ваши 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() миллисекунд.

person Amazing Things Around You    schedule 24.03.2018
comment
Позвольте мне попробовать. Я дам вам знать. - person Jaffer Wilson; 24.03.2018

Вы запросили запуск индикатора стохастика в функции OnInit(), возможно, стохастик еще не загружен или график не распознан. Попробуйте в функции OnTick(). Также попробуйте убедиться, что ваш дескриптор не INVALID_HANDLE и что вы успешно скопировали 15 элементов (но я не думаю, что это проблема). В MQL5 очень важно убедиться, что все, что вы сделали, завершено!

person Daniel Kniaz    schedule 23.03.2018
comment
Я попробовал это с помощью OnTick(), но получил тот же результат :( к сожалению. - person Jaffer Wilson; 24.03.2018
comment
Если я хочу получить доступ к стохастическим значениям, используя OnInit(), возможно ли это? - person Jaffer Wilson; 24.03.2018