Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Закрытие всех ордеров по просадке баланса - эксперт для MetaTrader 4
- Просмотров:
- 3582
- Рейтинг:
- Опубликован:
- 2016.03.04 13:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Код, закрывающий все открытые ордера при достижении определенного процента просадки баланса.
От вас требуется только ввести мэджик для ордера (или 0, чтобы выделить все ордера) и максимальный процент просадки, достижение которого приведет к закрытию.
Для использования в этом коде вызывается функция DD_close.
В аттаче - файл с кодом и советник, который был построен на нем.
// Чтобы использовать эту опцию, вы должны всего лишь вызвать функцию: ( DD_close ) //+------------------------------------------------------------------+ //| Global scope | //+------------------------------------------------------------------+ bool Close_All_V; //+------------------------------------------------------------------+ //| Основная функция | //+------------------------------------------------------------------+ // DD: Процент просадки. 100 означает, что ордер не закрывается никогда. // Magic_Number: "Магический номер". Введите 0, чтобы выбрать все ордера. void DD_close(int DD,int Magic_Number) { if(DD(Magic_Number)>=DD) Close_All_V=true; if(Close_All_V) Close_All(Magic_Number); } //+------------------------------------------------------------------+ //| Check close | //+------------------------------------------------------------------+ void Check_Close(int Check_Number) // проверка закрытия ордеров { if(Check_Number<0) Print("OrderClose failed with error: ",ErrorDescription(GetLastError())); else Close_All_V=false; } //+------------------------------------------------------------------+ //| Закрыть все | //+------------------------------------------------------------------+ void Close_All(int M_N) { int Loop=0; for(int i=0; Loop<OrdersTotal(); i++) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { Loop++; if(OrderSymbol()==Symbol()) if(OrderMagicNumber()==M_N || OrderMagicNumber()==0) { if(OrderType()==OP_BUY) Check_Close(OrderClose(OrderTicket(),OrderLots(),Bid,100,clrNONE)); if(OrderType()==OP_SELL) Check_Close(OrderClose(OrderTicket(),OrderLots(),Ask,100,clrNONE)); } } } //+------------------------------------------------------------------+ //| Расчет потерь | //+------------------------------------------------------------------+ double Loss(int M_N) { double re=0; int Loop=0; for(int i=0; Loop<OrdersTotal(); i++) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { Loop++; if(OrderSymbol()==Symbol()) if(OrderMagicNumber()==M_N || OrderMagicNumber()==0) re=re+OrderProfit(); } return re * -1; } //+------------------------------------------------------------------+ //| Расчет процента просадки | //+------------------------------------------------------------------+ double DD(int M_N) { return ( 100 / AccountBalance( ) ) * Loss ( M_N ); } //+------------------------------------------------------------------+
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/14582
Простой советник, закрывающий позиции с профитом или потерями.
Plot MQL signalСкрипт строит историю по сигналу на графике в MetaTrader 4.
Индикатор для расчета среднего объема на трендовом участке линии Zig Zag, ограниченном двумя вертикальными линиями.
PricePercentRangeИндикатор, рассчитывающий движение цены на основании процентного соотношения High и Low на 100 барах.