¿Puedo pedirle amablemente traer un ejemplo de cómo podría utilizar esta clase en la escritura de un asesor experto, mi decir es que el uso de esta clase en la plantilla de EA no EA generar ..
El log muestra que el nivel de umbral de beneficio debe ser mayor que el nivel de fijación de órdenes.
En el constructor inicializo variables que no están vacías y no son iguales a cero. ¿Por qué obtengo un error?
//+------------------------------------------------------------------+//|TrailingFixedPips.mqh |//| Copyright 2009-2013, MetaQuotes Software Corp. | |//| http://www.mql5.com//+------------------------------------------------------------------+#include <Expert\ExpertTrailing.mqh>
// descripción del asistente inicio//+----------------------------------------------------------------------+//| Descripción de la clase|//| Title=Trailing con Stop Loss flotante (Fox104) | | |//| Type=Trailing|//| Nombre=FixedPips|//| Clase=CTrailingFixedPips|//| Página=|//| Parameter=StopLevel,int,30,Stop Loss trailing level (in points) | |//| Parámetro=ProfitLevel,int,50,Take Profit trailing level (en puntos) | |//+----------------------------------------------------------------------+// descripción del asistente fin//+------------------------------------------------------------------+//| Clase CTrailingFixedPips.|//| Finalidad: Clase de trailing stops con nivel de stop fijo en pips. || Finalidad: Clase de trailing stops con nivel de stop fijo en pips. ||| Finalidad: Clase de trailing stops con nivel de stop fijo en pips.//| Deriva de la clase CExpertTrailing.|//+------------------------------------------------------------------+class CTrailingFixedPips : public CExpertTrailing
{
protected:
//--- parámetros de entradaint m_stop_level;
int m_profit_level;
public:
CTrailingFixedPips(void);
~CTrailingFixedPips(void);
//--- métodos de inicialización de datos protegidosvoid StopLevel(int stop_level) { m_stop_level=stop_level; }
void ProfitLevel(int profit_level) { m_profit_level=profit_level; }
virtualbool ValidationSettings(void);
//---virtualbool CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp);
virtualbool CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp);
};
//+------------------------------------------------------------------+//| Constructor|//+------------------------------------------------------------------+void CTrailingFixedPips::CTrailingFixedPips(void)
{
m_stop_level = 30;
m_profit_level = 50;
}
//+------------------------------------------------------------------+//| Destructor|//+------------------------------------------------------------------+
CTrailingFixedPips::~CTrailingFixedPips(void)
{
}
//+------------------------------------------------------------------+//|| Configuración de validación de datos protegidos. |||//+------------------------------------------------------------------+bool CTrailingFixedPips::ValidationSettings(void)
{
if(!CExpertTrailing::ValidationSettings())
return(false);
//--- comprobaciones de datos inicialesif((m_profit_level-m_stop_level)*m_adjusted_point<=m_symbol.StopsLevel()*m_symbol.Point() && m_profit_level!=0.0)
{
printf(__FUNCTION__+": el nivel de beneficio umbral debe ser superior al nivel de ajuste de la orden");
return(false);
}
//--- okreturn(true);
}
//+------------------------------------------------------------------+//| Comprobando el trailing stop y/o el beneficio de una posición larga.//+------------------------------------------------------------------+bool CTrailingFixedPips::CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp)
{
//--- comprobarif(position==NULL)
return(false);
if(m_stop_level==0)
return(false);
//--- comprobación de parámetros if(m_profit_level==0.0) return(false);
//--- ¿Ya está en el punto de equilibrio?double open=position.PriceOpen();
if(position.StopLoss()>=open) return(false);
//--- control de beneficios
sl=EMPTY_VALUE;
tp=EMPTY_VALUE;
if(m_symbol.Bid()-open>m_profit_level*m_adjusted_point)
sl=m_symbol.NormalizePrice(open+m_stop_level*m_adjusted_point);
//---return(sl!=EMPTY_VALUE);
}
//+------------------------------------------------------------------+//| Comprobación de trailing stop y/o beneficio para posición corta.//+------------------------------------------------------------------+bool CTrailingFixedPips::CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp)
{
//--- comprobarif(position==NULL)
return(false);
if(m_stop_level==0)
return(false);
//--- comprobación de parámetrosif(m_profit_level==0.0) return(false);
//--- ¿Ya está en el punto de equilibrio?double open=position.PriceOpen();
if(position.StopLoss()<=open) return(false);
//--- control de beneficios
sl=EMPTY_VALUE;
tp=EMPTY_VALUE;
if(open-m_symbol.Ask()>m_profit_level*m_adjusted_point)
sl=m_symbol.NormalizePrice(open-m_stop_level*m_adjusted_point);
//---return(sl!=EMPTY_VALUE);
}
//+------------------------------------------------------------------+
Al utilizar el módulo especificado en el artículo, se generan errores en el registro del Asesor Experto mientras se carga el Asesor Experto en el gráfico:
2017.09.06 00:28:29.873 1 (EURUSD,M5) OnInit: error al inicializar los indicadores
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetPriceSeries: el cambio de timeseries está prohibido
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetOtherSeries: cambio de timeseries está prohibido
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::InitIndicators: no se comprueban los parámetros de ajuste
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpert::InitIndicators: error al inicializar los indicadores del objeto de seguimiento
Tal vez está fuera de fecha, ¿dónde conseguir uno nuevo o qué arreglar en esto?
Hacer un cambio en el módulo trailing "sampleTrailing.mqh":
//+------------------------------------------------------------------+//| Compruebe los parámetros de configuración.|//| INPUT: no.|//| OUTPUT: true si la configuración es correcta, en caso contrario false. || OUTPUT: true si la configuración es correcta, en caso contrario false.//| REMARK: No.|//+------------------------------------------------------------------+bool CSampleTrailing::ValidationSettings()
{
if(!CExpertTrailing::ValidationSettings())
return(false);//--- en caso de que el método Init no haya sido llamadoif(m_symbol==NULL) return(false);
//--- comprobación de parámetrosif((m_profit-m_stop_level)*m_adjusted_point<=m_symbol.StopsLevel()*m_symbol.Point() && m_profit!=0.0)
{
printf(__FUNCTION__+": el nivel de beneficio umbral debe ser superior al nivel de ajuste de la orden");
return(false);
}
//--- okreturn(true);
}
Cuando se utiliza el módulo especificado en el artículo, se generan errores en el registro del Asesor Experto mientras se carga el Asesor Experto en un gráfico:
Tal vez es obsoleto, ¿dónde conseguir uno nuevo o qué arreglar en esto?
Gracias por el mensaje, el artículo ha sido corregido
Al abrir una posición corta y poner el stop loss habitual (no trailing) a 0 en los parámetros, el trailing stop no se pone a breakeven, pero si mueves ligeramente el stop habitual y lo pones a -1 pip como mínimo, todo funciona. En longing todo funciona normalmente. En comprobar la condición de que ya hay un breakeven (el stop es menor que el precio), inicialmente 0 en el valor del stop y no lo deja ir más allá.
Así es. Es el Stop Loss especificado el desencadenante para que ESTE módulo de arrastre funcione en el punto de equilibrio. Es decir, se asume que la posición DEBE tener un Stop Loss inicialmente.
Añadido:
el propósito de cualquier artículo es mostrar y familiarizar con enfoques para resolver algún problema. Luego, el propio usuario debe desarrollar su propio código basándose en los conocimientos adquiridos.
Se debe complementar de manera que si no hay stop, el trailing es también - llenar la variable con al menos el valor de apertura.
(Recibí una notificación push para 2 de sus mensajes, pero uno de ellos no está - borrado)?
Si necesita cambiar algo - este no es el problema de este artículo. Aquí puede hacerlo usted mismo, basándose en los conocimientos adquiridos. Es decir, si usted quiere componer una asignación técnica y pensar que el artículo será reescrito en virtud de ella - no es así.
Como veo sus acciones: reescribir el módulo (un pequeño cambio) y el uso.
Añadido: Por última vez, por favor, utilice el botón "Responder". De lo contrario no voy a responder.
Así que sí, yo estaba editando mi mensaje y haga clic en "eliminar" por error - que es, de hecho, escribí dos mensajes y eliminado uno. Por lo tanto, el empuje llegó correctamente.
Gracias por su gran y útil artículo,
¿Puedo pedirle amablemente traer un ejemplo de cómo podría utilizar esta clase en la escritura de un asesor experto, mi decir es que el uso de esta clase en la plantilla de EA no EA generar ..
Gracias de nuevo,.
Buenas tardes. El módulo no funciona.
El log muestra que el nivel de umbral de beneficio debe ser mayor que el nivel de fijación de órdenes.
En el constructor inicializo variables que no están vacías y no son iguales a cero. ¿Por qué obtengo un error?
Buenas tardes. El módulo no funciona.
El log muestra que el nivel de umbral de beneficio debe ser mayor que el nivel de fijación de órdenes.
En el constructor inicializo variables que no están vacías y no son iguales a cero. ¿Por qué obtengo un error?
Al utilizar el módulo especificado en el artículo, se generan errores en el registro del Asesor Experto mientras se carga el Asesor Experto en el gráfico:
2017.09.06 00:28:29.873 1 (EURUSD,M5) OnInit: error al inicializar los indicadores
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetPriceSeries: el cambio de timeseries está prohibido
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetOtherSeries: cambio de timeseries está prohibido
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::InitIndicators: no se comprueban los parámetros de ajuste
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpert::InitIndicators: error al inicializar los indicadores del objeto de seguimiento
2017.09.06 00:31:20.256 1 (EURUSD,M5) OnInit: error inicializando indicadores
Hacer un cambio en el módulo trailing "sampleTrailing.mqh":
Cuando se utiliza el módulo especificado en el artículo, se generan errores en el registro del Asesor Experto mientras se carga el Asesor Experto en un gráfico:
Gracias por el mensaje, el artículo ha sido corregido
Al abrir una posición corta y poner el stop loss habitual (no trailing) a 0 en los parámetros, el trailing stop no se pone a breakeven, pero si mueves ligeramente el stop habitual y lo pones a -1 pip como mínimo, todo funciona. En longing todo funciona normalmente. En comprobar la condición de que ya hay un breakeven (el stop es menor que el precio), inicialmente 0 en el valor del stop y no lo deja ir más allá.
Así es. Es el Stop Loss especificado el desencadenante para que ESTE módulo de arrastre funcione en el punto de equilibrio. Es decir, se asume que la posición DEBE tener un Stop Loss inicialmente.
Añadido:
el propósito de cualquier artículo es mostrar y familiarizar con enfoques para resolver algún problema. Luego, el propio usuario debe desarrollar su propio código basándose en los conocimientos adquiridos.
Se debe complementar de manera que si no hay stop, el trailing es también - llenar la variable con al menos el valor de apertura.
(Recibí una notificación push para 2 de sus mensajes, pero uno de ellos no está - borrado)?
Si necesita cambiar algo - este no es el problema de este artículo. Aquí puede hacerlo usted mismo, basándose en los conocimientos adquiridos. Es decir, si usted quiere componer una asignación técnica y pensar que el artículo será reescrito en virtud de ella - no es así.
Como veo sus acciones: reescribir el módulo (un pequeño cambio) y el uso.
Añadido: Por última vez, por favor, utilice el botón "Responder". De lo contrario no voy a responder.
Vale, lo escribiré yo. ¿Has borrado uno de tus mensajes (dime si es así, para que no tenga que buscarlo)?
Puedes abrir un nuevo tema, algo así como"Módulo de mantenimiento de posiciones abiertas a breakeven" - creo que un tema así será útil.
Así que sí, yo estaba editando mi mensaje y haga clic en "eliminar" por error - que es, de hecho, escribí dos mensajes y eliminado uno. Por lo tanto, el empuje llegó correctamente.