Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 225

 

¡Buenas noches!

Llevo mucho tiempo utilizando el sistema con comentarios para distinguir si he modificado una posición antes o no...

¿Cómo puedo distinguir correctamente, por ejemplo, el hecho de que después de colocar una orden de compra, cambié el SL y el TP en la posición? ¿Existen campos o funciones específicas del puesto?

 
websafe25:

¡Buenas noches!

Llevo mucho tiempo utilizando el sistema con comentarios para distinguir si he modificado una posición antes o no...

¿Cómo puedo distinguir correctamente, por ejemplo, el hecho de que después de colocar una orden de compra, cambié el SL y el TP en la posición? ¿Existen campos o funciones específicas del puesto?

Es poco probable.

En mi opinión, no debemos confiar en el estado actual de la posición o de las órdenes. Es mucho más fiable cuando después del reinicio el sistema forma el estado que debe ser en la situación actual del mercado. Y después ajustará la posición y la colocación de la orden.

 
pronych:

Esto es poco probable.

En mi opinión, no debemos confiar en el estado actual de una posición o de las órdenes. Es mucho más fiable cuando el sistema forma el estado que debería tener en la situación actual del mercado tras el reinicio. Y entonces ajustará la posición y el gráfico de la orden.

Gracias por su respuesta.

A continuación describiré mi propia situación.

Cuando la posición alcanza, digamos, un beneficio de 10 pips, quiero transferirla a una sin pérdidas, es decir, muevo mis stops al precio de apertura + 3 pips, por ejemplo.

La siguiente situación está ocurriendo ahora mismo.

if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_SELL,Lot,PositionInfo.PriceOpen(),NormalizeDouble(PositionInfo.PriceOpen()-ModifyPips*_Point,_Digits)) <= PositionInfo.Profit())
        {
        if(Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()-ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()-TP*_Point,_Digits)))
          {

Si el beneficio de una operación es mayor o igual a 10 pips, cambio los stops.El beneficio aumenta, y la modificación se produce una y otra vez, constantemente. Tengo que mover una operación a sin pérdida una vez, y luego saltarla por .....

¿Cómo puedo deshacerme de él? ¿O sería mejor escribir no <= sino =? ¿Es posible que mientras el EA llegue a esta operación y comience a comparar el beneficio de una operación, no sea igual a 10 pips, y el beneficio sea mayor, entonces no se cerrará sin pérdidas?

P.S.> Creo que al tomar una posición solo hay que mirar a que nivel del precio esta el SL, si esta por encima del precio entonces ya esta modificado...

Lo decidí así:

if(PositionInfo.Select(_Symbol))
{
   if(PositionInfo.PositionType()==POSITION_TYPE_BUY)
     {
     if(PositionInfo.StopLoss() > PositionInfo.PriceOpen())
       {
         if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_BUY,Lot,PositionInfo.PriceOpen(),NormalizeDouble(SymbolInfo.Ask()+ModifyPips*_Point,_Digits)) >= PositionInfo.Profit())
          {
             Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()+ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()+TP*_Point,_Digits));
          }
       }
     }
   if(PositionInfo.PositionType()==POSITION_TYPE_SELL)
     {
     if(PositionInfo.StopLoss() < PositionInfo.PriceOpen())
       {
      if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_SELL,Lot,PositionInfo.PriceOpen(),NormalizeDouble(PositionInfo.PriceOpen()-ModifyPips*_Point,_Digits)) <= PositionInfo.Profit())
        {
        Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()-ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()-TP*_Point,_Digits));
        }
       }
     }
}
 
websafe25:

P.S> Creo que al tomar una posición solo hay que mirar a que nivel del precio se encuentra el SL, si esta por encima del precio entonces ya esta modificado...

Lo decidí así:

Lo que has escrito después de P.S. es bastante obvio. (si lo necesitas con mucha precisión, hasta encontrar el nivel de barras altas/bajas desde la última medición)) pero esto es poco probable))

Sólo que sería deseable desprenderse del concepto de "beneficio" y recurrir al concepto de "punto".

Y sería más bonito considerar no el precio del último trato( y generalmente olvidarse de este tipo de precio), sino pedir/ofrecer en la variante ventajosa;))

 

¡Buenas noches!

