Скрипт, который бы проверял есть ли открытый селл

 

 Здравствуйте ,форумчане! Кому не сложно и не в лом, напишите пожалуйста скрипт который бы проверял есть ли открытый шелл + нет ли любых отложеных ордеров и если вышесказанное -истина, то ставил  бы бай стоп с определенными параметрами.(параметры можете любые поставить, я уж там разберусь)

Уверен, ничего сложного в этом нет. Но пока не осилю даже это.

Если кому не трудно - буду очень благодарен!!!!

Спасибо за внимание!!! 

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
if(PositionSelect(_Symbol)){
  if(PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_SELL){
     if(OrdersTotal()<0){
         
        MqlTradeRequest request; MqlTradeResult result; MqlTick tick; SymbolInfoTick(_Symbol,tick);

        request.type         = ORDER_TYPE_BUY_STOP;
        request.price        = NormalizeDouble(tick.bid + НаСколькоПунктовОтложенОрдер*_Point,_Digits);
        request.sl           = NormalizeDouble(ЦенаСтопЛоса,_Digits);
        request.tp           = NormalizeDouble(ЦенаПрофита,_Digits);
        request.expiration   = 0;
        request.action       = TRADE_ACTION_PENDING;
        request.symbol       = _Symbol;
        request.type_filling = ORDER_FILLING_AON;
        request.deviation    = Проскальзывание;
        request.magic        = Магик;
        request.type_time    = ORDER_TIME_GTC;
        request.volume       = Лот;
        request.comment      = "комментарий";
        ResetLastError();
        OrderSend(request,result);

}}}

 

maryan.dirtyn:

Спасибо большое, щас буду пробовать

 

 

Приветствую Всех.

Подскажите как посчитать все ордера (отложенные и рыночные) по нужному символу. Пробовал так:

for(i=0;i<PositionsTotal();i++) // считаем рыночные
     {
      if(Symbol()==PositionGetSymbol(i))
        {
         Orders_Total=Orders_Total+1;
        }
     }
   for(i=0;i<OrdersTotal();i++) // считаем отложенные
     {
      ticket=OrderGetTicket(i);
      if(OrderGetString(ORDER_SYMBOL)==Symbol())
      Orders_Total=Orders_Total+1;
     }

Думаю это не правильно, да и при компиляции предупреждение possible loss of data due to type conversion CTM2.mq5 64 13

и вообще... может есть более грамотное решение? 

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
RomanS:

Приветствую Всех.

Подскажите как посчитать все ордера (отложенные и рыночные) по нужному символу. Пробовал так:

Думаю это не правильно, да и при компиляции предупреждение possible loss of data due to type conversion CTM2.mq5 64 13

и вообще... может есть более грамотное решение? 

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

А код на глаз правильный. Только заморачиваться с циклом по позициям не нужно. Она либо есть, либо нет. PositionSelect вполне подойдет. И еще можно ввести переменную int orders_total = OrdersTotal(); и цикл по ней пускать.

 
hasayama:

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

А код на глаз правильный. Только заморачиваться с циклом по позициям не нужно. Она либо есть, либо нет. PositionSelect вполне подойдет. И еще можно ввести переменную int orders_total = OrdersTotal(); и цикл по ней пускать.

В том то и дело PositionSelect выбирает только открытые ордера, а OrdersTotal() показывает только кол-во отложенных ордеров, а мне нужна их сумма, т.е. сколько всего рыночные + отложенные + только по определенному символу
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
RomanS:
В том то и дело PositionSelect выбирает только открытые ордера, а OrdersTotal() показывает только кол-во отложенных ордеров, а мне нужна их сумма, т.е. сколько всего рыночные + отложенные + только по определенному символу

Ну, посчитали все ордера по символу и увеличили на 1, если есть позиция ( PositionSelect( symbol ) == TRUE ) или оставляем без изменения, если позы нет. Все. Если путаете ордера, отложенные ордера и позиции, то почитайте документацию:  https://www.mql5.com/ru/docs/constants/tradingconstants

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы - Документация по MQL5
 
hasayama:

