if (s+b==0) pl=0; if (s+b!=0 && sum>0 && Hour()>=ttk) pl=1; if (s>0 && b==0 && ((C0-O0)/point)>=del) {pl=1;tst=Time[0];} if (b>0 && s==0 && ((O0-C0)/point)>=del) {pl=1;tbt=Time[0];} // вычисление флага и проверка на наличие поз if (pl==1 && s+b>0) { for (i=0;i<OrdersTotal();i++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderProfit()>0) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),ask,3,Red); Sleep(10000); return(0); } if (OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderProfit()>0) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),bid,3,Red); Sleep(10000); return(0); } } }alex54 писал (а):
Кому не трудно Покажите где ошибка
Хочу советником закрыть позиции, открытые вручную Не получается
Заранее благодарен
nt start() { //---- for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderProfit( ) >0 ) { double MA= iMA(OrderSymbol(),PERIOD_M5,36,0,MODE_EMA,PRICE_CLOSE,1); { int order_type=OrderType(); if((order_type==OP_BUY && Close[1]<MA && Close[0]<Close[1]) ) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); if((order_type==OP_SELL && Close[1]>MA && Close[0]>Close[1]) ) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); } } } //---- return(0); }
Привет.
Во-первых код сделан нерационально с точки зрения использования ресурсов компа.
У тебя цикл запускаетя по каждому тику - это очень расточительно.
Лучше всего сделай так:
1. отдельно вычисли условия закрытия ордера по твоей машке и при наличии выставленного ордера и условия ставь флаг закрытия позы.
Тогда вход в цикл не будет пустым.
2. Скажем по сэлу флаг sl=1 а по баю bl=1; Тогда если есть открытые ордера и есть не обнуленный флаг входи в закрытие с условием флага и положительного профита.
3. В этом случае закрытие происходит один раз и цикл отработав засыпает до следующего раза, а после закрытия флаг там же в цикле обнуляется.
Этот код не для твоего случая, но как пример думаю пойдет
Во-первых код сделан нерационально с точки зрения использования ресурсов компа.
У тебя цикл запускаетя по каждому тику - это очень расточительно
убери if и скобки, просто OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) ;
Спасибо всем откликнувшимся Все заработало
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Кому не трудно Покажите где ошибка
Хочу советником закрыть позиции, открытые вручную Не получается
Заранее благодарен