Discusión sobre el artículo "Experto comercial universal: Trabajando con trailing-stops personalizados (parte 6)"

 

Artículo publicado Experto comercial universal: Trabajando con trailing-stops personalizados (parte 6):

La sexta parte del artículo sobre el experto comercial universal describe el funcionamiento de los trailing-stops. Después de leerlo, usted aprenderá cómo usar normas unificadas para crear su propio módulo de trailing-stop y conectarlo al motor comercial de tal forma que el control de la posición realizado por este suceda automáticamente.

Con frecuencia, la solución más efectiva es la más sencilla y comprobada. El trailing-stop no es una excepción. Si nos imaginamos el trailing stop como una clase especial que almacena parámetros para su trabajo, en particular, un algoritmo de desplazamiento de un trailing-stop concreto en forma de método, entonces todos los problemas anteriores con respecto a la ubicación de esta funcionalad desaparecerán. En realidad, si creamos el trailing-stop en forma de clase independiente, sus datos y métodos estarán entrelazados con los datos y métodos de la clase básica CStrategy y otros objetos de infraestructura del tipo CPosition.

Al desarrollar esta clase es necesario resolver dos cuestiones.

  1. La estructura interna de la clase del trailing-stop. La estandarización de su funcionamiento.
  2. La interacción de la clase proyectada con otros módulos del motor comercial CStrategy.

Autor: Vasiliy Sokolov

 
Ahora todo funciona - simplemente genial...todo a la vez.... muchas gracias...sabia que hasta que la nueva version sea estable...habria errores...)))))
 
Hola. ¡Gran trabajo, muchas gracias! Dime, ¿estás planeando implementar en el motor de los enfoques para el comercio en MOEX, descrito por usted en el artículo https://www.mql5.com/es/articles/1683? En concreto, estoy interesado en el análisis de la liquidez del mercado y en base a ella entrar con una desviación especificada (máximo deslizamiento).
Как обезопасить себя и своего эксперта при торговле на Московской бирже
Как обезопасить себя и своего эксперта при торговле на Московской бирже
  • 2015.06.18
  • Vasiliy Sokolov
  • www.mql5.com
В статье подробно описываются методы работы, призванные обеспечить безопасность совершения торговых операций на биржевых и малоликвидных рынках, на примере срочной секции Московской биржи. Статья является логическим продолжением статьи "Основы биржевого ценообразования на примере срочной секции Московской биржи", в которой даны теоретические основы биржевой торговли, но носит более практический характер.
 
igorbel:
Hola. ¡Gran trabajo, muchas gracias! Dime, ¿estás planeando implementar en el motor de los enfoques para el comercio en MOEX, descrito por usted en el artículo https://www.mql5.com/es/articles/1683? Concretamente estoy interesado en analizar la liquidez del mercado y en base a ella entrar con una desviación determinada (deslizamiento máximo).
La propuesta es interesante. Veamos.
 
//+------------------------------------------------------------------+
//| Cierra la posición actual del mercado fijando el cierre |
//| comentario igual a comentario|
//+------------------------------------------------------------------+
bool CPosition::CloseAtMarket(string comment="")
  {
   if(!IsActive())
      return false;
   m_trade.PositionModify(m_id, 0.0, 0.0);
   ENUM_ACCOUNT_MARGIN_MODE mode=(ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE);
   if(mode != ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
      return m_trade.PositionClose(m_symbol);
   return m_trade.PositionClose(m_id);
  }

¿Puede decirme por qué m_trade.PositionModify(m_id, 0.0, 0.0) en esta función? Tengo Invalid Stops errores en el registro debido a esta operación.

 
igorbel:

¿Puede decirme por qué m_trade.PositionModify(m_id, 0.0, 0.0) en esta función? Tengo errores de Invalid Stops en el log debido a esta operación.

Son rudimentos de la versión antigua. Gracias por señalarlo, será corregido.
 

No he cambiado nada, pero al compilar cualquiera de los módulos de arrastre, incluida la clase base, obtengo errores:

'CTrailing' - declaration without type  PositionMT5.mqh 48      4
'Trailing' - undeclared identifier      PositionMT5.mqh 73      20
'Trailing' - object pointer expected    PositionMT5.mqh 73      20
'Trailing' - object pointer expected    PositionMT5.mqh 74      14
 
bool CTrailingClassic::Modify(void)
  {

   if(CheckPointer(m_position)==POINTER_INVALID)
     {
      string text="Invalid position for current trailing-stop. Set position with 'SetPosition' method";
      CMessage *msg=new CMessage(MESSAGE_WARNING,__FUNCTION__,text);
      Log.AddMessage(msg);
      return false;
     }
   if(m_diff_extremum<=0.0)
     {
      string text="Set points trailing-stop with 'SetDiffExtremum' method";
      CMessage *msg=new CMessage(MESSAGE_WARNING,__FUNCTION__,text);
      Log.AddMessage(msg);
      return false;
     }
   double extremum=FindExtremum(m_position);
   if(extremum == 0.0)return false;
   double n_sl = 0.0;
   if(m_position.Direction()==POSITION_TYPE_BUY)
      n_sl=extremum-m_diff_extremum;
   else
      n_sl=extremum+m_diff_extremum;
   if(n_sl!=m_position.StopLossValue())
      return m_position.StopLossValue(n_sl);
   return false;
  }

No estaría de más comprobar que el nuevo sl está por debajo del precio actual para una posición larga y por encima del precio actual para una posición corta.

 

Hola. Gracias por el artículo.

¿Cómo puedo ajustar el tamaño del lote para cada operación? Veo que sólo compra un lote


Gracias de antemano

 

Estimado Sr. Sokolov,

Muy interesante artículo, pero por desgracia no pude instalar uno solo de sus códigos sin toneladas de errores compiller. He intentado todas las 9 partes, pero en vano.

De ahí mi pregunta: ¿Existe algún método específico para instalar su código?

Gracias

 
La brevedad es el alma del ingenio.
Aceptación, comprensión, interpretación correcta, apenas hay más. Por desgracia