- Как узнать, что по выходным нет торговли?
- [ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда.
- [Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2.
Может это поможет:
https://www.mql5.com/ru/code/8820
или вот ещё: http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=50
Да чёто не очень то и помогло......
for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); OrderClose(OrderTicket(),OrderLots(),Ask,5,Red); }Вот как я пробовал их закрыть, но ни ошибок, ни закрытия ордера не происходит....
почти на все случаи подходит
//Закрываем позиции
int CloseAllPosALL(int ticket)
{
for(int i=0;i<OrdersTotal();i++){
if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicnumer)
{ int TYPE=OrderType();
if(TYPE==OP_BUY && (ticket==0||ticket==OrderTicket())){OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow);i--;}
if(TYPE==OP_SELL && (ticket==0||ticket==OrderTicket())){OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow);i--;}
}}
}// end for
//=====
return(0);
}
//функция закрытия ордеров void CloseAllOrders(int type) { int total = OrdersTotal(); for(int pos = 0;pos < total; pos++){ if(OrderSelect(pos, SELECT_BY_POS) == true){ if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true){ if (OrderSymbol() == Symbol()){ int err = 0; int count = 0; while ((err != 1) && (count < 10)) { if (OrdersTotal() == 0) return(0); count++; RefreshRates(); if (OrderType() == type) if(type == OP_BUY) err = OrderClose(OrderTicket(),OrderLots(),Ask,slip,Violet); //Close position else if(type == OP_SELL) err = OrderClose(OrderTicket(),OrderLots(),Bid,slip,Violet); //Close position }//while }//Symbol() }//OrderSelect }//OrderSelect }//for }//CloseAllOrders
Или вот так, в принципе и та и эта функции пока не подводили... обработки ошибок в случае не удачи нет, но можно добавить при желании, только смысл есть ли, если не дают значит кто то на том проводе не хочет что бы вы закрылись.)))
//функция закрытия ордеров================================================================================================ void CloseThisSymbolAll() { for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { if(!OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) break; if (OrderSymbol() == Symbol()) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { while (!IsTradeAllowed()) Sleep(1000); RefreshRates(); if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,digits), slipCl, Blue); if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,digits), slipCl, Red); } } } }
Ну кто же закрывает все позиции перебором в + надо же с OrdersTotal до 0 .
Сколько об этом уже говорили,что повторять смешно.
почти на все случаи подходит
//Закрываем позиции
int CloseAllPosALL(int ticket)
{
for(int i=0;i<OrdersTotal();i++){
if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicnumer)
{ int TYPE=OrderType();
if(TYPE==OP_BUY && (ticket==0||ticket==OrderTicket())){OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow);i--;}
if(TYPE==OP_SELL && (ticket==0||ticket==OrderTicket())){OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow);i--;}
}}
}// end for
//=====
return(0);
}
Чето ошибка со скобками, никак не пойту.....
Попробуйте вот так . Гарантированно закрывает всё что есть.
#include <WinUser32.mqh> int ret,ORD=0,ic; //+------------------------------------------------------------------+ //| script "Close all positions" | //+------------------------------------------------------------------+ int start() { int MM=MessageBox(" Вы Уверены в удалении всех ордеров"+"\n "+Symbol(), "Question", MB_YESNO|MB_ICONQUESTION); if (MM==IDNO) {MessageBox(" Отменено");return(0);} Comment("ЗАКРЫВАЕМ ВСЁ"); while (Ord_Tot_Sym()>0) { RefreshRates(); for(ic=OrdersTotal()-1;ic>=0;ic--) { if(OrderSelect(ic,SELECT_BY_POS,MODE_TRADES)==false) continue; if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { ret=OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE); if (IsTradeAllowed()) continue; else Sleep(1000); } if (OrderType()==OP_SELL) { ret=OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE); if (IsTradeAllowed()) continue; else Sleep(1000); }}} //--------- Закрыли все позиции теперь закроем все ордера ------------------------ for(ic=OrdersTotal()-1;ic>=0;ic--) { if(OrderSelect(ic,SELECT_BY_POS,MODE_TRADES)==false) continue; if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT) ret=OrderDelete(OrderTicket()); }} PlaySound("alert.wav" ); } return(0); } //+------------------------------------------------------------------+ //---------------- Функция ----------------------------------------- int Ord_Tot_Sym() { int O_T=0; for(int rr=0;rr<OrdersTotal();rr++) // { if(OrderSelect(rr,SELECT_BY_POS,MODE_TRADES)==false) continue; if(OrderSymbol()==Symbol()) { O_T++; }} if (O_T>0) return(1); else return(0); }
Попробуйте вот так . Гарантированно закрывает всё что есть.
а че прям без проскальзывания закроет?)
Если ДЦ позволяет,то закроет.
Как в анекдоте "Вам шашечки или ехать" .
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования