Фиксированный стоп неведомым образом смещается

EVGENII PANIN  

Коллеги,


Помогите, пожалуйста, разобраться с проблемой.

Сделал свой модуль трейлинга, который ставит фиксированный стоп и профит и не двигает их. Всё бы хорошо, но иногда стоп почему-то уносит.


Вот пример:


Вот исходник моего модуля трейлинга (я сделал его на основе аналогичного, входящего в поставку):

//+------------------------------------------------------------------+
//|                                            TrailingNoneFixedStop.mqh |
//|                   Copyright 2009-2016, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertTrailing.mqh>
// wizard description start
//+----------------------------------------------------------------------+
//| Description of the class                                             |
//| Title=Фиксированный стоп без трейлинга                        |
//| Type=Trailing                                                        |
//| Name=FixedPips                                                       |
//| Class=CTrailingNoneFixedStop                                             |
//| Page=                                                                |
//| Parameter=StopLevel,int,30,Stop Loss trailing level (in points)      |
//| Parameter=ProfitLevel,int,50,Take Profit trailing level (in points)  |
//+----------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CTrailingNoneFixedStop.                                        |
//| Purpose: Class of trailing stops with fixed stop level in pips.  |
//|              Derives from class CExpertTrailing.                 |
//+------------------------------------------------------------------+
class CTrailingNoneFixedStop : public CExpertTrailing
  {
protected:
   //--- input parameters
   int               m_stop_level;
    int               m_profit_level;

public:
                     CTrailingNoneFixedStop(void);
                    ~CTrailingNoneFixedStop(void);
   //--- methods of initialization of protected data
   void              StopLevel(int stop_level)     { m_stop_level=stop_level;     }
   void              ProfitLevel(int profit_level) { m_profit_level=profit_level; }
   virtual bool      ValidationSettings(void);
   //---
   virtual bool      CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp);
   virtual bool      CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp);
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
void CTrailingNoneFixedStop::CTrailingNoneFixedStop(void) : m_stop_level(30),
                                                    m_profit_level(50)
  {
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CTrailingNoneFixedStop::~CTrailingNoneFixedStop(void)
  {
  }
//+------------------------------------------------------------------+
//| Validation settings protected data.                              |
//+------------------------------------------------------------------+
bool CTrailingNoneFixedStop::ValidationSettings(void)
  {
   if(!CExpertTrailing::ValidationSettings())
      return(false);
//--- initial data checks
   if(m_profit_level!=0 && m_profit_level*(m_adjusted_point/m_symbol.Point())<m_symbol.StopsLevel())
     {
      printf(__FUNCTION__+": Profit Level must be 0 or greater than %d",m_symbol.StopsLevel());
      return(false);
     }

   if(m_stop_level!=0 && m_stop_level*(m_adjusted_point/m_symbol.Point())<m_symbol.StopsLevel())
     {
      printf(__FUNCTION__+": Stop Level must be 0 or greater than %d",m_symbol.StopsLevel());
      return(false);
     }
//--- ok
   return(true);
  }
//+------------------------------------------------------------------+
//| Checking trailing stop and/or profit for long position.          |
//+------------------------------------------------------------------+
bool CTrailingNoneFixedStop::CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp)
  {
//--- check
   if(position==NULL)
      return(false);
   if(m_stop_level==0)
      return(false);
//---
   double delta;
//---
   sl=EMPTY_VALUE;
   tp=EMPTY_VALUE;
  
   delta=m_stop_level*m_adjusted_point;
   sl = position.PriceOpen()-delta;

   if(m_profit_level!=0)tp = position.PriceOpen()+m_profit_level*m_adjusted_point;

//---
   return(sl!=EMPTY_VALUE);
  }
