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

 

Bonjour.

Aidez-moi à colorier un zigzag.

Je veux faire en sorte que si la distance entre le creux et le sommet est >=100 points, le segment soit coloré en vert.

 
Dimitry-1983:

Bonjour !

Je me suis déjà creusé les méninges. Comment puis-je vérifier si un certain prix se trouve dans le tableau double ?

Je l'ai écrit comme ça pour le test :



Le script trouve 11, 22, 33, 44 sans aucun problème (le terminal a de tels ordres). Cependant, si le script traite le prix de 45, par exemple, il affiche toujours 3 (position du prix 44 dans le tableau).

Ce dont j'ai vraiment besoin, c'est d'un bool - s'il y a un prix de l'ordre en cours de traitement dans le tableau, il doit retourner true, sinon, il doit retourner false. Mais je n'ai pas encore trouvé une telle fonction dans la langue.

La fonctionrenvoie l'index du premier élément trouvé dans la première dimension du tableau, maissi la valeur recherchée n'est pas trouvée, elle renvoie l'index de l'élément avec la plus petite valeur, entre laquelle la valeur recherchée est située. Par conséquent, pour cette tâche, nous devons également vérifier l'égalité entre la valeur recherchée et la valeur trouvée. Le résultat de la comparaison sera vrai ou faux.

 
STARIJ:

Pourquoi devrais-je imprimer quelque chose à partir de l'indicateur ? Tout est sur l'écran - c'est ce qu'est l'indicateur. Lorsque j'ai besoin d'un tableau, je lance le script avec iCustom().


Ce que tu as écrit ici, je n'ai rien compris. Nous parlions du fait que je crée un fichier, qui est toujours vide pour une raison quelconque. Je n'arrive pas à mettre un tableau de données dans un fichier.

J'ai besoin que les données soient enregistrées dans un fichier. Si l'indicateur est attaché au graphique pour 1 an, alors il y a tous les enregistrements de ses lectures pour l'année !

 
Alekseu Fedotov:

C'est une façon intéressante de le coudre.

Essayez ceci par erreur.


Merci ! Mais j'ai déjà essayé et ça n'a pas marché.

 

Pouvez-vous me dire pourquoi ces erreurs apparaissent ?

//--- input parameters
input int      MyLevel=100; // установка уровня (отступ) выше (ниже) текущей цены;
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   double R1 = 0; // служеные переменные принимаются равными 0;
   double R2 = 0; // служебные переменные; принимаются равными 0;
//---
   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[])
  {
//---

   double i=Bid; // переменной i присваивается значение текущего курса;

   if(i>=R1) // если текущий курс >= служебной переменной R1;
     {
      R1=i+(MyLevel*Point); // то присваиваем R1 новое значение равное текущему курсу + отступ,
      R2=i-(MyLevel*Point); // также присваиваем R2 новое значение = текущий курс - отступ;
     }
   else
     {
      break;  // иначе, выходим из оператора
     }
   if(i<=R2) // если текущий курс <= служебной переменной R2;
     {
      R1=i+(MyLevel*Point); // то присваиваем R1 новое значение равное текущему курсу + отступ,
      R2=i-(MyLevel*Point); // также присваиваем R2 новое значение = текущий курс - отступ;
     }
   else
     {
      break; // иначе выходим
     }

   Label1Buffer [0] = R1; // заносим в буфер данные R1
   Label2Buffer [0] = R2; // и R2

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Erreurs :

R1 - identifiant non déclaré Mylevel.mq4 61 10

perte possible de données due à la conversion de type Mylevel.mq4 63 9

R2 - Identificateur non déclaré Mylevel.mq4 64 7

';' - 'break' doit être utilisé dans une boucle ou une instruction de commutation Mylevel.mq4 68 12

';' - 'break' doit être utilisé dans une boucle ou une instruction de commutation Mylevel.mq4 77 12


 
YarTrade:

Pouvez-vous me dire pourquoi ces erreurs apparaissent ?

Erreurs :

R1 - identificateur non déclaré Mylevel.mq4 61 10

perte possible de données due à la conversion de type Mylevel.mq4 63 9

R2 - Identificateur non déclaré Mylevel.mq4 64 7

';' - 'break' doit être utilisé dans une boucle ou une instruction de commutation Mylevel.mq4 68 12

';' - 'break' doit être utilisé dans une boucle ou une instruction de commutation Mylevel.mq4 77 12


R1, R2 sont déclarés à l'intérieur d'une fonction, respectivement - ils ne sont visibles que là - ils sont locaux.
break est utilisé dans les boucles et les swith
 

Je ne suis pas sûr qu'il existe un programme pour combiner les rapports de test similaire à reportmanager pour mt5,reportmanager ne les ouvre pas.

 
iv1986:

Si vous le savez, existe-t-il un programme pour combiner les rapports d'essai similaire à reportmanager pour mt5, maisreportmanager ne les ouvre pas?

Il est plus facile de réécrire le code et de faire des tests multidevises dans mt5. Les résultats des tests effectués sur la plateforme mt4 sont évidemment erronés. Le résultat final sera faussé de manière critique et il est inutile de l'analyser.

Voici l'un des 23 tests de symboles, tout est clair et presque évident


 

Puis-je faire un EA multi-instrumental si j'ai des paramètres et des stratégies différents pour chaque instrument ?

Vitaly Muzichenko:

Il est plus facile de réécrire le code et de faire des tests multidevises dans mt5. Les résultats des tests effectués sur la plateforme mt4 sont évidemment erronés. Le résultat final sera faussé de manière critique et il est inutile de l'analyser.

Voici l'un des tests pour 23 symboles, tout est clair et presque évident


Et si j'ai une stratégie différente et un code correspondant différent pour chaque symbole, puis-je créer un tel EA ?

 
iv1986:

Puis-je faire un EA multi-instrumental si j'ai des paramètres et des stratégies différents pour chaque instrument ?

Et si j'ai des stratégies et des codes différents pour chaque instrument, est-il possible de créer un tel EA ?

Vous pouvez écrire un EA multi-devises, il sera dans un seul fichier. Il est possible de combiner les stratégies pour différentes paires dans un seul fichier pour le testeur, et il est également possible de les négocier en ligne sur un seul graphique, mais il est possible de les séparer afin que chaque stratégie se négocie sur le symbole sur lequel l'EA a été placé. Les possibilités sont illimitées