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

 
Artyom Trishkin:
Открылся как? Причина открытия какова?

Причиной открытия позиции по евро и является открытие позиции по фунту. Очевидно, что это должно быть как-то записано в коде эксперта по евро. Но как - не понимаю.

 
novichok2018:

Причиной открытия позиции по евро и является открытие позиции по фунту. Очевидно, что это должно быть как-то записано в коде эксперта по евро. Но как - не понимаю.

Через обычное if() с проверкой комментариев. А в сами комментарии ордера вставляете время открытие или тикет того ордера от которого открывается второй
 
Alexandr Sokolov:
Через обычное if() с проверкой комментариев. А в сами комментарии ордера вставляете время открытие или тикет того ордера от которого открывается второй

Как в if() кода советника по евро дать ссылку на код советника по фунту? Как в коде по евро увидеть позицию по фунту?

 
novichok2018:

Как в if() кода советника по евро дать ссылку на код советника по фунту? Как в коде по евро увидеть позицию по фунту?

Ты сам всё усложняешь. Просто в цикле перебираешь ордера по евро, и каждый ордер по евро сравниваешь со всеми ордерами по фунту. И если ни один комментарий не совпадает, тогда открываешь ордер по фунту с комментарием в котором тикет или время открытие ордера по евро

 

Просветите пожалуйста, как передать результаты оптимизации советника в тестере МТ5, в советник на панели графика МТ5 ? Как сохранить их ?

В руководстве и Google найти не получается пока...

СПАСИБО.

Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 
Alexandr Sokolov:

Ты сам всё усложняешь. Просто в цикле перебираешь ордера по евро, и каждый ордер по евро сравниваешь со всеми ордерами по фунту. И если ни один комментарий не совпадает, тогда открываешь ордер по фунту с комментарием в котором тикет или время открытие ордера по евро

Если честно - я ничего не понял. Ситуация такая: нет ордеров ни на евро ни на фунте. И вот на фунте сложились условия на открытие позиции и позиция открылась. Открытие позиции на фунте должно стать сигналом на открытие позиции на евро и позиция должна открыться. Так что перебирать в цикле? И с комментами я ничего не понял. Можно написать примерный код, чтоб мне как-то въехать?

А можно в коде по фунту при появлении условий открывать две позиции - одну на фунте, другую на евро, указав в OrderSend необходимый символ? Будет такое работать?

 
novichok2018:

Если честно - я ничего не понял. Ситуация такая: нет ордеров ни на евро ни на фунте. И вот на фунте сложились условия на открытие позиции и позиция открылась. Открытие позиции на фунте должно стать сигналом на открытие позиции на евро и позиция должна открыться. Так что перебирать в цикле? И с комментами я ничего не понял. Можно написать примерный код, чтоб мне как-то въехать?

int ticket;
for(int  i = 0; i < OrdersTotal(); i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderMagicNumber() == id_number1 && OrderSymbol() == "GBPUSD")
        {
         if(SecondExpert(OrderTicket()) == false)
           {
            ticket = OrderSend(...);
           };
        };
     };
  };

//----------------------------------------------------------------------------------------------------------------------

bool SecondExpert(int ticket)
  {
   bool se = false;
   for(int i = 0; i < OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
        {
         if(OrderMagicNumber() == id_number2 && OrderSymbol() == "EURUSD")
           {
            if(OrderComment() == (string)ticket)
              {
               se = true; break;
              };
           };
        };
     };
  //-----------------------------------------------------------------
   return(se);
  }


Как то так я себе это представляю)

 
novichok2018:

Если честно - я ничего не понял. Ситуация такая: нет ордеров ни на евро ни на фунте. И вот на фунте сложились условия на открытие позиции и позиция открылась. Открытие позиции на фунте должно стать сигналом на открытие позиции на евро и позиция должна открыться. Так что перебирать в цикле? И с комментами я ничего не понял. Можно написать примерный код, чтоб мне как-то въехать?

Если это в одном советнике должно быть, как то примерно так

if(условие для EURUSD)
 {
  OrderSend("EURUSD", ... );
  OrderSend("GBPUSD", ... );
 }

if(условие для GBPUSD)
 {
  OrderSend("GBPUSD", ... );
  OrderSend("EURUSD", ... );
 }

Или ещё проще

if(условие для EURUSD || условие для GBPUSD)
 {
  OrderSend("EURUSD", ... );
  OrderSend("GBPUSD", ... );
 }
 
Alexey Viktorov:

Если это в одном советнике должно быть, как то примерно так

Или ещё проще

Да, я как-то так себе и представлял, но не могу проверить сработку на истории, ведь открытие позиции на евро должно произойти по условию для фунта и не отражается в коде для евро, а история-то изображается по евро. Отсюда неуверенность в правильности решения.

 
novichok2018:

Да, я как-то так себе и представлял, но не могу проверить сработку на истории, ведь открытие позиции на евро должно произойти по условию для фунта и не отражается в коде для евро, а история-то изображается по евро. Отсюда неуверенность в правильности решения.

Есть ещё у Игоря Кима функция bool ExistPositions() возвращающая флаг существования позиции, для меня сложновата в адаптации к конкретным моим условиям. Но и она по-моему не будет тестироваться в истории.

Если ни у кого нет проверенного на реале кода, чтобы показать, тогда буду пробовать научным тыком. Спасибо.