Не мог бы мне кто-нибудь разъяснить этот скрипт (взят из IlanDinamic)
LongTrade = TRUE; - означает что Sell уже открыт или это как команда к открытию Sell? (тоже самое для Buy)
Заранее благодарю
total = CountTrades(); if (total == 0) flag = FALSE; for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) { // открыт OP_BUY LongTrade = TRUE; // TRUE= разрешить открытие Sell ShortTrade = FALSE; // FALSE=запретить открытие Biu break; } } if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_SELL) { LongTrade = FALSE; ShortTrade = TRUE; break; } } }
Я так и подумала в начале, но потом меня смутило вот это:
if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
Я подумала, что раз count++; то ордера открыты.
LongTrade = TRUE; - означает
что уже есть открытые ордера BUY!!!!
Все я поняла - это для открытия противоположного ордера.
Спасибо!
Я все играюсь с этим скриптом.
Скажите, что нужно сюда добавить, чтобы открывался только один ордер?
int start() { total = CountTrades(); if (total ==0){ OrderSend(Symbol(),OP_BUY,0.10,Ask,3,0,0,"",1234,0,CLR_NONE); } return(0); } //+------------------------------------------------------------------+ int CountTrades() { int count = 0; for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++; } return (count); } //+------------------------------------------------------------------+
Все я поняла - это для открытия противоположного ордера.
Спасибо!
Верно!!!
А это общее кол. открытых позиций = count;
if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
Ещё вопрос.
Если функция CountTrades() уже проверила вот это:
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
и вернула значение count, то зачем ещё раз проверять это внутри функции int start()?
int start() { //---- total = CountTrades(); if (total == 0) flag = FALSE; for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) { LongTrade = TRUE; ShortTrade = FALSE; break; } } if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_SELL) { LongTrade = FALSE; ShortTrade = TRUE; break; } } } return(0); } //+------------------------------------------------------------------+ int CountTrades() { int count = 0; for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++; } return (count); } //+------------------------------------------------------------------+
Верно!!!
А это общее кол. открытых позиций = count;
А если добавить сюда: if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
еще отложенные то это будет равно OrdersTotal()?
А можно этим проверить только отложенные?
А если добавить сюда еще отложенные if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
еще отложенные то это будет равно OrdersTotal()?
Вот функция Игоря Ким
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает количество позиций. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfPositions(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(), kp=0; 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) kp++; } } } } } return(kp); }
Вызываем из советника
int countSELL = NumberOfPositions(NULL, OP_SELL); //Кол. OP_SELL
и все....
Вот функция Игоря Ким
Вызываем из советника
и все....
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Не мог бы мне кто-нибудь разъяснить этот скрипт (взят из IlanDinamic)
LongTrade = TRUE; - означает что Sell уже открыт или это как команда к открытию Sell? (тоже самое для Buy)
Заранее благодарю