extern int MinTP = 50; // минимальный виртуальный тейк профит extern int MinSL = 50; // минимальный виртуальный стоп лосс extern string Magic="Магическое число"; extern int mn=7777; // "магический номер" для отличия своих ордеров от чужих extern string Server="Параметры сервера"; extern int Slippage=10; // допустимое проскальзование цены
//+------------------------------------------------------------------+ //| Закрыть прибыльные ордера | //+------------------------------------------------------------------+ // ====================== Закрыть BUY в профите =============================== double ClossAllProfitBuy () { int Profit1=MinTP; int col1=Gold; int ask1, bid1, open1; double point1; for (int i1=OrdersTotal()-1; i1>=0; i1--) { if (!OrderSelect(i1,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn)) { point1=MarketInfo(Symbol(),MODE_POINT); if (point1==0) break; bid1=MathRound(MarketInfo(OrderSymbol(),MODE_BID)/point1); open1=MathRound(OrderOpenPrice()/point1); if (bid1-open1<Profit1) continue; OrderClose(OrderTicket(),OrderLots(),bid1*point1,Slippage,col1); } } } // End // ====================== Закрыть SELL в профите =============================== double ClossAllProfitSell () { int Profit2=MinTP; int col2=Gold; int ask2, bid2, open2; double point2; for (int i2=OrdersTotal()-1; i2>=0; i2--) { if (!OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn)) { point2=MarketInfo(Symbol(),MODE_POINT); if (point2==0) break; ask2=MathRound(MarketInfo(OrderSymbol(),MODE_ASK)/point2); open2=MathRound(OrderOpenPrice()/point2); if (open2-ask2<Profit2) continue; OrderClose (OrderTicket(),OrderLots(),ask2*point2,Slippage,col2) ; } } } // End //+------------------------------------------------------------------+ //| Закрыть убыточные ордера | //+------------------------------------------------------------------+ // ====================== Закрыть BUY в убытке =============================== double ClossAllLossBuy() { int Stop4=MinSL; int ask4, bid4, open4; double point4; for (int i4=OrdersTotal()-1; i4>=0; i4--) { if (!OrderSelect(i4,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn)) { point4=MarketInfo(Symbol(),MODE_POINT); if (point4==0) break; bid4=MathRound(MarketInfo(Symbol(),MODE_BID)/point4); open4=MathRound(OrderOpenPrice()/point4); if (open4-bid4<Stop4) continue; OrderClose(OrderTicket(),OrderLots(),bid4*point4,Slippage,Red); } } } // End // ====================== Закрыть SELL в убытке =============================== double ClossAllLossSell() { int Stop5=MinSL; int ask5, bid5, open5; double point5; for (int i5=OrdersTotal()-1; i5>=0; i5--) { if (!OrderSelect(i5,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn)) { point5=MarketInfo(Symbol(),MODE_POINT); if (point5==0) break; ask5=MathRound(MarketInfo(Symbol(),MODE_ASK)/point5); open5=MathRound(OrderOpenPrice()/point5); if (ask5-open5<Stop5) continue; OrderClose (OrderTicket(),OrderLots(),ask5*point5,Slippage,Red); } } } // EndПользуюсь таким вариантом, настройки под пятизнак, работает без проблем.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте помогите сделать функцию для советника которая закрывала бы все ордера с определенным магиком и в случае ошибки повторяла ордер на закрытие.Спасибо!
Сколько не пытался почему то советник виснет после нескольких попыток неудачного закрытия ордера