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

 
И ещё один момент - при запуске советника, на первой же свече открывается ордер один, при том, что не было никаких сигналов к этому моменту. Как его можно убрать? 
Файлы:
 
artem artem #:

MakarFX, а это норм, если тестирую по всем тикам -  с 01.08.21. по 03.09.21. - тогда 46 ордеров

а если тест только по ценам открытия за тот же период - 29 ордеров ?

+ несколько ордеров, если по тикам, открылись явно не по цене открытия. Я прикрепил скриншот, на нём показано

Пробуй

Файлы:
artem.mq4  13 kb
 
Теперь и по тикам, и по цене открытия открывает одинаковое кол-во ордеров.  Всего ордеров за тот же период времени - 23 ордера. Только теперь почему то вход с 7ой свечи, а не с 4ой. 
 
artem artem #:
Теперь и по тикам, и по цене открытия открывает одинаковое кол-во ордеров.  Всего ордеров за тот же период времени - 23 ордера. Только теперь почему то вход с 7ой свечи, а не с 4ой. 

Убрал все лишнее...вроде как надо работает

Файлы:
artem.mq4  11 kb
 
Подскажите, есть ли способ разграничить строки настроек советника в терминале, чтобы их нельзя было стереть? Если писать extern string в коде, то это даёт возможность редактирования строчки, а если случайно удалил, то надо нажать "сброс", чтобы восстановилась, но тогда все настройки сбрасываются. Их, конечно же, предварительно можно сохранить в сет-файле, но мне просто любопытно, можно ли сделать "каменную табличку")
 

Проверил, и на тиках, и на цене открытия... РА-БО-ТА-ЕТ!!!!

    MakarFX, огромное тебе спасибо!!! Я уже 2 недели не над этой головоломкой парюсь, и всё безрезультатно до сегодня. Спасибо тебе большое, ещё раз! У меня осталась буквально несколько уточнений, и не буду больше тебя задерживать, и так много времени было потрачено твоего. Собственно, вот что интересует:


  1. Насколько я понял, если я захочу изменить колличество "свеч-подтверждения", то тогда мне надо просто в константе изменить одну цифру на другую, и всё?

void OnTick()
  {
//---
   StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); 
   //---
   if(newbar!=Time[0])
     {
      if(CheckForOpen()!=Start)
        {Start=CheckForOpen(); cnt=1;}
      else
        {cnt+=1;}
      //---
      if(cnt==8)
        {
         // Открытие ордера по методу Пуриа
         if(CheckForOpen()==0) // Если сигнал для покупок 
           {
            if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue))
              {Print("BUY OK");}
              else {Print(GetLastError());}
           } 
         if(CheckForOpen()==1) // Если сигнал для продаж 
           {
            if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red))
              {Print("SELL OK");}
              else {Print(GetLastError());}
           }
        }   
      newbar=Time[0];
     }
  }

    2. При запуске советника, на первой свече открывается ордер на SELL самый первый, при том, что сигналов не было. То есть, этот самый первый ордер - лишний, при запуске, советник не должен сразу открывать сделку на первом же ордере, просто потому-что советник только что запустился. Как можно это исправить? У меня есть предположение, что за это отвечает Init, и надо просто поменять на "false" или вообще удалить этот Init?

bool OrderBuy = true, OrderSell = true, Order = false, Init = true;

   3. И последнее - если всё так и оставить, и запустить его торговать сразу на нескольких валютных парах - всё так и будет работать, как надо? Или в коде надо ещё что-то прописать, что-бы не было никаких багов и т.п. , особенно, если этот советник будет работать на нескольких валютных парах одновременно?

Собственно это всё что мен интересует, НО в любом случае - ещё раз, огромное спасибо! Если бы сам разбирался бы, то хз сколько времени могло ещё уйти)

 
artem artem #:

Проверил, и на тиках, и на цене открытия... РА-БО-ТА-ЕТ!!!!

    MakarFX, огромное тебе спасибо!!! Я уже 2 недели не над этой головоломкой парюсь, и всё безрезультатно до сегодня. Спасибо тебе большое, ещё раз! У меня осталась буквально несколько уточнений, и не буду больше тебя задерживать, и так много времени было потрачено твоего. Собственно, вот что интересует:


  1. Насколько я понял, если я захочу изменить колличество "свеч-подтверждения", то тогда мне надо просто в константе изменить одну цифру на другую, и всё?

    2. При запуске советника, на первой свече открывается ордер на SELL самый первый, при том, что сигналов не было. То есть, этот самый первый ордер - лишний, при запуске, советник не должен сразу открывать сделку на первом же ордере, просто потому-что советник только что запустился. Как можно это исправить? У меня есть предположение, что за это отвечает Init, и надо просто поменять на "false" или вообще удалить этот Init?

   3. И последнее - если всё так и оставить, и запустить его торговать сразу на нескольких валютных парах - всё так и будет работать, как надо? Или в коде надо ещё что-то прописать, что-бы не было никаких багов и т.п. , особенно, если этот советник будет работать на нескольких валютных парах одновременно?

Собственно это всё что мен интересует, НО в любом случае - ещё раз, огромное спасибо! Если бы сам разбирался бы, то хз сколько времени могло ещё уйти)

1) Да, это значения количества "свеч-подтверждения"

2) Нет, на первой не открывает, только после заданного кол-ва "свеч-подтверждения"

3) Меняй магик и ставь на любую пару

Магик лучше сделать внешней переменной

 
Ivan Butko #:
Подскажите, есть ли способ разграничить строки настроек советника в терминале, чтобы их нельзя было стереть? Если писать extern string в коде, то это даёт возможность редактирования строчки, а если случайно удалил, то надо нажать "сброс", чтобы восстановилась, но тогда все настройки сбрасываются. Их, конечно же, предварительно можно сохранить в сет-файле, но мне просто любопытно, можно ли сделать "каменную табличку")
Сделай ENUM
 
MakarFX #:
Сделай ENUM

Попробую, спасибо

 
Ivan Butko #:

Попробую, спасибо

enum MODE
  {
   MODE_1=1,    // Мертвая строка
  };
//--- input parameters
input MODE mode= MODE_1; // Эта строка
Причина обращения: