Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Советники

Trailing Equity Money - эксперт для MetaTrader 5

Просмотров:
2087
Рейтинг:
(14)
Опубликован:
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
  }
//+------------------------------------------------------------------+
    Simple Trailing 2 Simple Trailing 2

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

    S-v1 S-v1

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

    Currency v1.0 Currency v1.0

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

    Pending Specified Time OHLC Max Min Pending Specified Time OHLC Max Min

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