MetaTrader 4 Build 529 beta publié avec un nouveau compilateur - page 18

 
mr_Johns:
Le manuel du MQL4 (qui se trouve dans l'éditeur) a-t-il également été mis à jour en conséquence ?


oui avec une demande de mise à jour. Le manuel de MQL4 est presque basé sur 5 et ne correspond pas aux réalités du compilateur pour le moment.
 
ALXIMIKS:

Corrigez-moi si je me trompe.

J'utilise une fonction de bibliothèque dans un indicateur, cette fonction déclare quelques variables statiques qui participent au calcul du tableau de l'indicateur.

Si je veux modifier les paramètres de l'indicateur afin de corriger le calcul de l'indicateur (en fonction des variables statiques),

passer le drapeau à la fonction de la bibliothèque qui est responsable de la réinitialisation (vous devez développer les paramètres d'entrée de chaque fonction qui a des variables statiques).

effectuer la mise à zéro des variables statiques dans le corps, et ne pas oublier d'enlever le drapeau avant de terminer le calcul.

Ce serait beaucoup plus facile si les variables statiques avaient un paramètre, défini lors de leur déclaration, responsable de la remise à zéro de ces variables lors de la réinitialisation.

Faites des variables globales au lieu des statiques locales (en dehors des fonctions), et initialisez-les lors du premier appel.
 
ALXIMIKS:

Il serait beaucoup plus simple si les variables statiques avaient un paramètre à définir lors de leur déclaration, responsable de la réinitialisation ou non de la valeur de ces variables lors de leur réinitialisation.

Ce serait encore plus facile si les développeurs créaient une fonction spéciale comme ResetStaticVars().

// D'ailleurs, ce n'est pas si facile à faire. Je ne le ferais pas. C'est une chose de simplement remettre à zéro l'ensemble du segment de données, et c'en est une autre d'attribuer correctement toutes les valeurs initiales des utilisateurs. Une douleur dans le cou, cependant.

En fait (en tant que paradigme), la sauvegarde des valeurs pendant la durée de vie du programme est plutôt pratique. Il y a juste une question de rétrocompatibilité ici, donc...

 

Je sais qu'il s'agit d'une partie russophone du forum, mais comme je ne sais pas parler russe (même si je sais le lire), j'espère que cela ne dérangera personne de poster ceci ici (puisque la partie anglaise semble complètement inactive en ce qui concerne ces questions et que je n'ai pas vu que quelqu'un a posté sur ce sujet).

Il y a un problème sérieux avec le nouveau metatrader qui concerne les paramètres de chaînes externes. Initialement, ils ont une valeur correcte, mais dès que le cadre temporel ou le symbole est modifié, le contenu d'un paramètre de chaîne est perdu. Voici un exemple simple qui montre exactement ce qui se passe. Ce problème se produit également lorsque de tels indicateurs sont utilisés par le biais de l'appel iCustom() et cela rend ces indicateurs inutilisables à partir de n'importe quel EA ou autre code.

#property indicator_chart_window

extern string TestString = "whatever value that we want initially set";

int OnInit() { return(0); }
int deinit() { return(0); }
int start()
{
   Comment(TestString);
   return(0);
}
 
ALXIMIKS:

Oui avec la demande de mise à jour. Le manuel pour MQL4
est presque basé sur 5 et ne correspond pas aux réalités du compilateur pour le moment.

peut-être qu'ils ont laissé quelque chose là qui est dans un futur proche ? je compte dessus.
 
mr_Johns:
Le manuel du MQL4 (qui se trouve dans l'éditeur) a-t-il également été mis à jour en conséquence ?

Oui, il a été mis à jour il y a longtemps et est activement complété au quotidien.
 

Je n'arrive pas à comprendre pourquoi nous avons besoin d'un tel design.

#property icon "\\Files\\button.ico"
 
VOLDEMAR:

Je n'arrive pas à comprendre pourquoi on a besoin d'un tel design.

Lorsque vous démarrez l'EA, il y aura une image dans l'onglet "Général".
 
pas de photo
 
mladen:

Je sais qu'il s'agit d'une partie russophone du forum, mais comme je ne sais pas parler russe (même si je peux le lire), j'espère que cela ne dérangera personne de poster ceci ici (puisque la partie anglaise semble complètement inactive en ce qui concerne ces questions et que je n'ai pas vu que quelqu'un a posté sur ce sujet).

Il y a un problème sérieux avec le nouveau metatrader qui concerne les paramètres de chaînes externes. Initialement, ils ont une valeur correcte, mais dès que le cadre temporel ou le symbole est modifié, le contenu d'un paramètre de chaîne est perdu. Voici un exemple simple qui montre exactement ce qui se passe. Ce problème se produit également lorsque de tels indicateurs sont utilisés par le biais de l'appel iCustom() et cela rend ces indicateurs inutilisables à partir de n'importe quel EA ou autre code.

Mladen, il est plus facile pour moi de vous répondre en russe, puisque vous savez lire couramment.

Voici ma solution à ce problème. Dans mon code init(), j'inclus la fonction ReInit() qui réinitialise ces variables globales, dont les valeurs doivent être restaurées lorsque l'horizon temporel ou le symbole change :

//-----------------------------------------------------------------------------
int init(){
   int Error;
   if( МинНаклонТренда<Zero ) МинНаклонТренда=0;
   if( МинНаклонТренда-МаксНаклонТренда>Zero ) МаксНаклонТренда=МинНаклонТренда;
   if( БарОкончания<1 ) БарОкончания=1;
   if( МинБазовыйПериод<1 ) МинБазовыйПериод=1;
   if( МаксБазовыйПериод<МинБазовыйПериод ) МаксБазовыйПериод=МинБазовыйПериод;
   if( БарНачала<МинБазовыйПериод+БарОкончания ) БарНачала=МинБазовыйПериод+БарОкончания;
   if( БарНачала>Bars-1 ){
      if( Bars>МинБазовыйПериод+БарОкончания ) БарНачала=Bars-1;
      else Alert("Неразрешимая ошибка: история("+Bars+")<=активация("+МинБазовыйПериод
                +")+окончание("+БарОкончания+")");
   }
   if( ТолщинаТрендовой<1 ) ТолщинаТрендовой=1;
   if( ТолщинаТрендовой>5 ) ТолщинаТрендовой=5;
   if( РазмерИндикатораТиков<1 ) РазмерИндикатораТиков=1;
   if( РазмерИндикатораТиков>5 ) РазмерИндикатораТиков=5;
   if( СдвигИндикатораТиков<3 ) СдвигИндикатораТиков=3;
   if( СдвигИндикатораТиков>100 ) СдвигИндикатораТиков=100;
   if( ПоказыватьВсе ) Visibility=0; else Visibility=EMPTY;
   LastBar     =БарОкончания;
   ЦветЛиний[0]=ЦветПоддержки;
   ЦветЛиний[1]=ЦветСопротивления;
   ЦветХорды[0]=ЦветВосходящейХорды;
   ЦветХорды[1]=ЦветНисходящейХорды;
   Цвет123[0]  =Цвет123 ВТ;
   Цвет123[1]  =Цвет123 НТ;
   NewTime     =0;
   ReInit();                                       // Повторная инициализация
   ClearScreen();                                  // Очистить экран
   Error=fVLine("StartLine","Старт",0,БарНачала,0,0,0,0,0,ЦветВертикалей);
   Error=fVLine("DeadLine","Пуск",0,БарОкончания,0,0,0,0,0,ЦветВертикалей);
   DeadLine=TimeCurrent();
   if( СтатическийРежим ){
      if( РежимОтладки ) РежимРаботы=" Отладка "; else РежимРаботы=" ";
      РежимРаботы=РежимРаботы+"Статический режим Пауза "+ПериодИмитацииТиков+" мс";
      МоделироватьДинамику=false;
      //РежимОтладки=false;
      while( true ){                               // Бесконечный цикл
         ReInit();                                 // Повторная инициализация
         start();                                  // Имитация тика
         Sleep(ПериодИмитацииТиков);               // Не работает в индикаторах
   }  }
   else {
      if( МоделироватьДинамику ){
         РежимРаботы=" Режим имитации динамики Размерность "+DoubleToStr(0.5*БарНачала*БарНачала,0);
         Print("      "+Version+РежимРаботы+" История: "+(БарНачала)+" баров с "+TimeToStr(Time[БарНачала]));
         LastBar=БарНачала;
         while( LastBar>БарОкончания ){            // Перебор всех баров истории
            LastBar--;
            start();                               // Имитация тика
         }
         МоделироватьДинамику=false;
         Print("      Режим имитации динамики отключен!");
   }  }
   if( РежимОтладки ) РежимРаботы=" Отладка "; else РежимРаботы=" ";
   РежимРаботы=РежимРаботы+"Динамический режим";
   Print("      "+Version+РежимРаботы+" История: "+(БарНачала)+" баров с "+TimeToStr(Time[БарНачала]));
   if( !ПечататьПредупреждения ) Print("Печать предупреждений запрещена!");
   if( РежимОтладки ) start();                     // Имитация тика
   return(0);
}
//-----------------------------------------------------------------------------
// Повторная инициализация глобальных переменных и массивов
void ReInit(){
   StartTime[0]   =Time[БарНачала];
   StartTime[1]   =Time[БарНачала];
   Groups[0]      =0;
   Groups[1]      =0;
   OldMG[0]       =0;
   OldMG[1]       =0;
   MainGroup[0]   =0;
   MainGroup[1]   =0;
   QualityMax[0]  =0;
   QualityMax[1]  =0;
   OldStopLine    =0;
   return;
}
//-----------------------------------------------------------------------------