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

 
Лауреат:

No he podido encontrarlo en YouTube. La documentación es sólo para los más listos.

¿Lo nuestro es Youtube? ¿Sabes también dónde está el norte-sur en YouTube?

 

Cuando se inicia el EA, se añaden dos medias móviles al gráfico ( función ChartIndicatorAdd). Ambas medias móviles están dibujadas en rojo. ¿Cómo puedo colorearlas de forma programada?

 
Kvin_:

Cuando se inicia el EA, se añaden dos medias móviles al gráfico ( función ChartIndicatorAdd). Ambas medias móviles están dibujadas en rojo. ¿Cómo pintarlas programáticamente en otros colores?

La ayuda es muy clara:

Cuando se crea una manija para el indicador con el que se trabaja, se puede especificar un parámetro en la línea:

indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
 
Artyom Trishkin:

¿Es YouTube nuestro todo? ¿También sabes dónde está el norte-sur por los vídeos de YouTube?

Por supuesto que eres inteligente.

 
Kvin_:

Cuando se inicia el EA, se añaden dos medias móviles al gráfico ( función ChartIndicatorAdd). Ambas medias móviles están dibujadas en rojo. ¿Cómo pintarlas programáticamente en otros colores?

Utilice el indicador personalizado que tiene una configuración especial: el color.

Ejemplo en el código decolor de entrada de la media móvil personalizada:

Utilizando elcruce de dos iMAs como ejemplo, la llamada de los tres indicadores es ahora visualmente distinta en el probador de estrategia visual:

Cruce de dos iMAs

 
Vladimir Karputov:

Utiliza un indicador personalizado que tiene una configuración especial: el color.

Ejemplo en el código decolor de entrada de la media móvil personalizada:

Utilizando elcruce de dos iMAs como ejemplo, la llamada de los tres indicadores es ahora visualmente distinta en el probador de estrategia visual:

Justo lo que necesito. Gracias.
 

No consigo acertar con el factor de multiplicación del lote.

Anteriormente en la base de código EA multiplicaba el lote anterior por 2.

if(last_position_type==POSITION_TYPE_BUY && m_symbol.Bid()+count_positions*ExtStep<last_position_price_open)
         m_trade.Sell(last_position_volume*2,m_symbol.Name());

Lo he cambiado por

input double   KLot              = 1.5;     //Коэффициент умножения лота
//------------------------------------------
if(last_position_type==POSITION_TYPE_BUY && m_symbol.Bid()+count_positions*ExtStep<last_position_price_open)
         m_trade.Sell(last_position_volume*KLot,m_symbol.Name());


Me equivoco en el volumen del lote

 
ilyav:

No consigo acertar con el factor de multiplicación del lote.

Anteriormente en la base de código EA multiplicaba el lote anterior por 2.

Lo he cambiado por

Tengo el volumen del lote equivocado

Después de hacer la aritmética, debe ajustar el volumen del lote al paso de volumen del lote para ese símbolo.

Ejemplo: Cálculo del lote de lamoneda y comprobación de la compra

//+------------------------------------------------------------------+
//| Open Buy position                                                |
//+------------------------------------------------------------------+
void OpenBuy(double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

   double check_open_long_lot=0.0;
   if(Risk>0.0)
     {
      check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      Print("sl=",DoubleToString(sl,m_symbol.Digits()),
            ", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
            ", Balance: ",    DoubleToString(m_account.Balance(),2),
            ", Equity: ",     DoubleToString(m_account.Equity(),2),
            ", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
      if(check_open_long_lot==0.0)
        {
         Print(__FUNCTION__,", ERROR: method CheckOpenLong returned the value of \"0.0\"");
         return;
        }
     }
   else
      check_open_long_lot=InpLots;
   if(last_lots_sl>0.0)
      check_open_long_lot=last_lots_sl*InpMartingale;
   if(check_open_long_lot>InpMaxLots)
     {
      Print(__FUNCTION__,", ERROR: check_open_long_lot (",DoubleToString(check_open_long_lot,2),") > \"Max lots\" (",DoubleToString(check_open_long_lot,2),")");
      ExpertRemove();
      return;
     }
   check_open_long_lot=LotCheck(check_open_long_lot);
   if(check_open_long_lot==0)
     {
      Print(__FUNCTION__,", ERROR: LotCheck -> 0.0");
      return;
     }
//--- check volume before OrderSend to avoid "not enough money" error (CTrade)
   double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_long_lot,m_symbol.Ask(),ORDER_TYPE_BUY);
   if(check_volume_lot!=0.0)
     {
      if(check_volume_lot>=check_open_long_lot)
        {
         if(m_trade.Buy(check_open_long_lot,NULL,m_symbol.Ask(),sl,tp))
           {
            if(m_trade.ResultDeal()==0)
              {
               Print("#1 Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                     ", description of result: ",m_trade.ResultRetcodeDescription());
               PrintResult(m_trade,m_symbol);
              }
            else
              {
               Print("#2 Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
                     ", description of result: ",m_trade.ResultRetcodeDescription());
               PrintResult(m_trade,m_symbol);
              }
           }
         else
           {
            Print("#3 Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                  ", description of result: ",m_trade.ResultRetcodeDescription());
            PrintResult(m_trade,m_symbol);
           }
        }
      else
        {
         string text="";
         if(Risk>0.0)
            text="< method CheckOpenLong ("+DoubleToString(check_open_long_lot,2)+")";
         else
            text="< Lots ("+DoubleToString(InpLots,2)+")";
         Print(__FUNCTION__,", ERROR: method CheckVolume (",DoubleToString(check_volume_lot,2),") ",
               text);
         return;
        }
     }
   else
     {
      Print(__FUNCTION__,", ERROR: method CheckVolume returned the value of \"0.0\"");
      return;
     }
//---
  }
 

hola tal pregunta:

¿es posible cambiar dinámicamente el número de buffers/líneas de un indicador?

 
Andrii Djola:

hola tal pregunta:

¿Es posible cambiar dinámicamente el número de buffers/líneas de un indicador?

No se puede.

Razón de la queja: