Asesores Expertos: Hedge any positions - página 2

[Eliminado]  

Buenas tardes amigo...

Sigo estudiando sobre programación MQL5 y sus códigos me han servido de inspiración y base de estudios, he aprendido mucho, pero a veces me pierdo un poco y no puedo entender exactamente que hacen ciertos códigos y porque están ahí...

Pude entender todo el código de "Hedge any positions", solo una parte del código que me esta costando entender que hace y porque esta ahí, ¿podrían ayudarme a entender de que se trata y porque fue agregado al código?

bool RefreshRates(const string symbol,
                  const ulong magic,
                  double freeze_level,
                  double stop_level)
{
   if(!m_symbol.Name(symbol))
   {
      return(false);
   }

   m_trade.SetExpertMagicNumber(magic);
   m_trade.SetDeviationInPoints(0);
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
   m_trade.SetMarginMode();

   if(!m_symbol.RefreshRates())
   {
      Print("RefreshRates error");
      return(false);
   }

   if(!m_symbol.Refresh())
   {
      Print("Refres error");
      return(false);
   }
   
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
   {
      return(false);
   }

   freeze_level=m_symbol.FreezeLevel()*m_symbol.Point();
   if(freeze_level==0.0)
   {
      freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   }
   freeze_level*=1.1;

   stop_level=m_symbol.StopsLevel()*m_symbol.Point();
   if(stop_level==0.0)
   {
      stop_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   }
   stop_level*=1.1;

   if(freeze_level<=0.0 || stop_level<=0.0)
   {
      return(false);
   }
   return(true);
}
 
rmca :

Buenas tardes amigo...

Sigo estudiando sobre programación MQL5 y sus códigos me han servido de inspiración y base de estudios, he aprendido mucho, pero a veces me pierdo un poco y no consigo entender exactamente que hacen ciertos códigos y porque están ahí....

Pude entender todo el código de "Hedge any positions", solo una parte del código que me esta costando entender que hace y porque esta ahí, ¿podrían ayudarme a entender de que se trata y porque fue agregado al código?

¿Qué es exactamente lo que no está claro?

[Eliminado]  
Vladimir Karputov:

¿Qué es exactamente lo que no está claro?

freeze_level=m_symbol.FreezeLevel()*m_symbol.Point();
   if(freeze_level==0.0)
   {
      freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   }
   freeze_level*=1.1;

   stop_level=m_symbol.StopsLevel()*m_symbol.Point();
   if(stop_level==0.0)
   {
      stop_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   }
   stop_level*=1.1;

   if(freeze_level<=0.0 || stop_level<=0.0)
   {
      return(false);
   }
   return(true);
}

No he entendido por qué se comprueban"freeze_level" y "stop_level", ¿por qué en caso de que devuelvan el valor "0" se produce el cálculo (Ask-Bid) * 3? Y cuando no devuelven el valor "0", ¿se produce la multiplicación por 1,1?

¿De qué tratan estos "nivel_congelado" y "nivel_parado"?

He mirado en la documentación y no he entendido muy bien su finalidad y por qué se hace esta comprobación y multiplicación en los casos de retorno "0" o no.

 
rmca :

No entendí por qué se comprueban "freeze_level" y "stop_level", ***

Por qué se comprueban: leer Las comprobaciones que debe pasar un robot de trading antes de publicarse en el Mercado


rmca:

***¿Por qué en caso de que devuelvan el valor "0" se produce el cálculo (Ask-Bid) * 3? ***

Protección elemental: "0" puede significar nivel flotante. En tales casos, se acostumbra a multiplicar por '3'.


Mis nuevos Asesores Expertos utilizan un enfoque modificado:

***
input group             "Additional features"
***
input uchar    InpFreezeCoefficient = 1;           // Coeficiente (si Freeze==0 o StopsLevels==0)
***
//+------------------------------------------------------------------+
//| Comprobar niveles de congelación y paradas|
//+------------------------------------------------------------------+
void FreezeStopsLevels(double &freeze,double &stops)
  {
//--- comprobar los niveles de Congelación y Paradas
   /*
 SYMBOL_TRADE_FREEZE_LEVEL muestra la distancia de congelación de las operaciones comerciales
 para órdenes pendientes y posiciones abiertas en puntos
 ------------------------|--------------------|--------------------------------------------
 Tipo de orden/posición | Precio de activación | Comprobación
 ------------------------|--------------------|--------------------------------------------
 Compra Orden limitada| Ask | Ask-OpenPrice>= SYMBOL_TRADE_FREEZE_LEVEL
 Orden Stop de compra | AskAsk | OpenPrice-Ask >= SYMBOL_TRADE_FREEZE_LEVEL
 Orden limitada de venta | Oferta| OpenPrice-Bid >= SYMBOL_TRADE_FREEZE_LEVEL
 Orden Stop de venta | Oferta| Bid-OpenPrice >= SYMBOL_TRADE_FREEZE_LEVEL
 Posición de compra| Oferta| TakeProfit-Bid >= SYMBOL_TRADE_FREEZE_LEVEL
 |Posición de compra | Bid-StopLoss >= SYMBOL_TRADE_FREEZE_LEVEL
 Posición de venta | Ask| Posición Ask-TakeProfit >= SYMBOL_TRADE_FREEZE_LEVEL
 || StopLoss-Ask >= SYMBOL_TRADE_FREEZE_LEVEL
 ------------------------------------------------------------------------------------------

 SYMBOL_TRADE_STOPS_LEVEL determina el número de puntos para la sangría mínima de los niveles
 StopLoss y TakeProfit desde el precio de cierre actual de la posición abierta
 ------------------------------------------------|------------------------------------------
 La compra se realiza al precio Ask | La venta se realiza al precio Bid
 ------------------------------------------------|------------------------------------------
 TakeProfit>= Oferta| TakeProfit <= Ask
 StopLoss<= Oferta| StopLoss >= Ask
 TakeProfit - Oferta >= SYMBOL_TRADE_STOPS_LEVEL | Ask - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
 Oferta - StopLoss >= SYMBOL_TRADE_STOPS_LEVEL | StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL
 ------------------------------------------------------------------------------------------
 */
   double coeff=(double)InpFreezeCoefficient;
   if(!RefreshRates() || !m_symbol.Refresh())
      return;
//--- FreezeLevel -> para orden pendiente y modificación
   double freeze_level=m_symbol.FreezeLevel()*m_symbol.Point();
   if(freeze_level==0.0)
      if(InpFreezeCoefficient>0)
         freeze_level=(m_symbol.Ask()-m_symbol.Bid())*coeff;
//--- StopsLevel -> para TakeProfit y StopLoss
   double stop_level=m_symbol.StopsLevel()*m_symbol.Point();
   if(stop_level==0.0)
      if(InpFreezeCoefficient>0)
         stop_level=(m_symbol.Ask()-m_symbol.Bid())*coeff;
//---
   freeze=freeze_level;
   stops=stop_level;
//---
   return;
  }
The checks a trading robot must pass before publication in the Market
The checks a trading robot must pass before publication in the Market
  • www.mql5.com
Before any product is published in the Market, it must undergo compulsory preliminary checks, as a small error in the expert or indicator logic can cause losses on the trading account. That is why we have developed a series of basic checks to ensure the required quality level of the Market products. If any errors are identified by the Market...
[Eliminado]  
Vladimir Karputov:

Por qué comprobar: lea Las comprobaciones que debe pasar un robot de trading antes de publicarse en el Mercado


Protección elemental: '0' puede significar nivel flotante. En estos casos, es habitual multiplicar por '3'.


Mis nuevos Asesores Expertos utilizan un enfoque modificado:

Gracias por la respuesta, leí toda la documentación que me enviaste e hice algunos cambios en el código:

bool RefreshRates(const string symb,
                  const ulong magi)
{
   if((!m_symbol.Name(symb))
   && (!m_symbol.RefreshRates() || !m_symbol.Refresh())
   && (m_symbol.Ask()==0 || m_symbol.Bid()==0))
   {
      return(false);
   }
   m_trade.SetExpertMagicNumber(magi);
   m_trade.SetDeviationInPoints(0);
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
   m_trade.SetMarginMode();
   return(true);
}

¿Cree usted que este es un buen enfoque para actualizar (y comprobar si hay actualizaciones) las cotizaciones y la configuración para un comercio?

 
rmca :

Gracias por la respuesta, he leído toda la documentación que me has enviado y he hecho algunos cambios en el código:

¿Crees que este es un buen enfoque para actualizar (y comprobar si hay actualizaciones) las cotizaciones y la configuración de una operación?

Estas son las líneas

   m_trade.SetDeviationInPoints(0);
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
   m_trade.SetMarginMode();

Una vez que usted necesita para registrarse en OnInit.



Usted ha establecido cero deslizamiento - estar preparado para el hecho de que usted recibirá un rechazo muy a menudo

 
Basta con dejar este EA activo en un gráfico para que vigile y "proteja" la posición de otro EA en otro gráfico, ¿es eso?
 
Una pregunta, ¿qué ocurre cuando el coeficiente del lote es inferior a 1, por ejemplo 0,5?
 
Eduardo Alvarado :
Una pregunta, ¿qué ocurre cuando el coeficiente del lote es inferior a 1, por ejemplo 0,5?

Se abrirá una posición con un volumen menor.

 
¿Es posible actualizar este EA, para filtrar órdenes y sólo aplicar cobertura por número mágico específico?