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

 
Vladimir Karputov:

L'optimisation est effectuée par des AGENTS (dans votre cas, des AGENTS LOCAUX).

Pour afficher les journaux de l'agent local : cliquez avec le bouton droit de la souris sur l'onglet Journal et allez dans le dossier de l'agent.

C'est ça le truc, il n'y a pas d'erreurs. Tout est vérifié. Il y a peut-être un pare-feu ou autre.

Dossiers :
 
Aleksandr Dziuba:

C'est ça le truc, il n'y a pas d'erreurs. Tout compte. Il y a peut-être des pare-feu ou autre ?

Effectuez un seul test, un seul passage. Pas d'optimisation, juste un seul passage. Vous serez en mesure de voir le journal de cette façon.

 
Vladimir Karputov:

Effectuez un seul test - un seul passage. Pas d'optimisation, mais une seule passe. De cette façon, vous pouvez voir le journal à coup sûr.

Qu'est-ce que tu veux dire, visuel ? Eh bien, j'ai le journal. Je n'y vois rien de mal. Les paramètres sont tous passés. Même si ça a marché, le rendement est toujours de 20 000.

Dossiers :
20200924.log  17 kb
 
Aleksandr Dziuba:

Qu'est-ce que tu veux dire, visuel ? Eh bien, j'ai le journal. Je ne vois rien de mal à cela. Les paramètres sont tous passés. Même si elle a été exécutée, la balance de sortie était de 20000 et l'est toujours.

Modifiez donc le code de manière à ce qu'il affiche desmessages d' erreur en cas d'erreur ou si l'opération commerciale ne peut être effectuée. Ou en général, le code est erroné et ne donne pas de signaux. Les miracles ne se produisent pas.

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Импортируемая функция не может иметь такого параметра (нельзя передавать указатель, класс или структуру, содержащую динамический массив, указатель, класс и т.д.) Недопустимый возвращаемый тип. Например, такая ошибка будет выдана для функций, импортированных из...
 
Vladimir Karputov:

Modifiez donc le code de façon à ce qu'il donne desmessages d' erreur lorsque des erreurs se produisent ou si la transaction ne peut être exécutée. Ou si le code est défectueux et ne donne aucun signal. Il n'y a pas de miracles.

Ouais.

L'optimisation n'est donc pas incluse à Ontick. OnInit est en cours de traitement. Mais On-Tick n'est pas généré. Voici le problème.

J'ai intégré des points d'impression ( ) dans les entrées et les sorties, mais seul Init est écrit dans le journal.

P.S.

Je gère les erreurs. La force de l'habitude. J'écris des programmes depuis 1987.

 
Aleksandr Dziuba:

Ouais.

En général, l'optimisation n'est pas incluse dans Ontick. OnInit est traité. Mais On Tick n'est pas généré. Le problème.

J'ai intégré des points d'impression ( ) dans les entrées et les sorties, mais seul Init est écrit dans le journal.

P.S.

Je gère les erreurs. La force de l'habitude. J'écris des programmes depuis 1987.

Seuls les télépathes pourront aider sans le code - et maintenant tous les télépathes sont en vacances, c'est dommage.

 
Vladimir Karputov:

Sans le code, seuls les télépathes peuvent aider - et maintenant, comme par hasard, tous les télépathes sont en vacances.

J'ai trouvé la raison. Pour une raison quelconque, les indicateurs ne sont pas recalculés dans Ontick (il ne donne pas le nombre de barres recalculées). Peut-être que je dois mettre à jour les citations.

J'ai néanmoins perdu mes remerciements. Je suis devenu plus intelligent. J'ai appris où les journaux sont écrits.

 

J'ai converti un indicateur simple de MQL4 -> MQL5, mais aucun signal sur les dernières barres. Veuillez m'aider à trouver la raison. Le code source et le résultat sont en pièce jointe. Je vais également coller ici la version convertie.

#property indicator_chart_window
#property indicator_plots   4
#property indicator_buffers 4
#property indicator_color1 PaleVioletRed
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Red
#property indicator_color4 LimeGreen

input int  dist2           = 21;       // Distance#2
input int  dist1           = 14;       // Distance#1

double b1[];
double b2[];
double b3[];
double b4[];

int    handle_atr;
int    min_rates_total;
double atr[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {

   SetIndexBuffer(0,b1,INDICATOR_DATA);
   SetIndexBuffer(1,b2,INDICATOR_DATA);
   SetIndexBuffer(2,b3,INDICATOR_DATA);
   SetIndexBuffer(3,b4,INDICATOR_DATA);
   
   ArraySetAsSeries(b1,true);
   ArraySetAsSeries(b2,true);
   ArraySetAsSeries(b3,true);
   ArraySetAsSeries(b4,true);

   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_ARROW);
   PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_ARROW);

      PlotIndexSetInteger(2,PLOT_ARROW,159);
      PlotIndexSetInteger(3,PLOT_ARROW,159);
   
   ResetLastError();
   handle_atr = iATR(NULL,PERIOD_CURRENT,50);
   if(handle_atr==INVALID_HANDLE) {
      Print("   ***   ATR handle was unable to create. Error ",GetLastError());
      return INIT_FAILED;
   }

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   
   PlotIndexSetString(0,PLOT_LABEL,"SuperSignals Upper");
   PlotIndexSetString(1,PLOT_LABEL,"SuperSignals Lower");
   PlotIndexSetString(2,PLOT_LABEL,"SuperSignals Sell");
   PlotIndexSetString(3,PLOT_LABEL,"SuperSignals Buy");

        return INIT_SUCCEEDED;
   
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &High[],
                const double &Low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
                
   int counted_bars=prev_calculated;
   int i,limit;
   
   ArraySetAsSeries(Low,true);
   ArraySetAsSeries(High,true);

   if(counted_bars<0) return 0;
   if(counted_bars>0) counted_bars--;
           limit=rates_total-counted_bars;
           limit=MathMax(limit,dist1);
           limit=MathMax(limit,dist2);

   for (i = limit-1; i >= 0; i--) {
         int hhb1 = ArrayMaximum(High,i-dist1/2,dist1);
         int llb1 = ArrayMinimum(Low, i-dist1/2,dist1);
         int hhb  = ArrayMaximum(High,MathMax(0,i-dist2/2),dist2);
         int llb  = ArrayMinimum(Low, MathMax(0,i-dist2/2),dist2);

            b1[i] = EMPTY_VALUE;
            b2[i] = EMPTY_VALUE;
            b3[i] = EMPTY_VALUE;
            b4[i] = EMPTY_VALUE;
         
         ArraySetAsSeries(atr,true);
         int copied=CopyBuffer(handle_atr,0,0,limit,atr);
         if (copied<=0) Print("   ***   ATR failed to copy.");
         double tr = atr[i];

                      b1[i] = High[hhb];
                      b2[i] = Low[llb];
         if (i==hhb1) b3[i] = High[hhb1]+tr/2;
         if (i==llb1) b4[i] = Low[llb1] -tr/2;
    }
   
   return rates_total;
}
//+------------------------------------------------------------------+

Le résultat.


 
Grigori.S.B:

J'ai converti un indicateur simple de MQL4 -> MQL5, mais aucun signal sur les dernières barres. Veuillez m'aider à trouver la raison. Le code source et le résultat sont en pièce jointe. Je vais également coller ici la version convertie.

Le résultat.


Le coupable peut être quelque chose qui ne se fait pas logiquement entre les plateformes

Veuillez prêter attention aux différents paramètres d'entrée

MT4

ArrayMaximum
Ищет в одномерном числовом массиве максимальный элемент.

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           count=WHOLE_ARRAY,   // количество проверяемых
   int           start=0              // с какого индекса начинаем поиск
   );

MT5

ArrayMaximum
Ищет максимальный элемент в первом измерении многомерного числового массива.

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );
 
Vitaly Muzichenko:

Le coupable pourrait être quelque chose qui n'est pas fait logiquement entre les plateformes.

Notez les différents paramètres d'entrée

MT4

MT5

Merci Vitaliy.

L'ordre des variables à cet endroit est correct. Je les ai intervertis pendant la conversion. Les fonctions iHighest / iLowest étaient également présentes dans MQL4.

C'est autre chose. Je me suis déjà creusé les méninges.