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

 
STARIJ:
Essayez d'écrire la date, l'heure, l'enchère et les résultats de vos calculs dans le fichier pour chaque tick. Ensuite, téléchargez-la sur Excel et vérifiez-la. Cela n'a guère de sens de réconcilier toutes les dizaines de lignes du programme !

Mais regardez, vous avez le retour dans chaque branche de l'opérateur conditionnel, c'est-à-dire qu'il est toujours exécuté. Donc on le retire de l'opérateur conditionnel :

Enchère [1] - c'est vrai ?


Merci. Je vais l'essayer maintenant. J'ai compris l'essentiel de votre code et c'est déjà une grande réussite pour moi :) J'ai aussi vu mes défauts.

Qu'est-ce que le bouton SRC ?

 
STARIJ:
Essayez d'écrire la date, l'heure, l'enchère et les résultats de vos calculs dans le fichier pour chaque tick. Ensuite, téléchargez-la sur Excel et vérifiez-la. Cela n'a guère de sens de réconcilier toutes les dizaines de lignes du programme !

Mais regardez, vous avez le retour dans chaque branche de l'opérateur conditionnel, c'est-à-dire qu'il est toujours exécuté. Nous le sortons donc de la portée de l'opérateur conditionnel :

Enchère [1] - c'est comme ça ?


J'ai inséré le code dans le "constructeur" de l'indicateur personnalisé. Je l'ai compilé. Le compilateur a généré 1 avertissement : Deux OnCalculate sont définis. La version OHLC sera utilisée (je ne comprends pas ce que cela signifie).

J'ai reçu le produit compilé. Attachez-le au tableau. La fenêtre séparée pour le graphique est ouverte mais elle ne montre aucune information sur l'histogramme, malgré les ticks.

Qu'est-ce qui ne va pas ? S'il vous plaît, conseillez-nous.

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//- local variables
int Tick, Tick2;       // Для вставки программы используйте кнопку SRC
double Bid1;

//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   Bid1=Bid;
//---
   return(INIT_SUCCEEDED);
  }
  
 
    void start()   // Вместо start более модно писать OnTick
{
    if(Bid > Bid1) Tick++;                             
    else Tick2++;
    Bid1=Bid;                      
}
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
YarTrade:

J'ai inséré le code dans le "constructeur" de l'indicateur personnalisé. Je l'ai compilé. Le compilateur m'a donné 1 avertissement : deux OnCalculate sont définis. La version OHLC sera utilisée (je ne sais pas ce que cela signifie).

J'ai reçu le produit compilé. Attachez-le au tableau. La fenêtre séparée pour le graphique est ouverte mais elle ne montre aucune information sur l'histogramme, malgré les ticks.

Qu'est-ce qui ne va pas ? Pouvez-vous nous conseiller ?

Lorsque vous collez le code ici, utilisez le bouton de l'éditeur de message SRC - en haut du champ du message, il y a beaucoup de choses utiles dans le panneau de formatage du message.

Il n'est pas difficile de lever les yeux juste au-dessus du texte que vous tapez, n'est-ce pas ? Et c'est beaucoup plus agréable pour les gens de regarder du code normal plutôt que le swag, n'est-ce pas ?

J'ai inséré votre code pour vous dans votre post correctement (SRC)

 
Artyom Trishkin:

Lorsque vous collez le code ici, utilisez le bouton SRC de l'éditeur de message - il y a beaucoup de fonctions utiles dans le panneau de formatage de message en haut de la boîte de message.

Il n'est pas difficile de lever les yeux juste au-dessus du texte que vous tapez, n'est-ce pas ? Et c'est beaucoup plus agréable pour les gens de regarder le code normal plutôt que le swag, n'est-ce pas ?

J'ai mis votre code dans votre message pour vous correctement (SRC)


Oui. Merci. Je ne le savais pas.

 
YarTrade:

A émis 1 avertissement au compilateur : deux OnCalculate sont définis. La version OHLC sera utilisée (je ne suis pas sûr de ce que cela signifie).

J'ai reçu le produit compilé. Attachez-le au tableau. La fenêtre séparée pour le graphique est ouverte mais elle ne montre aucune information sur l'histogramme, malgré les ticks.

Qu'est-ce qui ne va pas ? S'il vous plaît, conseillez-nous.

La fonction était appelée Start avant, maintenant elle est appelée OnTick dans Expert Advisor et OnCalculate dans l'indicateur. Le compilateur prévient : vous avez deux fois la même fonction sous des noms différents. Déplacez le contenu de Start vers OnCalculate et supprimez Start. Vous devrez également décrire dans votre programme ce qui doit être affiché et comment. Décidez d'abord vous-même - quelle image doit être présente ? Il est préférable de commencer à étudier le langage MQL en écrivant des scripts. Un conseiller expert est plus compliqué, un indicateur l'est encore plus.

 
STARIJ:

La fonction s'appelait auparavant Start, elle s'appelle maintenant OnTick dans l'EA et OnCalculate dans l'indicateur. Le compilateur avertit : vous avez la même fonction deux fois sous des noms différents. Déplacez le contenu de Start vers OnCalculate et supprimez Start. Vous devrez également décrire dans votre programme ce qui doit être affiché et comment. Décidez d'abord vous-même - quelle image doit être présente ? Il est préférable de commencer à étudier le langage MQL en écrivant des scripts. Le conseiller expert est plus difficile, l'indicateur est encore plus difficile.


Je ne peux pas insérer le contenu de Start dans OnCalculate et je reçois beaucoup d'erreurs.

 
YarTrade: Je ne peux pas insérer le contenu de Start dans OnCalculate, cela génère beaucoup d'erreurs


L'indicateur n'affiche que les informations du début. La fenêtre de données (Ctrl-D) affiche les données du chandelier sur lequel le curseur est pointé.

//+------------------------------------------------------------------+
//|                                                     -Тики-07.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
//  #property indicator_plots   2        в MQL-4 такое отсутствует
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;

double   Buf_1[], Buf_2[]; // 2 буфера

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }

   if(Bid > Bid1) Buf_1[0]++;                             
   else Buf_2[0]--;
   Bid1=Bid;                      

  return(rates_total);
}
 
Alexey Kozitsyn:

:)

et comment formuler la situation créée avec les noms des fonctions ?
 
STARIJ:
Et comment formuler la situation créée avec des noms de fonctions ?

start - nom obsolète. OnTick() est le nom réel de la fonction de gestion des tics.

Quoi qu'il en soit, peu importe la définition que vous en donnez, le seul mot "tendance" m'a fait sourire.

 
Alexey Kozitsyn:

start - nom obsolète. OnTick() est le nom réel de la fonction de gestion des tics.

De toute façon, peu importe comment on le définit, c'est juste le mot "tendance" qui fait sourire.

Obsolète est un terme qui n'est plus utilisé. Mais le départ vit et continuera à vivre.