Приветствую всех!
Ребята, помогите пожалуйста разобраться с параметрами OrdersTotal()....
как мне среди всех открытых ордеров, определить, что у меня не открыты ордера например по EURUSD?
пробовал
---- if (OrdersTotal(Symbol("EURUSD"))==0) - не работает
---- if (OrdersTotal(OrderSymbol("EURUSD"))==0) - не работает
как тогда?
И, может кто подскажет, где почитать допустимые параметры предопределенных функций... буду признателен.
OrdersTotal() не имеет параметров, если надо подсчитать по типам ордеров, значит понадобится цикл в котором будут перебраны все открытые и отложенные ордера, разделены по типам и по символам, и подсчитаны сколько их по каждой категории. Всё есть в справке метаедитора (Справочник MQL4 - Торговые функции - OrdersTotal):
int total=OrdersTotal(); // for(int pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; FileWrite(handle,OrderTicket(),OrderOpenPrice(),OrderOpenTime(),OrderSymbol(),OrderLots()); }
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 06.03.2008 | //| Описание : Возвращает флаг существования позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //| ot - время открытия ( 0 - любое время открытия) | //+----------------------------------------------------------------------------+ bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) { int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (ot<=OrderOpenTime()) return(True); } } } } } }... no comments ...
OrdersTotal() не имеет параметров, если надо подсчитать по типам ордеров, значит понадобится цикл в котором будут перебраны все открытые и отложенные ордера, разделены по типам и по символам, и подсчитаны сколько их по каждой категории. Всё есть в справке метаедитора (Справочник MQL4 - Торговые функции - OrdersTotal):
хм.....
суть в том, что мне нужно проверить, есть ли среди N-го кол-ва ордеров, открытые по конкретному символу.... если нет - то далее по условию открыть......
int eurusd_b; int eurusd_s; int gbpusd_b; int gbpusd_s; int start() { if (OrdersTotal()>0) { eurusd_b=0; eurusd_s=0; gbpusd_b=0; gbpusd_s=0; int total=OrdersTotal(); for (int pos=0;pos<total;pos++) { if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()=="EURUSD") { if (OrderType()==OP_BUY) { eurusd_b=1; } if (OrderType()==OP_SELL) { eurusd_s=1; } } if (OrderSymbol()=="GBPUSD") { if (OrderType()==OP_BUY) { gbpusd_b=1; } if (OrderType()==OP_SELL) { gbpusd_s=1; } } } } } }
а вот так будет работать? )))
учитывая то, что у меня не может по одному символу одновременно быть открыты ордера на BUY и SELL - думаю должно сработать )))
int eurusd_b; int eurusd_s; int gbpusd_b; int gbpusd_s; int start() { if (OrdersTotal()>0) { eurusd_b=0; eurusd_s=0; gbpusd_b=0; gbpusd_s=0; int total=OrdersTotal(); for (int pos=0;pos<total;pos++) { if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()=="EURUSD") { if (OrderType()==OP_BUY) { eurusd_b++; } if (OrderType()==OP_SELL) { eurusd_s++; } } if (OrderSymbol()=="GBPUSD") { if (OrderType()==OP_BUY) { gbpusd_b++; } if (OrderType()==OP_SELL) { gbpusd_s++; } } } } } }так будет показывать количество ордеров(суммировать)
ну почему суммировать? перед началом цикла, он обнуляет переменные и по окончании цикла, я (советник) увижу, есть ли у меня открытые ордера той или иной монеты, если читать мой код, без "++"
разве нет?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Приветствую всех!
Ребята, помогите пожалуйста разобраться с параметрами OrdersTotal()....
как мне среди всех открытых ордеров, определить, что у меня не открыты ордера например по EURUSD?
пробовал
---- if (OrdersTotal(Symbol("EURUSD"))==0) - не работает
---- if (OrdersTotal(OrderSymbol("EURUSD"))==0) - не работает
как тогда?
И, может кто подскажет, где почитать допустимые параметры предопределенных функций... буду признателен.