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
и вообще... может есть более грамотное решение?

- www.mql5.com
Приветствую Всех.
Подскажите как посчитать все ордера (отложенные и рыночные) по нужному символу. Пробовал так:
Думаю это не правильно, да и при компиляции предупреждение possible loss of data due to type conversion CTM2.mq5 64 13
и вообще... может есть более грамотное решение?
Предупреждение из-за приведения типов, у вас тут никаких супер расчетов нет, значит влиять не должно. Но ради приличия посмотрите, какое значение возвращают функции и каким типам переменных вы эти значения присваиваете.
А код на глаз правильный. Только заморачиваться с циклом по позициям не нужно. Она либо есть, либо нет. PositionSelect вполне подойдет. И еще можно ввести переменную int orders_total = OrdersTotal(); и цикл по ней пускать.
Предупреждение из-за приведения типов, у вас тут никаких супер расчетов нет, значит влиять не должно. Но ради приличия посмотрите, какое значение возвращают функции и каким типам переменных вы эти значения присваиваете.
А код на глаз правильный. Только заморачиваться с циклом по позициям не нужно. Она либо есть, либо нет. PositionSelect вполне подойдет. И еще можно ввести переменную int orders_total = OrdersTotal(); и цикл по ней пускать.

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

- www.mql5.com
Ну, посчитали все ордера по символу и увеличили на 1, если есть позиция ( PositionSelect( symbol ) == TRUE ) или оставляем без изменения, если позы нет. Все. Если путаете ордера, отложенные ордера и позиции, то почитайте документацию: https://www.mql5.com/ru/docs/constants/tradingconstants
Вы уж не ругайте новичка, второй день изучаю...
Ну, посчитали все ордера по символу
Да вот в этом и вопрос... OrdersTotal() не дает ВСЕХ ордеров, а только отложенных (на сколько я узнал из документации, если я правильно ее понял)
Как посчитать то ВСЕ ордера по символу?
Вы уж не ругайте новичка, второй день изучаю...
Да вот в этом и вопрос... OrdersTotal() не дает ВСЕХ ордеров, а только отложенных (на сколько я узнал из документации, если я правильно ее понял)
Как посчитать то ВСЕ ордера по символу?
Есть отложенные ордера: БайСтоп, БайЛимит, СеллСтоп, СеллЛимит (и еще каких-то тут добавили в 5-ке) - количество этих ордеров возвращает функция OrdersTotal().
Есть просто ордера, то есть заявки на торговые операции. Напримр, когда открываете позицию сначала генерируется ордер из которого получается сделка и результатом сделки есть позиция.
Если нужно посчитать именно эти ордера (заявки) , то нужно:
1. Запросить о них историю -> HistorySelect( FROM, TO )
2. Если функция сработала нормально, можно запрашивать сколько всего есть ордеров -> HistoryOrdersTotal().
Вот документация: https://www.mql5.com/ru/docs/trading/historyselect, https://www.mql5.com/ru/docs/trading/historyorderstotal.

- www.mql5.com
Есть отложенные ордера: БайСтоп, БайЛимит, СеллСтоп, СеллЛимит (и еще каких-то тут добавили в 5-ке) - количество этих ордеров возвращает функция OrdersTotal().
Есть просто ордера, то есть заявки на торговые операции. Напримр, когда открываете позицию сначала генерируется ордер из которого получается сделка и результатом сделки есть позиция.
Если нужно посчитать именно эти ордера (заявки) , то нужно:
1. Запросить о них историю -> HistorySelect( FROM, TO )
2. Если функция сработала нормально, можно запрашивать сколько всего есть ордеров -> HistoryOrdersTotal().
Вот документация: https://www.mql5.com/ru/docs/trading/historyselect, https://www.mql5.com/ru/docs/trading/historyorderstotal.
т.е. если у меня из пяти рыночных ордеров, естьтолько один с евробаксом + из 8-ми отложенных, два отложенных по немуже (т.е. в сумме три) OrdersTotal() нам вернет 2 так?
а за рыночным надо лезть в историю??? :О)
Вы уж не ругайте новичка, второй день изучаю...
Да вот в этом и вопрос... 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++; } } } //+------------------------------------------------------------------+

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте ,форумчане! Кому не сложно и не в лом, напишите пожалуйста скрипт который бы проверял есть ли открытый шелл + нет ли любых отложеных ордеров и если вышесказанное -истина, то ставил бы бай стоп с определенными параметрами.(параметры можете любые поставить, я уж там разберусь)
Уверен, ничего сложного в этом нет. Но пока не осилю даже это.
Если кому не трудно - буду очень благодарен!!!!
Спасибо за внимание!!!