Ну, посчитали все ордера по символу и увеличили на 1, если есть позиция ( PositionSelect( symbol ) == TRUE ) или оставляем без изменения, если позы нет. Все. Если путаете ордера, отложенные ордера и позиции, то почитайте документацию:  https://www.mql5.com/ru/docs/constants/tradingconstants

Вы уж не ругайте новичка, второй день изучаю...

Ну, посчитали все ордера по символу 

 Да вот в этом и вопрос... OrdersTotal() не дает ВСЕХ ордеров, а только отложенных (на сколько я узнал из документации, если я правильно ее понял)

Как посчитать то ВСЕ ордера по символу? 

 
RomanS:

Вы уж не ругайте новичка, второй день изучаю...

 Да вот в этом и вопрос... OrdersTotal() не дает ВСЕХ ордеров, а только отложенных (на сколько я узнал из документации, если я правильно ее понял)

Как посчитать то ВСЕ ордера по символу? 

Есть отложенные ордера: БайСтоп, БайЛимит, СеллСтоп, СеллЛимит (и еще каких-то тут добавили в 5-ке) - количество этих ордеров возвращает функция OrdersTotal().

Есть просто ордера, то есть заявки на торговые операции. Напримр, когда открываете позицию сначала генерируется ордер из которого получается сделка и результатом сделки есть позиция.

Если нужно посчитать именно эти ордера (заявки) , то нужно:

1. Запросить о них историю -> HistorySelect( FROM, TO ) 

2. Если функция сработала нормально, можно запрашивать сколько всего есть ордеров -> HistoryOrdersTotal().

 

Вот документация: https://www.mql5.com/ru/docs/trading/historyselecthttps://www.mql5.com/ru/docs/trading/historyorderstotal.

Документация по MQL5: Торговые функции / HistorySelect
Документация по MQL5: Торговые функции / HistorySelect
  • www.mql5.com
Торговые функции / HistorySelect - Документация по MQL5
 
hasayama:

Есть отложенные ордера: БайСтоп, БайЛимит, СеллСтоп, СеллЛимит (и еще каких-то тут добавили в 5-ке) - количество этих ордеров возвращает функция OrdersTotal().

Есть просто ордера, то есть заявки на торговые операции. Напримр, когда открываете позицию сначала генерируется ордер из которого получается сделка и результатом сделки есть позиция.

Если нужно посчитать именно эти ордера (заявки) , то нужно:

1. Запросить о них историю -> HistorySelect( FROM, TO ) 

2. Если функция сработала нормально, можно запрашивать сколько всего есть ордеров -> HistoryOrdersTotal().

 

Вот документация: https://www.mql5.com/ru/docs/trading/historyselecthttps://www.mql5.com/ru/docs/trading/historyorderstotal.

т.е. если у меня из пяти рыночных ордеров, естьтолько один с евробаксом + из 8-ми отложенных, два отложенных по немуже (т.е. в сумме три)  OrdersTotal() нам вернет 2 так?

а за рыночным надо лезть в историю???  :О) 

 
RomanS:

Вы уж не ругайте новичка, второй день изучаю...

 Да вот в этом и вопрос... OrdersTotal() не дает ВСЕХ ордеров, а только отложенных (на сколько я узнал из документации, если я правильно ее понял)

Как посчитать то ВСЕ ордера по символу? 

позиция по символу только одна. Так что если PositionSelect вернула true то позиция существует и равна 1.  в коде примерно будет выглядеть так

//+------------------------------------------------------------------+
int order;
if(PositionSelect(_Symbol))
  {
   order=1;
   int total=OrdersTotal();
   for(i=total-1;i>=0;i--)
     {
      tiket=OrderGetTicket(i);
      if(OrderGetString(ORDER_SYMBOL)==_Symbol)
        {
         order++;
        }
     }
  }
else
  {
   int total=OrdersTotal();
   for(i=total-1;i>=0;i--)
     {
      tiket=OrderGetTicket(i);
      if(OrderGetString(ORDER_SYMBOL)==_Symbol)
        {
         order++;
        }
     }
  }
//+------------------------------------------------------------------+
Причина обращения: