Questions des débutants MQL5 MT5 MetaTrader 5 - page 873

 
Лауреат:

Je n'ai pas pu le trouver sur YouTube. La documentation est juste pour les malins.

Youtube, c'est notre truc ? Tu sais aussi où se trouve nord-sud sur YouTube ?

 

Lorsque l'EA est lancé, deux moyennes mobiles sont ajoutées au graphique ( fonction ChartIndicatorAdd). Les deux moyennes mobiles sont dessinées en rouge. Comment puis-je les colorer de manière programmatique ?

 
Kvin_:

Lorsque l'EA est lancé, deux moyennes mobiles sont ajoutées au graphique ( fonction ChartIndicatorAdd). Les deux moyennes mobiles sont dessinées en rouge. Comment les peindre de manière programmatique dans d'autres couleurs ?

L'aide est très claire :

Lorsque vous créez un handle pour l'indicateur avec lequel vous travaillez, vous pouvez spécifier un paramètre sur la ligne :

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

YouTube est-il notre tout ? Vous savez aussi où se trouve le nord et le sud à partir de vidéos YouTube ?

Bien sûr que tu es intelligent.

 
Kvin_:

Lorsque l'EA est lancé, deux moyennes mobiles sont ajoutées au graphique ( fonction ChartIndicatorAdd). Les deux moyennes mobiles sont dessinées en rouge. Comment les peindre de manière programmatique dans d'autres couleurs ?

Utiliser un indicateur personnalisé qui possède un paramètre spécial : la couleur.

Exemple dans le code decouleur d'entrée de la moyenne mobile personnalisée:

En utilisant lecroisement de deux iMAs comme exemple, l'appel des trois indicateurs est maintenant visuellement distinct dans le testeur visuel de stratégie :

Croisement de deux iMAs

 
Vladimir Karputov:

Utilisez un indicateur personnalisé qui possède un paramètre spécial : la couleur.

Exemple dans le code decouleur d'entrée de la moyenne mobile personnalisée:

En utilisant lecroisement de deux iMAs comme exemple, l'appel des trois indicateurs est maintenant visuellement distinct dans le testeur visuel de stratégie :

Juste ce dont j'ai besoin. Merci !
 

Je n'arrive pas à obtenir le bon facteur de multiplication du lot.

Auparavant, dans la base de code EA, le lot précédent était multiplié par 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());

Je l'ai changé en

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());


Je me trompe de volume

 
ilyav:

Je n'arrive pas à obtenir le bon facteur de multiplication du lot.

Auparavant, dans la base de code EA, le lot précédent était multiplié par 2.

Je l'ai changé en

Je reçois le mauvais volume de lot

Après avoir fait l'arithmétique, vous devez ajuster le volume du lot à l'étape du volume du lot pour ce symbole.

Exemple : calcul du lot depièces de monnaie et vérification de l'achat.

//+------------------------------------------------------------------+
//| 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;
     }
//---
  }
 

Bonjour une telle question :

est-il possible de changer dynamiquement le nombre de tampons/lignes dans un indicateur ?

 
Andrii Djola:

Bonjour une telle question :

Est-il possible de changer dynamiquement le nombre de tampons/lignes dans un indicateur ?

Tu ne peux pas.

Raison: