Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 2496
- Рейтинг:
- Опубликован:
- 2019.12.09 11:41
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Советник начинает работу когда Equity торгового счёта достигает значения "Get started with Equity >=". После этого советник постоянно запоминает максимальное значение Equity (запоминает в переменную m_prev_max_equity и одновременно в глобальную переменную терминала "TEM").
Как только Equity снизится на "Close all with a decrease of" от максимального значения - это сигнал к закрытию всех позиций на торговом счёте. После закрытие всех позиций советник становится на паузу: удаляет глобальную переменную терминала и больше не отслеживает Equity.
Код советника:
//+------------------------------------------------------------------+ //| Trailing Equity Money.mq5 | //| Copyright © 2019, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2019, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.000" /* barabashkakvn Trading engine 3.109 */ #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\AccountInfo.mqh> //--- CPositionInfo m_position; // object of CPositionInfo class CTrade m_trade; // object of CTrade class CAccountInfo m_account; // object of CAccountInfo class //--- input parameters input double InpEquityStart = 5000; // Get started with Equity >= input double InpEquityDecrease = 300; // Close all with a decrease of //--- double m_prev_max_equity; // previous maximum Equity bool m_need_close_all = false; // close all positions string m_global_variable_name = "TEM"; bool m_pause = false; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Print("Balance: ",DoubleToString(m_account.Balance(),2)," Equity: ",DoubleToString(m_account.Equity(),2)); if(GlobalVariableCheck(m_global_variable_name)) m_prev_max_equity=GlobalVariableGet(m_global_variable_name); else GlobalVariableSet(m_global_variable_name,m_account.Equity()); if(m_pause) m_pause=false; Print("START"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(m_need_close_all) { if(IsPositionExists()) { CloseAllPositions(); return; } else m_need_close_all=false; } if(m_pause) return; if(PositionsTotal()==0) return; double current_equity=m_account.Equity(); if(current_equity>m_prev_max_equity) { m_prev_max_equity=current_equity; GlobalVariableSet(m_global_variable_name,m_prev_max_equity); GlobalVariableDel(m_global_variable_name); } else { if(current_equity<=m_prev_max_equity-InpEquityDecrease) { m_need_close_all=true; m_pause=true; Print("PAUSE"); } } } //+------------------------------------------------------------------+ //| Is position exists | //+------------------------------------------------------------------+ bool IsPositionExists(void) { for(int i=PositionsTotal()-1; i>=0; i--) if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Close all positions | //+------------------------------------------------------------------+ void CloseAllPositions(void) { for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties m_trade.PositionClose(m_position.Ticket()); // close a position by the specified m_symbol } //+------------------------------------------------------------------+

Советник-утилита: выполняет трейлинг прибыльных позиций по текущему символу

Торговая панель, с возможностью использования в тестере.

Скрипт формирует массив всех возможный торговых пар из 182 сочетаний валют

Работа отложенными Stop ордерами. Выставление отложенным ордеров в заданное время. Расчёт экстремумов цен за определённое количество баров.