//+------------------------------------------------------------------+
//| Checking trailing stop and/or profit for short position.         |
//+------------------------------------------------------------------+
bool CTrailingNoneFixedStop::CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp)
  {
//--- check
   if(position==NULL)
      return(false);
   if(m_stop_level==0)
      return(false);
//---
   double delta;
   delta=m_stop_level*m_adjusted_point;
   sl = position.PriceOpen()+delta;

   if(m_profit_level!=0)tp = position.PriceOpen()-m_profit_level*m_adjusted_point;
    
//---
   return(sl!=EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

Помогите, пожалуйста, разобраться.  Стоп не должен никуда улетать.

Alekseu Fedotov  
varenich:

Коллеги,


Помогите, пожалуйста, разобраться с проблемой.

Сделал свой модуль трейлинга, который ставит фиксированный стоп и профит и не двигает их. Всё бы хорошо, но иногда стоп почему-то уносит.


Вот пример:

Вот исходник моего модуля трейлинга (я сделал его на основе аналогичного, входящего в поставку):

//+------------------------------------------------------------------+
//|                                            TrailingNoneFixedStop.mqh |
//|                   Copyright 2009-2016, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertTrailing.mqh>
// wizard description start
//+----------------------------------------------------------------------+
//| Description of the class                                             |
//| Title=Фиксированный стоп без трейлинга                        |
//| Type=Trailing                                                        |
//| Name=FixedPips                                                       |
//| Class=CTrailingNoneFixedStop                                             |
//| Page=                                                                |
//| Parameter=StopLevel,int,30,Stop Loss trailing level (in points)      |
//| Parameter=ProfitLevel,int,50,Take Profit trailing level (in points)  |
//+----------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CTrailingNoneFixedStop.                                        |
//| Purpose: Class of trailing stops with fixed stop level in pips.  |
//|              Derives from class CExpertTrailing.                 |
//+------------------------------------------------------------------+
class CTrailingNoneFixedStop : public CExpertTrailing
  {
protected:
   //--- input parameters
   int               m_stop_level;
    int               m_profit_level;

public:
                     CTrailingNoneFixedStop(void);
                    ~CTrailingNoneFixedStop(void);
   //--- methods of initialization of protected data
   void              StopLevel(int stop_level)     { m_stop_level=stop_level;     }
   void              ProfitLevel(int profit_level) { m_profit_level=profit_level; }
   virtual bool      ValidationSettings(void);
   //---
   virtual bool      CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp);
   virtual bool      CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp);
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
void CTrailingNoneFixedStop::CTrailingNoneFixedStop(void) : m_stop_level(30),
                                                    m_profit_level(50)
  {
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CTrailingNoneFixedStop::~CTrailingNoneFixedStop(void)
  {
  }
//+------------------------------------------------------------------+
//| Validation settings protected data.                              |
//+------------------------------------------------------------------+
bool CTrailingNoneFixedStop::ValidationSettings(void)
  {
   if(!CExpertTrailing::ValidationSettings())
      return(false);
//--- initial data checks
   if(m_profit_level!=0 && m_profit_level*(m_adjusted_point/m_symbol.Point())<m_symbol.StopsLevel())
     {
      printf(__FUNCTION__+": Profit Level must be 0 or greater than %d",m_symbol.StopsLevel());
      return(false);
     }

   if(m_stop_level!=0 && m_stop_level*(m_adjusted_point/m_symbol.Point())<m_symbol.StopsLevel())
     {
      printf(__FUNCTION__+": Stop Level must be 0 or greater than %d",m_symbol.StopsLevel());
      return(false);
     }
//--- ok
   return(true);
  }
//+------------------------------------------------------------------+
//| Checking trailing stop and/or profit for long position.          |
//+------------------------------------------------------------------+
bool CTrailingNoneFixedStop::CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp)
  {
//--- check
   if(position==NULL)
      return(false);
   if(m_stop_level==0)
      return(false);
//---
   double delta;
//---
   sl=EMPTY_VALUE;
   tp=EMPTY_VALUE;
  
   delta=m_stop_level*m_adjusted_point;
   sl = position.PriceOpen()-delta;

   if(m_profit_level!=0)tp = position.PriceOpen()+m_profit_level*m_adjusted_point;

//---
   return(sl!=EMPTY_VALUE);
  }
//+------------------------------------------------------------------+
//| Checking trailing stop and/or profit for short position.         |
//+------------------------------------------------------------------+
bool CTrailingNoneFixedStop::CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp)
  {
//--- check
   if(position==NULL)
      return(false);
   if(m_stop_level==0)
      return(false);
//---
   double delta;
   delta=m_stop_level*m_adjusted_point;
   sl = position.PriceOpen()+delta;

   if(m_profit_level!=0)tp = position.PriceOpen()-m_profit_level*m_adjusted_point;
    
//---
   return(sl!=EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

Помогите, пожалуйста, разобраться.  Стоп не должен никуда улетать.

Стоп не улетает,  сред расширяется.
EVGENII PANIN  
varenich:

Коллеги,


Помогите, пожалуйста, разобраться с проблемой.

Сделал свой модуль трейлинга, который ставит фиксированный стоп и профит и не двигает их. Всё бы хорошо, но иногда стоп почему-то уносит.


Вот пример:

Вот исходник моего модуля трейлинга (я сделал его на основе аналогичного, входящего в поставку):

//+------------------------------------------------------------------+
//|                                            TrailingNoneFixedStop.mqh |
//|                   Copyright 2009-2016, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertTrailing.mqh>
// wizard description start
//+----------------------------------------------------------------------+
//| Description of the class                                             |
//| Title=Фиксированный стоп без трейлинга                        |
//| Type=Trailing                                                        |
//| Name=FixedPips                                                       |
//| Class=CTrailingNoneFixedStop                                             |
//| Page=                                                                |
//| Parameter=StopLevel,int,30,Stop Loss trailing level (in points)      |
//| Parameter=ProfitLevel,int,50,Take Profit trailing level (in points)  |
//+----------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CTrailingNoneFixedStop.                                        |
//| Purpose: Class of trailing stops with fixed stop level in pips.  |
//|              Derives from class CExpertTrailing.                 |
//+------------------------------------------------------------------+
class CTrailingNoneFixedStop : public CExpertTrailing
  {
protected:
   //--- input parameters
   int               m_stop_level;
    int               m_profit_level;

public:
                     CTrailingNoneFixedStop(void);
                    ~CTrailingNoneFixedStop(void);
   //--- methods of initialization of protected data
   void              StopLevel(int stop_level)     { m_stop_level=stop_level;     }
   void              ProfitLevel(int profit_level) { m_profit_level=profit_level; }
   virtual bool      ValidationSettings(void);
   //---
   virtual bool      CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp);
   virtual bool      CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp);
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
void CTrailingNoneFixedStop::CTrailingNoneFixedStop(void) : m_stop_level(30),
                                                    m_profit_level(50)
  {
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CTrailingNoneFixedStop::~CTrailingNoneFixedStop(void)
  {
  }
//+------------------------------------------------------------------+
//| Validation settings protected data.                              |
//+------------------------------------------------------------------+
bool CTrailingNoneFixedStop::ValidationSettings(void)
  {
   if(!CExpertTrailing::ValidationSettings())
      return(false);
//--- initial data checks
   if(m_profit_level!=0 && m_profit_level*(m_adjusted_point/m_symbol.Point())<m_symbol.StopsLevel())
     {
      printf(__FUNCTION__+": Profit Level must be 0 or greater than %d",m_symbol.StopsLevel());
      return(false);
     }

   if(m_stop_level!=0 && m_stop_level*(m_adjusted_point/m_symbol.Point())<m_symbol.StopsLevel())
     {
      printf(__FUNCTION__+": Stop Level must be 0 or greater than %d",m_symbol.StopsLevel());
      return(false);
     }
//--- ok
   return(true);
  }
//+------------------------------------------------------------------+
//| Checking trailing stop and/or profit for long position.          |
//+------------------------------------------------------------------+
bool CTrailingNoneFixedStop::CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp)
  {
//--- check
   if(position==NULL)
      return(false);
   if(m_stop_level==0)
      return(false);
//---
   double delta;
//---
   sl=EMPTY_VALUE;
   tp=EMPTY_VALUE;
  
   delta=m_stop_level*m_adjusted_point;
   sl = position.PriceOpen()-delta;

   if(m_profit_level!=0)tp = position.PriceOpen()+m_profit_level*m_adjusted_point;

//---
   return(sl!=EMPTY_VALUE);
  }
//+------------------------------------------------------------------+
//| Checking trailing stop and/or profit for short position.         |
//+------------------------------------------------------------------+
bool CTrailingNoneFixedStop::CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp)
  {
//--- check
   if(position==NULL)
      return(false);
   if(m_stop_level==0)
      return(false);
//---
   double delta;
   delta=m_stop_level*m_adjusted_point;
   sl = position.PriceOpen()+delta;

   if(m_profit_level!=0)tp = position.PriceOpen()-m_profit_level*m_adjusted_point;
    
//---
   return(sl!=EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

Помогите, пожалуйста, разобраться.  Стоп не должен никуда улетать.


Обнаружил, что в настройках сигнала был еще один стоп. Т.е. получается, что в Эксперте стоп сигнал задаётся не только в трейлинге, но и в сигнале тоже. Пока не очень понял где именно можно изменить поведение стопа из сигнала

Причина обращения: