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

 
Artyom Trishkin:
bars[]
Si vous le pouvez, montrez-moi le code.
 
Vitaly Muzichenko:

AppeléBars, le compilateur le gronde dans les cieux. Avez-vous testé cette conception, ou avez-vous simplement supposé qu'elle devait fonctionner, ou est-ce que je fais quelque chose de mal ?

Oui, je me suis trompé. Nommez-le. En général, l'idée est de donner des noms expressifs aux variables, ainsi vous n'aurez pas besoin de créer des variables supplémentaires, dont l'existence n'est pas toujours justifiée.
 
Vasiliy Sokolov:
Oui, je me suis trompé. Nommez-le. En général, l'idée est de donner des noms expressifs aux variables, ainsi vous n'aurez pas besoin de créer des variables supplémentaires, dont l'existence n'est pas toujours justifiée.

La raison n'est pas d'exprimer quelque chose, mais de raccourcir le code quand on travaille avec eux :

if(open1<close1 && close2>close3 && close1>close2 &&

Et le reste de la même manière, sinon la longueur des lignes augmente

Merci à tous pour les clarifications !

 
Vitaly Muzichenko:

Je ne l'ai pas appelé pour exprimer quelque chose, mais pour réduire le code quand on travaille avec eux :

if(open1<close1 && close2>close3 && close1>close2 &&

Et le reste de la même façon, sinon la longueur des lignes augmente

Merci à tous pour les clarifications !

Si vous voulez réduire le code au minimum, faites directement référence au tableau de données

//+------------------------------------------------------------------+
//|                                                       test09.mq5 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"

MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar=0; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(bars, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CopyRates(Symbol(),PERIOD_CURRENT, start_bar, count_bar, bars)<count_bar) return;
  
   if(bars[1].open<bars[1].close && bars[2].close>bars[3].close && bars[1].close>bars[2].close)
   {
  
   }
  }
//+------------------------------------------------------------------+

...
 

Bonjour !

Où et comment supprimer correctement les ordres placés et les positions ouvertes lors du déchargement (suppression) d'un Expert Advisor ? Si cela n'est pas difficile, veuillez nous donner un exemple.

Merci.

 

L'un des EA fait des bêtises étranges. Teste l'EA normalement, en cliquant sur "Exécuter un seul test", on n'exécute qu'un seul test, la première fois. Ensuite, lorsque vous cliquez sur le test unique ou sur n'importe quelle ligne de l'optimisation, cela apparaît dans le journal :

2017.02.08 13:31:05.165 Le testeur ne peut pas obtenir les entrées pour la passe 4234087422336

2017.02.08 13:31:34.829 Le testeur ne peut pas obtenir d'entrées pour la passe 4076312468706

2017.02.08 13:31:47.973 Le testeur ne peut pas obtenir d'entrées pour la passe 1004506640527.

Les autres EAs se comportent normalement. Qu'est-ce que ça peut être ?

 

Messieurs, l'enregistrement d'une énorme matrice 10000*10000

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

Selon vous, cet algorithme est efficace en termes de vitesse ?

Parce que lorsque la matrice est de 1000*1000 la vitesse est de quelques secondes, lorsque l'on passe à 10000*10000 le système se met en route.

 
Top2n:

Messieurs, l'enregistrement d'une énorme matrice 10000*10000

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

Selon vous, cet algorithme est efficace en termes de vitesse ?

Parce que lorsque la matrice est de 1000*1000 la vitesse est de quelques secondes, lorsque l'on passe à 10000*10000 le système se met en route.

Comment obtenir une telle matrice si les tableaux à plus de quatre dimensions ne sont pas autorisés ?
Y a-t-il une confusion ?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Comment est-il possible d'obtenir une telle matrice si les tableaux ne sont pas autorisés à plus de quatre dimensions?
Il n'y a pas de confusion ?

10000 x 10000 n'est-il pas une matrice à deux dimensions ?

double arr[10000][10000];

et tout ça...

 
Alexey Viktorov:
Comment est-il possible d'obtenir une telle matrice si les tableaux ne sont pas autorisés à plus de quatre dimensions?
Y a-t-il une confusion ?
Oui, c'est bidimensionnel, donc je ne le dis pas correctement, je dis que ce n'est pas une matrice, mais un tableau. Une matrice implique-t-elle la multidimensionnalité ?