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

 
Night63:

Chers collègues, un message d'avertissement s'affiche sur la compilation :

Utilisation possible d'une variable non initialisée 'PipStep'.

pour un morceau comme celui-ci :

Toutes les variables sont initialisées en tant que double, quel est le problème ?

vous avez déclaré des variables de type double, l'initialisation consiste à attribuer des valeurs aux variables déclarées

double PipStep=0 ; faire

 
Je ne comprends pas, suis-je le seul à ne pas pouvoir tester les démos d'indicateurs dans la build 555, ou est-ce que ce n'est pas du tout un problème important pour le début du marché ?
 
Candid:
Je ne comprends pas, suis-je le seul à ne pas pouvoir tester les démos d'indicateurs dans la build 555, ou est-ce que ce n'est pas du tout un problème important pour le début du marché ?

Sont-ils testés en 5 ?
 

ArrayCopyRates() также изменила свое поведение, раньше она производила виртуальное копирование в массив double[][6], теперь же производится виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное.

https://www.mql5.com/ru/forum/148325

MqlRates

Structure permettant de stocker des informations sur les prix, les volumes et les écarts.

https://www.mql5.com/ru/docs/constants/structures/mqlrates

Est-ce que MqlRates dans MetaTrader 4 construit 555 un tableau ou une structure ?

Cet exemple de l'aide (MetaTrader 4 build 555) ne fonctionne pas car il n'y a pas de fonction CopyRates

void OnStart()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,100,rates);
   if(copied>0)
     {
      Print("Скопировано баров: "+copied);
      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
      string out;
      int size=fmin(copied,10);
      for(int i=0;i<size;i++)
        {
         out=i+":"+TimeToString(rates[i].time);
         out=out+" "+StringFormat(format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print(out);
        }
     }
   else Print("Не удалось получить исторические данные по символу ",Symbol());
  }
 

//+------------------------------------------------------------------+
//|                                                     my_test1.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property  strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   ArrayCopyRates(rates,"EURUSD",PERIOD_M1);
   //int copied=CopyRates(Symbol(),0,0,100,rates);

   Print(
         " спред ",rates[6].spread               
         );
  }
//+------------------------------------------------------------------+
Cela ne fonctionne pas non plus, pouvez-vous voir un exemple fonctionnel dans MetaTrader 4 build 555 avec MqlRates ?
 
ALXIMIKS:

Est-ce qu'ils testent en 5 ?

Certaines personnes n'ont pas de test en 5 non plus ?
 
ALXIMIKS:

vous déclarez des variables de type double, l'initialisation consiste à attribuer des valeurs aux variables déclarées

double PipStep=0 ; do


Ça a marché ! !!

Vivre et apprendre !

Merci beaucoup !

 
serferrer:

Est-ce que MqlRates dans MetaTrader 4 construit 555 un tableau ou une structure ?

Cet exemple de l'aide (MetaTrader 4 build 555) ne fonctionne pas car il n'y a pas de fonction CopyRates

Cela ne fonctionne pas non plus, pouvons-nous voir un exemple fonctionnel dans MetaTrader 4 build 555 avec MqlRates ?


MqlRates - structure

MqlRates[] - tableau de structures

Pour voir un exemple de travail avec la structure MqlRates voir le script period_converter_new

Un exemple d'opération ArrayCopyRates (la documentation sera mise à jour)

MqlRates array1[];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",array1[0].time,"  цена открытия ", array1[0].open);
 
MetaQuotes:

Changements dans MQL4

  • ArrayCopyRates() a également changé de comportement. Avant, il copiait virtuellement dans le tableau double[][6], maintenant il copie virtuellement dans le tableau MqlRates[]. Maintenant, la copie dans le tableau double[][6] est effectuée, mais elle n'est pas virtuelle ; elle est réelle.

J'ai un nombre important de conseillers experts qui utilisent des DLL et ils ont été transmis aux clients il y a longtemps. Nous avons utilisé des tableaux double[][6] pour passer des paramètres à la DLL , qui ont été virtuellement copiés par ArrayCopyRates() pendant l'initialisation .Et ensuite, ces tableaux et leur taille actuelle étaient passés par référence comme paramètres lors de l'appel de fonctions depuis la DLL.

Il s'avère que tous ces EAs cesseront de fonctionner lorsque le terminal sera mis à jour vers une nouvelle version. C'est regrettable.

Ai-je bien compris que pour les faire fonctionner sans modifier le code de la DLL, nous devons appeler ArrayCopyRates() avant chaque appel d'une fonction de la DLL ?

 
stringo:
Il n'y a pas actuellement de valeur de spread (et peut-être aussi de volume d'échange ) dans la structure MqlRates, cela sera-t-il ajouté ultérieurement ?
 
Patrol:

J'ai un nombre important d'EE utilisant des DLL, qui ont été remises aux clients il y a longtemps. Pour passer les paramètres à la DLL, nous avons utilisé des tableaux double[][6], dans lesquels, pendant l'initialisation, la fonction ArrayCopyRates() a effectué une copie virtuelle des séries temporelles. Ensuite, lors de l'appel de fonctions à partir de la DLL, ces tableaux et leur taille actuelle étaient transmis par référence comme paramètres.

Il s'avère que tous ces EAs cesseront de fonctionner lorsque le terminal sera mis à jour vers une nouvelle version. C'est regrettable.

Ai-je bien compris que pour qu'ils continuent à fonctionner sans modifier le code de la DLL, nous devons appeler ArrayCopyRates() avant chaque appel d'une fonction de la DLL ?


C'est un peu plus compliqué que ça. La structure que prend le dll a également changé.

Ainsi, vous devez réécrire ArrayCopyRates en tableau de structure MqlRates. De même, dans votre dll, vous devez remplacer la description de la structure correspondante

Raison: