У KimIV-а есть функция ExistPosition
Найдете ее на этом форуме
int Orders=1;
if(total<Orders)
у меня так...
Сергей, это ты так пошутил?
Откуда у тебя total взялся?
По моему это и есть основной вопрос - не "как ограничить..." а как получить количество открытых ордеров. А уже как это количество с единицей сравнить - это и коню понятно. :)
int OrdersTotal( | ) |
Возвращает общее количество открытых и отложенных ордеров.
Используется в 99% советников, достаточно взять любой и посмотреть...
Вот, например, можно -
//---- input parameters--------- extern string ___ = "Параметры Длинных позиций"; extern int MaxOpenPos_BUY = 3;//кол-во одновременно откр. поз ... ... ... ... ... ... ... ... ... if(NumberOfPositions(NULL,OP_BUY, Magic) < MaxOpenPos_BUY) {//если позиций // версии BUY менее заданного знач. if (iBarShift(NULL,0,OpenTime1) != 0) {//если на этом баре // не было откр. поз //---------проверяем условие на покупку---------------------------- if ( условия открытия позиции ) //---------------------------------------------------------------- {//ПОКУПАЕМ ticket=OrderSend(Symbol(),0,Lots,Ask,Slippage,Bid-sl*Point,Ask+tp*Point, "EXPERT",Magic,0,CLR_NONE); if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return (0); } } OpenTime1 = iTime(NULL,0,0); ... ... ... ... ... ... ... .. ... //Вне функции СТАРТ : //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+ //| Автор : Ким Игорь В. 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 OrdersTotal( | ) |
это слишком тривиально, если торгуют несколько советников, они запутаются, по этому я и предложил то, что предложил.
Сам я использую алгоритм, при котором проверяется тип ордера, инструмент, и советник, который его контролирует.
Но для топик-стартера хватит и OrdersTotal()
Пока писал стало уже не актульно.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования