позиция и ордер это разные вещи в мт5.
проверяй открытые ордера, а не позиции иначе будет тебе штамповать их.
Вот что в итоге родилось, но что то ордера выставлять не хочет никак, кто скажет где я ошибся?
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"); // если нет ордера, выставляем его } } } } }
Вот что в итоге родилось, но что то ордера выставлять не хочет никак, кто скажет где я ошибся?
Верхнее условие проверь ))
Верхнее это Сколько всего позиций? проверил оно работает, позиций 0, а 0=0 то есть истина и должен идти дальше.
Так зачем ему идти дальше если позиции отсутствуют? Что ты анализируешь? Несуществующие ордера?
Стоп, алгоритм работает как?
Начало
Если проверяем количество позиций
/ \
Истина Ложь ИСТИНА (0=0)
| |
Если | проверяем количество ордеров
/ \ |
Истина Ложь |
| | |
\ | /
конец
и т.д.
он должен входить внутрь условия и идти дальше, что не так.
первые 2 условия он проходит и на количество сделок и на количество ордеров, все там правильно, кажется вы сами немного не разбираетесь, только еще больше меня запутали, если уж советуете, то что то по существу, а не с потолка.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день, подскажите пожалуйста, как можно ограничить выставление отложенных ордеров до 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 ордер и ни черта больше не делает.