Desgraciadamente, no he podido encontrar ninguna instrucción específica sobre cómo utilizar un módulo de señales, por ejemplo RSI. Es decir, hay un registro de cómo se inicializa, los parámetros se establecen, pero la forma de comprobar simplemente la condición de comprar de mi EA - no. ¿Y ahora qué? ¿Cómo puedo comprobar si existe una condición de compra/venta?

/--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(100);
   signal.ThresholdClose(100);
   signal.PriceLevel(0.0);
   signal.StopLevel(SL);
   signal.TakeLevel(TP);
//--- Creating filter CSignalRSI
   CSignalRSI *filter0=new CSignalRSI;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodRSI(PeriodRSI);
   filter0.Applied(PRICE_CLOSE);
   filter0.Weight(0.8);
 
websafe25:

¡Buenas noches!

Desgraciadamente, no he podido encontrar ninguna instrucción específica sobre cómo utilizar un módulo de señales, por ejemplo RSI. Es decir, hay un registro de cómo se inicializa, los parámetros se establecen, pero la forma de comprobar simplemente la condición de comprar de mi EA - no. ¿Y ahora qué? ¿Cómo puedo comprobar si existe una condición de compra/venta?

El Módulo de Señales se conecta a su Asesor Experto en la etapa de diseño. Cada módulo de señales organiza la votación...

En general, este artículo es de obligada lectura:

¡Crea un robot de trading en 6 pasos!

Y finalmente

Generador de señales de trading con indicadores personalizados

 

Por cierto, ¿soy el único que piensa que es incorrecto tomar la media aritmética de las señales en el módulo de votación?

double CExpertSignal::Direction(void)
  {
   long   mask;
   double direction;
   double result=m_weight*(LongCondition()-ShortCondition());
   int    number=(result==0.0)? 0 : 1;      // number of "voted"
//---
   int    total=m_filters.Total();
//--- loop by filters
   for(int i=0;i<total;i++)
     {
      //--- mask for bit maps
      mask=((long)1)<<i;
      //--- check of the flag of ignoring the signal of filter
      if((m_ignore&mask)!=0)
         continue;
      CExpertSignal *filter=m_filters.At(i);
      //--- check pointer
      if(filter==NULL)
         continue;
      direction=filter.Direction();
      //--- the "prohibition" signal
      if(direction==EMPTY_VALUE)
         return(EMPTY_VALUE);
      //--- check of flag of inverting the signal of filter
      if((m_invert&mask)!=0)
         result-=direction;
      else
         result+=direction;
// Вот тут бы       number+=filter.Weight();

      number++;
      }
//--- normalization
   if(number!=0)
      result/=number; // Вот туточки???
//--- return the result
   return(result);
  }
 
YAndrey:

Por cierto, ¿soy el único que piensa que es incorrecto tomar la media aritmética de las señales en el módulo de votación?

Todo es lógico.

Lea más el artículoMQL5 Wizard: La nueva versión y aquí tiene un trozo de imagen del artículo:

normalización

 
barabashkakvn:

Todo tiene sentido.

Lea más el artículoMQL5 Wizard: La nueva versión y aquí tiene un trozo de dibujo del artículo:

¿Es realmente lógico? Si los pesos son 1, entonces sí, es lógico.

Imaginemos que tengo 2 señales-filtro. Uno es bueno, gordo, en el que confío y le pongo peso 1. El otro es pequeño, auxiliar por diversión, por lo que su peso = 0,1.

La señal gruesa da una señal de compra igual a 100, y la pequeña da una señal de compra igual a 10. ¿Cuál será la señal total? 50.5??? ¿No es extraño que el pequeño subestime la situación?

 
YAndrey:

¿Tiene sentido? Si los pesos son 1 cada uno, entonces sí, tiene sentido.

Imaginemos que tengo 2 filtros de señal. Uno es bueno, grueso, en el que confío y le pongo peso 1. Otro es pequeño, auxiliar por diversión, por lo que su peso = 0,1.

La señal gruesa da una señal de compra igual a 100, y la pequeña da una señal de compra igual a 10. ¿Cuál será la señal total? 50.5??? ¿No es extraño que el pequeño subestime tanto la situación?

1. El número total de votos. Su principal característica es la dirección. La segunda característica es el valor final.
2. Si su estrategia desencadena dos señales: una con fuerza igual a 100*1, y la segunda con fuerza igual a 10*0,1, entonces debe revisar su estrategia en términos de selección de señales.