Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1361

 
azolotta:

Спасибо, это действительно решило проблему!!! 

Если вас не затруднит, подскажите, чтобы не отображалось два хай/лоу подряд, а была переменчивость (хай-лоу-хай), какую конструкцию надо добавить? Понимаю, что нужна проверка, типо "если предыдущий элемент массива был хай, то второй подряд хай не включать в массив, а ждать лоу", но как это оформить?

Я вам уже объяснял это

 
DanilaMactep:

Всем добрый день. Проверку-то я прикрутил, а протестировать забыл О_о. Хорошо, что сегодня про это вспомнил…Вот эта проверка на моде стоп левел

При тесте такая проверка даёт ошибки показанные на скрине ниже

И что интересно как мне  и посоветовали я добавил в эту проверку домножение на 1,5 следующим образом


Это дополнение не решает появившейся проблемы  тест выдаёт ошибки как на скрине ниже.

Если эту проверку на моде стоп левел закомментировать, то никаких ошибок нет. В чём ошибка по проверке, подскажите пожалуйста? Без неё же нельзя Грааль пускануть на реале- забанят сразуL О_о

Я думаю что ошибка не в проверке, а в том где ты ее прописал

и еще здесь можно убрать " *1,5"

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
 
DanilaMactep:

Всем добрый день. Проверку-то я прикрутил, а протестировать забыл О_о. Хорошо, что сегодня про это вспомнил…Вот эта проверка на моде стоп левел

При тесте такая проверка даёт ошибки показанные на скрине ниже

И что интересно как мне  и посоветовали я добавил в эту проверку домножение на 1,5 следующим образом


Это дополнение не решает появившейся проблемы  тест выдаёт ошибки как на скрине ниже.

Если эту проверку на моде стоп левел закомментировать, то никаких ошибок нет. В чём ошибка по проверке, подскажите пожалуйста? Без неё же нельзя Грааль пускануть на реале- забанят сразуL О_о

Проверьте что возвращает   стоп левел, часто бывает 0.

   int    Stoplevel = (int)MarketInfo(Symbol(), MODE_STOPLEVEL);
   int    Spread = (int)MarketInfo(Symbol(), MODE_SPREAD);

   if (Stoplevel == 0) Stoplevel = 2 * Spread;

   

 Как то так

 
Alekseu Fedotov:

Проверьте что возвращает   стоп левел, часто бывает 0.

 Как то так

Это ему не надо, у него стоит "если меньше стоплевел"

 
DanilaMactep:

Всем добрый день.

Грубейшая ошибка...сразу не заметил

if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

Должны быть ТОЧКИ

 
azolotta:
чтобы не отображалось два хай/лоу подряд, а была переменчивость (хай-лоу-хай)

Можно сделать простым способом. Объявить глобальную переменную и менять её в зависимости от событий.

int direction=0;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {


   for(n=0; n<=limit; n++)
     {
      if(direction>=0 && ((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3])))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
         direction=-1;
        }
      else
         if(direction<=0 && ((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3])))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
            direction=1;
           }
      }
.......

В индикаторах используйте функцию OnCalculate, и все её переменные.

А Start уже не модно:)

 
Aleksei Stepanenko:

Можно сделать простым способом. Объявить глобальную переменную и менять её в зависимости от событий.

В индикаторах используйте функцию OnCalculate, и все её переменные.

А Start уже не модно:)

спасибо! это классный способ!)

про OnCalculate поняла, буду в нём))

 
Aleksei Stepanenko:

Можно сделать простым способом. Объявить глобальную переменную и менять её в зависимости от событий.

В индикаторах используйте функцию OnCalculate, и все её переменные.

А Start уже не модно:)

не получится, при новых хай /лоу не будет их учитывать
 

Добрый день. При вызове индикатора в советнике  возникает ошибка указанная в рамке.  Почему она возникает? Причем не всегда. На другом

терминале работает нормально.


 
Sergey Fionin:

Добрый день. При вызове индикатора в советнике  возникает ошибка указанная в рамке.  Почему она возникает? Причем не всегда. На другом

терминале работает нормально.


Это нарушение прав записи, системный запрет записи.