Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 782

 
Seric29:

J'ai l'idée d'écrire une fonction qui prend et déplace un tableau. La question est de savoir comment faire pour que cette fonction détermine elle-même quel type de tableau est unidimensionnel ou bidimensionnel, de sorte que je ne doive pas spécifier dans les arguments à chaque fois que le tableau est bidimensionnel ou régulier. En même temps, je veux appliquer un modèle, de sorte que je n'ai pas à spécifier le type du tableau.

Comment puis-je faire en sorte de ne pas avoir à spécifier le type de tableau ?

Ne pas surcharger :

template<typename T>
void MoveArray(T &array1[][]) // 2ух мерный.
{
// тело
}
template<typename T>
void MoveArray(T &array1[])// одномерный.
{
// тело
}
 
Ilya Prozumentov:

Une surcharge de travail :

La deuxième dimension peut-elle être dynamique ?
 
Alexey Viktorov:
La deuxième dimension peut-elle être dynamique ?

Ce n'est pas dynamique, c'est juste écrit comme un argument reçu, il suffit de mettre des crochets.

 

Comment puis-je implémenter dans une boucle (ou d'une autre manière) l'énumération des variantes de conditions possibles ?


Par exemple, il existe 2 indicateurs MA et MACD, c'est-à-dire qu'ils représentent 3 variantes de conditions possibles :

1 option - if(iMA ...) {...} ;

2ème scénario - if(iMACD ...) {...} ;

variante 3 - if(iMA ... iMACD ...) {...} ;


Il est facile de combiner des paramètres d'entrée, mais comment combiner des conditions ? Ceci est particulièrement utile s'il y a plus de deux indicateurs ou formules.


Donnez des liens vers des exemples si possible

 
Alexandr Sokolov:

Comment implémenter dans une boucle (ou d'une autre manière) l'énumération des variantes de conditions possibles ?

Si je comprends bien, la réponse se trouve dans le sujet.

 

Bonjour, encore une fois, je ne comprends pas quelque chose d'évident.

Alors comment passer un tableau à une fonction après tout ?

double b[5]={1,2,3,4,5};
void OnStart()
  {
//---
Func(b[]);

  }
//+------------------------------------------------------------------+
void Func(double &a[])
      {
         Alert(a[3]);
      }

Erreurs :
']' - expression attendue
b' - la conversion des paramètres n'est pas autorisée

Supposons que je sache comment éliminer la première erreur :

Func(b[3]);

Mais alors quoi, seul le troisième élément sera passé ? Cela n'a aucun sens.
Comment puis-je transmettre le tableau dans son ensemble ?
Merci.

 
Mikhail Sobolev:

Bonjour, encore une fois, je ne comprends pas quelque chose d'évident.

Alors comment passer un tableau à une fonction après tout ?

Erreurs :
']' - expression attendue
b' - la conversion des paramètres n'est pas autorisée

Supposons que je sache comment éliminer la première erreur :

Mais alors quoi, seul le troisième élément sera passé ? Cela n'a aucun sens.
Comment puis-je transmettre le tableau dans son ensemble ?
Merci.

Func(b);
 
int OnCalculate (const int rates_total,      // размер массива price[] 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const int begin,            // откуда начинаются значимые данные 
                 const double& price[]       // массив для расчета 
                );

Veuillez expliquer le mécanisme du début variable


Ce lien semble contenir des informationshttps://www.mql5.com/ru/docs/basis/function/events, mais soit je ne les comprends pas, soit je ne les ai pas trouvées. Je n'arrive pas à comprendre quelle est la valeur par défaut au départ et comment elle change au fur et à mesure des cycles des indicateurs


Par exemple, je sais que return() dans la fonction OnCalculate() affecte la valeur de retour à la variable prev_calculated et qu'elle sera utilisée dans les calculs lors du prochain appel de OnCalculate(), c'est-à-dire au prochain tick.


Veuillez décrire avec les mêmes mots simples le mécanisme de la variable commencer à l'intérieur de la fonction OnCalculate()

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

Bon après-midi.

Pouvez-vous me dire pourquoi la fonction OnTick n'écrit pas de données dans le fichier en utilisant ce code :

//=== écrire les données dans le fichier ===

h1=FileOpen("test_bar.csv",FILE_CSV|FILE_WRITE|FILE_READ,",") ;

FileSeek(h1, 0, SEEK_END) ;

FileWrite(h1, TimeToStr(Time[1],TIME_DATE|TIME_MINUTES),i,Open[1],High[1],Low[1],Close[1], Parabola57Up, ") ;

FileClose(h1) ;


Et ça, c'est pendant les tests d'histoire. Lorsque le conseiller expert fonctionne en ligne, il continue à enregistrer.

Merci.

 
Alexandr Sokolov:

Comment puis-je implémenter dans une boucle (ou d'une autre manière) l'énumération des variantes de conditions possibles ?


Par exemple, il existe 2 indicateurs MA et MACD, c'est-à-dire qu'ils représentent 3 variantes de conditions possibles :

1 option - if(iMA ...) {...} ;

2ème scénario - if(iMACD ...) {...} ;

variante 3 - if(iMA ... iMACD ...) {...} ;


Il est facile de combiner des paramètres d'entrée, mais comment combiner des conditions ? Ceci est particulièrement utile s'il y a plus de deux indicateurs ou formules.


Donnez-moi des liens vers des exemples si vous en avez.

Je veux faire une auto-optimisation, mais pas seulement par les paramètres d'entrée des indicateurs. Je le comprends

Mais comment faire unbouclagedes conditions ? Par exemple, il y a 3 indicateurs (nous ne considérons pas la sélection des paramètres d'entrée dans la boucle pour des raisons de simplicité) et il y a 7 combinaisons possibles de conditions/combinaisons

. Par exemple, les trois premières conditions ont un indicateur
1) if(indicateur #1 ...) {...} ;
2) if(indicateur #2 ...) {...} ;
3) if(indicateur #3...) {...}..) {...} ;

Les trois secondes conditions sur deux indicateurs sont
4) if(#1 ... && #2 ...) {...} ;
5) if(#1 ... && #3 ...) {...} ;
6) if(#2 ... && #3 ...) {...} ;

Et dans la dernière septième condition, les trois indicateurs disponibles
7) if(#1 ... && #2 ... && #3 ...) { ...} ;

Et s'il est également possible, il serait bon de boucler l'énumération des conditions logiques. Par exemple, n'écrivez pas && || > < == et ainsi de suite, mais bouclez

. Ce serait bien si nous pouvions écrire chaque variante possible manuellement et que l'EA combine et vérifie toutes les variantes possibles des paramètres d'entrée, des indicateurs combinés ou individuels et des conditions logiques.

Raison: