- Скрипты: Группировка истории счёта
- Перевод для Маркета - помогаем с переводом терминов на английский язык
- Ошибки, баги, вопросы
B_O_S_S:
Здравствуйте! Подскажите, пожалуйста, можно ли в МТ4 как то сгруппировать открытые ордера? Хотелось бы отсортировать по символу.
Если речь о вкладке "Торговля" окна "Терминал", то да, это просто. Нужно кликнуть по заголовку столбца "Символ" и выбрать направление сортировки.
Если речь об MQL4/5, то нужно перебрать все имеющиеся ордера и сохранить их в разные массивы в зависимости от имени символа.
И второй вопрос, можно ли закрывать ордера группами?
Без специально написанного советника/скрипта - нет. Хотя есть исключения. Например, если группа ордеров открыта в одном направлении и по одному символу. Тогда это можно сделать одним махом (но не одним торговым приказом).
Если речь о вкладке "Торговля" окна "Терминал", то да, это просто. Нужно кликнуть по заголовку столбца "Символ" и выбрать направление сортировки.
Если речь об MQL4/5, то нужно перебрать все имеющиеся ордера и сохранить их в разные массивы в зависимости от имени символа.
Без специально написанного советника/скрипта - нет. Хотя есть исключения. Например, если группа ордеров открыта в одном направлении и по одному символу. Тогда это можно сделать одним махом (но не одним торговым приказом).
А можете рассказать подробнее как "одним махом" закрыть группу ордеров открытых в одном направлении. Или где можно найти необходимый скрипт, если есть такой готовый?
Если брокер поддерживает встречное закрытие ордеров, то схема такая:
- Открыть противоположный ордер в обратном направлении с объемом, равным сумме объемов группы ордеров.
- Неспеша произвести операции встречного закрытия, т. к. прибыль/убыток по этим ордерам жестко зафиксирован. Поторопиться нужно только в том случае, если все это происходит близко к полуночи, чтобы не попасть на начисление свопа.
Кстати, нашел скрипт, который писал в 2010-ом году. Он выполняет быстрый переворот текущей позиции (немного не то, что Вы спрашиваете, но все же). Например, если есть по символу два ордера sell объемами 0.01 и 0.02, то скрипт откроет ордер buy объемом 0.06, а затем встречно закроет два sell и половину buy. В итоге получим buy объемом 0.03.
Немного освежил скрипт, но не менял названия функций. Поэтому он выглядит немного старовато. Тем не менее, он работает.
Если брокер поддерживает встречное закрытие ордеров, то схема такая:
- Открыть противоположный ордер в обратном направлении с объемом, равным сумме объемов группы ордеров.
- Неспеша произвести операции встречного закрытия, т. к. прибыль/убыток по этим ордерам жестко зафиксирован. Поторопиться нужно только в том случае, если все это происходит близко к полуночи, чтобы не попасть на начисление свопа.
Кстати, нашел скрипт, который писал в 2010-ом году. Он выполняет быстрый переворот текущей позиции (немного не то, что Вы спрашиваете, но все же). Например, если есть по символу два ордера sell объемами 0.01 и 0.02, то скрипт откроет ордер buy объемом 0.06, а затем встречно закроет два sell и половину buy. В итоге получим buy объемом 0.03.
Немного освежил скрипт, но не менял названия функций. Поэтому он выглядит немного старовато. Тем не менее, он работает.
Супер!
Большое спасибо!
Буду разбираться.
Супер!
Большое спасибо!
Буду разбираться.
если интересно, функция закрывает по заданным параметрам группу ордеров
void OrderCloseType(string symbol,int type,int magic) { double price_close=0.0; int total=OrdersTotal(); for(int i=total-1; i>=0; i--) { int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); double bid=NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_BID),digits); double ask=NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_ASK),digits); if(!OrderSelect(i,SELECT_BY_POS))continue; if(OrderMagicNumber()!=magic)continue; if(OrderSymbol()!=symbol)continue; if(OrderType()!=type)continue; price_close=(type==ORDER_TYPE_BUY)?bid:ask; if(NormalizeDouble(NormalizePrice(symbol,price_close),digits)!=price_close)continue; ResetLastError(); bool res=OrderClose(OrderTicket(),OrderLots(),price_close,10000); if(!res) { m_print_rezult=StringConcatenate("error close position #",OrderTicket()," ",StrToType(OrderType())," ",DoubleToString(OrderLots(),2)," ",symbol,": ",GetLastError()); Print(m_print_rezult); } else { m_print_rezult=StringConcatenate("close position #",OrderTicket()," ",StrToType(OrderType())," ",DoubleToString(OrderLots(),2)," ",symbol); Print(m_print_rezult); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double NormalizePrice(string symbol,double value) { double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE); if(ts==0)return(value); return(NormalizeDouble(value/ts,0)*ts); } string StrToType(int type) { if(type==OP_BUY)return("BUY"); if(type==OP_SELL)return("SELL"); return((string)type); }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования