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

 
Vladimir Karputov:

Un indicateur pour cela doit avoir un paramètre de couleur d'entrée. C'est-à-dire qu'il doit s'agir d'un indicateur personnalisé.

MERCI ! mais si je n'ai pas accès au code source, ce n'est pas faisable ?

 
Tango_X:

MERCI ! Mais si je n'ai pas accès au code source, ce n'est pas implémentable ?

Oui, vous devez disposer d'une source ouverte ou d'une mise en œuvre prête à l'emploi.

 
Vladimir Karputov:

Oui, vous devez disposer d'un code source ouvert ou d'une mise en œuvre prête à l'emploi.

Lorsque je règle la couleur clrNONE dans le testeur, la couleur est toujours affichée ! Donc clrNONE ne fonctionne pas dans le testeur ? Je ne peux pas le vérifier en vrai - c'est le week-end...

Si je définis une couleur quelconque au lieu de clrNONE, cette couleur s'affiche, mais la valeur vide = ne fonctionne pas... étrange...
 
Aleksey Mavrin:

Réponse : également recharger la macro à plusieurs reprises)

Mais il est préférable d'utiliser l'opérateur + pour les chaînes de caractères et de tout convertir en chaînes de caractères. Ainsi, vous n'avez pas besoin d'une version de la fonction (et de la macro) avec de nombreux paramètres.

Merci. Je ne savais pas que la macro pouvait être rechargée.

 
pivomoe:

Merci. Je ne savais pas que la macro pouvait être rechargée.

faute de frappe - reload, et non reload)

 

trié les exemples à la fin de cette section d'aidehttps://www.mql5.com/ru/docs/constants/structures/mqltraderequest.

sur le serveur Metacquot, tout est OK

sur un autre serveur, après avoir analysé les codes d'erreur de la demande de transaction, j'ai découvert que le problème se situe dans le remplissage du champ MqlTradeResult :

request.type_filling = ORDER_FILLING_IOC;

une recherche dans le forum n'a pas permis de trouver une solution univoque - comment déterminer les paramètres du serveur pour le champ MqlTradeResult de manière programmatique?

ENUM_ORDER_TYPE_FILLING       type_filling;     // Тип ордера по исполнению 


UPD : trouvé une solution fonctionnellehttps://www.mql5.com/ru/forum/168912/page2#comment_4062864

@fxsaber merci !

 
Pourriez-vous me dire comment définir les niveaux Fibo pour la construction automatique ?
 
VVT:
Veuillez me dire comment définir les niveaux Fibo pour la construction automatique.

Exemple dans le codeRR deFibonaci-

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long chart_id=ChartID();
   datetime time1=ChartTimeOnDropped();
   double price1=ChartPriceOnDropped();
   if(ObjectFind(chart_id,InpFiboName)<0)
      FiboLevelsCreate(chart_id,InpFiboName,0,time1,price1,time1+InpAddSecond,price1-InpStopLoss*Point(),InpColor);
   else
     {
      ObjectDelete(chart_id,InpFiboName);
      ChartRedraw(chart_id);
      FiboLevelsCreate(chart_id,InpFiboName,0,time1,price1,time1+InpAddSecond,price1-InpStopLoss*Point(),InpLevelsColor);
     }
//---
   int               levels   = 6;                                                                    // number of level lines
   double            values[6]= {1.0,0.0,2.0,3.0,4.0,5.0};                                            // values of level lines
   color             colors[6];                                                                       // color of level lines
   for(int i=0; i<6; i++)
      colors[i]=InpLevelsColor;
   ENUM_LINE_STYLE   styles[6];                                                                       // style of level lines
   for(int i=0; i<6; i++)
      styles[i]=InpLevelsStyles;
   int               widths[6]= {2.0,2.0,2.0,2.0,2.0,2.0};                                            // width of level lines
   string            texts[6] = {"BREAK EVEN","STOP LOSS","TP1 1.1","TP2 2.1","TP3 3.1","TP4 4.1"};   // text of level lines
//---
   FiboLevelsSet(levels,values,colors,styles,widths,texts,chart_id,InpFiboName);
  }


peuvent être définis pour les niveaux : nombre de lignes, valeur de la ligne, couleur de la ligne, style de ligne, largeur de la ligne, texte de la ligne.

 
int OnInit()
  {
//---
   ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
  {
   if(id == CHARTEVENT_OBJECT_CREATE)
     {
      I++;
      string result[];      //  массив для получения строк
      StringSplit(sparam, ' ', result); //  получим из имени созданного объекта подстроки
      ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
      string newName = result[0]+" "+result[1]+" "+string(I); //  сформируем новое имя объекта
      ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект

      //----------------------------------------------------------------------------------------
      double   Level_0= ObjectGetDouble(
                                0,          // идентификатор графика
                                newName,              // имя объекта
                                OBJPROP_PRICE,           // идентификатор свойства
                                0     // модификатор свойства
                             );


      double   Level_1= ObjectGetDouble(
                                0,          // идентификатор графика
                                newName,              // имя объекта
                                OBJPROP_PRICE,           // идентификатор свойства
                                1     // модификатор свойства
                             );
      //------------------------------------------------------------------------------------------------------
      if(Level_0 > Level_1)
        {
         ObjectSetInteger(0,newName,OBJPROP_COLOR,clrDeepSkyBlue);
        }
      else
        {
         ObjectSetInteger(0,newName,OBJPROP_COLOR,clrYellow);
        }
     }/******************************************************************/
  }

Bonjour, pourriez-vous me dire pourquoi lors du débogage du code, en allant étape par étape, les lignes sont recolorées dans les deux couleurs selon les valeurs des coordonnées. Et en lançant l'EA sur le graphique, la condition if(Level_0 > Level_1) n'est jamais vraie ?
 
Kira27:

Pourriez-vous me dire pourquoi, lors du débogage, en passant le code pas à pas, les lignes sont repeintes dans les deux couleurs selon les valeurs des coordonnées. Et en lançant l'EA sur le graphique, la condition de la ligne if(Level_0 > Level_1) n'est jamais vraie ?

Il est très probable qu'après avoir renommé un objet, celui-ci ne soit pas encore disponible pour être consulté. Vous pouvez essayer de mettre ChartRedraw après le renommage. Si cela ne fonctionne pas, vous devez construire la séquence d'une autre manière.

ps ; Une autre option : d'abord repeindre avec le nom de sparam et ensuite le renommer.