нужна помощь с советником, не хватает всего одной функции!!!

 

Коллеги, привет! пишу себе советника. все получилось по установке и открытию сделок на основе индикатора. не могу решить одну проблему(((

может кто подскажет.

при сработывании сигнала открывается сделка и 2 отложки.

надо, чтобы при закрытии любой сделки остальные тоже закрывались.

с учетом 3 ордеров есть 3 варианта

1. закрылся рыночный ордер, осталось 2 отложки - надо снести отложки

2. закрылась по ТП 1 отложка - надо сразу закрыть второй рыночный и снести отложку

3. закрылась по ТП 2 отложка - надо сразу закрыть 2 других открытых ордера


в итоге получается, что если одновременно на графике становиться не 3 ордера(открытые и/или отложки)6 а 2 ордера - их надо снести.

нашел кучу скриптов, но ни один не сработал.

может не в ту часть кода вписываю(((


помогите, кто может)))


Заранее спасибо


вот код без функции удаления ордеров


//+------------------------------------------------------------------+

//|                                                         свой.mq4 |

//|                                  Copyright 2023, MetaQuotes Ltd. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property strict


datetime dt;


input int InpBandsPeriods = 20;

input double InpBandsDeviations = 2;

input ENUM_APPLIED_PRICE InpBandsAPPLIEDPRICE = PRICE_CLOSE;


input int InpMagicNumber = 777;

input string InpTradeComment = __FILE__;




int OnInit()

  {

 

   

   return(INIT_SUCCEEDED);

  }


void OnDeinit(const int reason)

  {

  

  }

  

void OnTick()

{

    if(!IsNewBar())  return;

      

    double close1 = iClose(Symbol(), Period(), 1);

    double high1 = iHigh(Symbol(), Period(), 1);

    double low1 = iLow(Symbol(), Period(), 1);

    double open1 = iOpen(Symbol(), Period(), 1);

    

    double close2 = iClose(Symbol(), Period(), 2);

    double high2 = iHigh(Symbol(), Period(), 2);

    double low2 = iLow(Symbol(), Period(), 2);

    double open2 = iOpen(Symbol(), Period(), 2);

    

    double upper1 = iBands(Symbol(), Period(), InpBandsPeriods, InpBandsDeviations, 0, InpBandsAPPLIEDPRICE, MODE_UPPER, 1);

    double lower1 = iBands(Symbol(), Period(), InpBandsPeriods, InpBandsDeviations, 0, InpBandsAPPLIEDPRICE, MODE_LOWER, 1);

    double upper2 = iBands(Symbol(), Period(), InpBandsPeriods, InpBandsDeviations, 0, InpBandsAPPLIEDPRICE, MODE_UPPER, 2);

    double lower2 = iBands(Symbol(), Period(), InpBandsPeriods, InpBandsDeviations, 0, InpBandsAPPLIEDPRICE, MODE_LOWER, 2);

   

   if (close2>upper2 && close1<open1) {

   if (OrdersTotal()<1){

   OrderSend(Symbol(), OP_SELLLIMIT, 0.06, Bid+200*Point, 3, Ask+300*Point, Ask+100*Point, NULL, 333);

   OrderSend(Symbol(), OP_SELLLIMIT, 0.02, Bid+100*Point, 3, Ask+200*Point, Ask, NULL, 222);

   OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, Ask+300*Point, Ask-100*Point, NULL, 111);

   }

   }

   if (close2<lower2 && close1>open1) {

   if (OrdersTotal()<1){

   OrderSend(Symbol(), OP_BUYLIMIT, 0.02, Ask-100*Point, 3, Bid-200*Point, Bid, NULL, 555);

   OrderSend(Symbol(), OP_BUYLIMIT, 0.06, Ask-200*Point, 3, Bid-300*Point, Bid-100*Point, NULL, 666);

   OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, Bid+300*Point, Bid-100*Point, NULL, 444);

   }

   }

   

   

   return;

 }

   


 bool  IsNewBar() {

  if(Time[0] != dt) {

  dt = Time[0];

  return(TRUE);

  }

  return(FALSE);

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2023.11.14
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 

Давно не писал на 4-ке, нужно будет дописать функции закрытия и удаления, но примерно так:

перед OnTick пишем int orders = 0; 

В конце  OnTick добавляем:
orders = OrdersTotal();


в начале OnTick - 

if (OrdersTotal()<orders) 
{

        for (int i = OrdersTotal()-1; i>-0; i--) 

  {

        if(OrdersType() <2)
                CloseOrder(Orderticket(), и что-то еще) ;
        else 
                OrderDelete(OrderTicket();

  }

}
 
kokon37:

Коллеги, привет! пишу себе советника. все получилось по установке и открытию сделок на основе индикатора. не могу решить одну проблему(((

может кто подскажет.

...

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  Исходный кодпредназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.