Выставление отложенных ордеров

 

Добрый день, подскажите пожалуйста, как можно ограничить выставление отложенных ордеров до 1 штуки на buy и 1 на sell, чтоб он проверял если ордера в данном направлении нет, ставим его, если есть ничего не делаем.

у меня выходит только что он штампует их бесконечно, либо не ставит ни одного вообще.

if(m_Position.Select(my_symbol))

   {

      if(m_Position.PositionType()==POSITION_TYPE_BUY) return;

        {

         m_Trade.BuyStop(Lots,linebuy,my_symbol,linesell,tpbuy);

        }   

      if(m_Position.PositionType()==POSITION_TYPE_SELL) return;

        {

         m_Trade.SellStop(Lots,linesell,my_symbol,linebuy,tpsell);         

        }

   } 

Пробовал пользоваться VOM https://www.mql5.com/ru/articles/88

Но я так и не разобрался как она работает, он тупо открывает 1 ордер и ни черта больше не делает. 

 

позиция и ордер это разные вещи в мт5.

проверяй открытые ордера, а не позиции иначе будет тебе штамповать их. 

 
не подскажешь как проверять ордера?
 
вроде понял :) спасибо
 
Для начала узнаем сколько вообще ордеров открыто - OrdersTotal() если не ошибаюсь. Затем перебираем их в цикле и смотрим их тип. На каждой итерации при совпадении делаем приращение счетчика ордеров того или иного типа. Это на словах. Код искать дольше
 

Вот что в итоге родилось, но что то ордера выставлять не хочет никак, кто скажет где я ошибся?

if (PositionsTotal()==0)                            // если нет открытых позиций проверяем ордера
    {
     if (OrdersTotal()<2)                              // если ордеров меньше 2 выставляем их 1 - buy, 1 - sell.
      {
       for(int iM=2; iM<=OrdersTotal(); iM++)          // цикл перебора ордеров
        { 
         if (m_Order.Select(iM-1)==true)               // если есть следующий ордер
          {      
           if(m_Order.OrderType()==ORDER_TYPE_BUY_STOP) return;       // если уже существует BUY_STOP ордер по этому символу, выходим
            {
             m_Trade.BuyStop(Lots,linebuy,my_symbol,linesell,tpbuy,0,0,"BUY");  // если нет ордера, выставляем его
            }
           if(m_Order.OrderType()==ORDER_TYPE_SELL_STOP) return;       // если уже существует SELL_STOP ордер по этому символу, выходим
            {
             m_Trade.SellStop(Lots,linesell,my_symbol,linebuy,tpsell,0,0,"SELL");  // если нет ордера, выставляем его
            }
          }      
        }      
      }
    }
 
suharik:
Если вставлять код в сообщения на форуме правильно, то Ваши сообщения будут легче читаться. Правильно вставляем код на форуме

 
suharik:

Вот что в итоге родилось, но что то ордера выставлять не хочет никак, кто скажет где я ошибся?

Верхнее условие проверь ))
 
mmmoguschiy:
Верхнее условие проверь ))
Верхнее это Сколько всего позиций? проверил оно работает, позиций 0, а 0=0 то есть истина и должен идти дальше.
 
suharik:
Верхнее это Сколько всего позиций? проверил оно работает, позиций 0, а 0=0 то есть истина и должен идти дальше.
Так зачем ему идти дальше если позиции отсутствуют? Что ты анализируешь? Несуществующие ордера?
 
mmmoguschiy:
Так зачем ему идти дальше если позиции отсутствуют? Что ты анализируешь? Несуществующие ордера?

Стоп, алгоритм работает как?

                                                   Начало 

                                                     Если                       проверяем количество позиций 

                                                 /            \ 

                                          Истина         Ложь             ИСТИНА (0=0)  

                                               |                 |   

                                            Если               |               проверяем количество ордеров

                                       /              \          |

                                 Истина         Ложь     |               

                                      |                 |        |

                                       \                |       /

                                                   конец 

 

и т.д. 

 

он должен входить внутрь условия и идти дальше, что не так. 

первые 2 условия он проходит и на количество сделок и на количество ордеров, все там правильно, кажется вы сами немного не разбираетесь, только еще больше меня запутали, если уж советуете, то что то по существу, а не с потолка. 

Причина обращения: