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

 
Vitaly Muzichenko:

Que ce soit initialement comme ça.

Ensuite, nous devons faire une fixation correcte que la barre est travaillée, mais ici nous devons calculer l'approche entière du RPT.

Jusqu'à présent, d'après ce que je vois dans votre post, nous devons faire cela :

L'essentiel est que si l'écart est supérieur à la normale, alors nous sortons à nouveau enOnTick, et sur un nouveau tick, nous vérifions l'écart, s'il est normal - nous envoyons un ordre et nous nous souvenons qu'il y a eu une transaction sur cette barre.

Il y a aussi une deuxième voie :

En général, vous devez définir la logique, quand elle doit enregistrer, et ne pas vérifier à nouveau jusqu'à ce que la "Nouvelle barre" soit formée.


Je vous comprends, merci !

 

Messieurs, vous pouvez me donner un indice ? J'ai essayé d'écrire les données de l'indicateur dans un fichier pour la deuxième semaine afin de les lire plus tard et de construire un indicateur basé sur ces données. L'indicateur est un indicateur d'entraînement, je calcule le volume sur chaque tick d'une certaine barre. Si le tick est positif, son volume est ajouté avec "+", s'il est négatif - avec "-". J'additionne les volumes cumulés obtenus et j'obtiens un delta et je considère ce delta comme cumulatif. Cela produit une courbe. Toutefois, cette courbe n'est construite qu'en temps réel. Elle ne peut pas être tracée dans l'histoire. À cette fin, j'ai décidé d'écrire les données dans un fichier. J'ai été bloqué à ce stade. J'ai réussi avec peine à faire en sorte que le code ne génère pas d'erreurs de compilation. Cependant, le produit qui en résulte ne fonctionne pas. L'indicateur fonctionnait auparavant. Après avoir joint le code pour écrire le fichier, l'indicateur ne fonctionne plus. Le programme crée un fichier avec un enregistrement incompréhensible et meurt à ce stade. Je suis resté assis ici toute la journée et je n'arrive pas à comprendre. Quelqu'un peut-il m'aider ?

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

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

input string             InpFileName="111.csv";      // Имя файла 
input string             InpDirectoryName="Data";     // Имя каталога 

datetime Время=0;   // Время прошлого бара
double Bid1;
double   Buf_1[];
// double ExtBuffer;
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // объем текущего тика вниз
long V4; // накопленный объем для всех тиков вниз для текущего бара
long V5;  // отрицательные и положительные iVolume нарастающим итогом
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
//SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
   V5=0;

  }
//+------------------------------------------------------------------+
//| 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;         // и обнулить последний элемент буфера
     }

   datetime date_Buf_1[]; // массив дат индикатора 
   datetime time_Buf_1[]; // массив времени 
                          // --- считаю объем для положительных и отрицательных тиков      
   if(Bid>=Bid1)
     {
      if(Bid>Bid1) // если тик положительный..
        {
         V1=iVolume(NULL,0,0); // если повышающий цену тик, то находим его объем
         V2= V1 + V2;
        }
      else
        {
         V1=0;                // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
         V2= V1 + V2;
        }
     }
   else
     {
      V3 = iVolume(NULL, 0, 0); // если понижающий цену тик 
      V4 = V3 + V4;             // то находим его объем  
     }

   V5=V2-V4;               // определяем разницу (дельту) между объемами положительных и отрицательных тиков
   Bid1=Bid;
   Buf_1[0]=V5; // в буфер сгружаем  дельту

                //   ExtBuffer = Buf_1 [0];
//   double macurrent=iMAOnArray(ExtBuffer,0,5,0,MODE_LWMA,0); 

// запись в файл данных буфера

//--- установим для массивов признак таймсерии 
   ArraySetAsSeries(Buf_1,true);
   ArraySetAsSeries(date_Buf_1,true);

//--- скопируем таймсерию 
   int copied=CopyTime(NULL,0,0,0,date_Buf_1);

//--- подготовим массив Buf_1 
   ArrayResize(Buf_1,copied);
//--- скопируем значения линии индикатора  
   for(int i=0;i<copied;i++)
     {
      Buf_1[i]=V5;
     }
//--- откроем файл для записи значений индикатора 
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("Файл %s открыт для записи",InpFileName);
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- сначала запишем значения индикатора 
      FileWrite(file_handle,Buf_1[0]);
      //--- запишем время и значения в файл 
      for(int i=0;i<Buf_1[0];i++)
         FileWrite(file_handle,time_Buf_1[i],Buf_1[i]);
      //--- закрываем файл 
      FileClose(file_handle);
      PrintFormat("Данные записаны, файл %s закрыт",InpFileName);
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());

   return(rates_total);
  }
//+------------------------------------------------------------------+
 
YarTrade:

Messieurs, vous pouvez me donner un indice ? J'ai essayé d'écrire les données de l'indicateur dans un fichier pour la deuxième semaine afin de les lire plus tard et de construire un indicateur basé sur ces données. L'indicateur est un indicateur d'entraînement, je calcule le volume sur chaque tick d'une certaine barre. Si le tick est positif, son volume est ajouté avec "+", s'il est négatif - avec "-". J'additionne les volumes cumulés obtenus et j'obtiens un delta et je considère ce delta comme cumulatif. Cela produit une courbe. Cependant, cette courbe n'est construite qu'en temps réel. Elle ne peut pas être tracée dans l'histoire. À cette fin, j'ai décidé d'écrire les données dans un fichier. J'ai été bloqué à ce stade. Je me suis débrouillé avec une certaine amertume pour que le code ne génère pas d'erreurs de compilation. Cependant, le produit qui en résulte ne fonctionne pas. L'indicateur fonctionnait avant cela. Après avoir joint le code pour écrire le fichier, l'indicateur ne fonctionne plus. Le programme crée un fichier avec un enregistrement incompréhensible et meurt à ce stade. Je suis resté assis ici toute la journée et je n'arrive pas à comprendre. Quelqu'un peut-il m'aider ?


Il serait bon de déplacer le pointeur à la fin du fichier avant d'enregistrer.

FileSeek - Файловые операции - Справочник MQL4
FileSeek - Файловые операции - Справочник MQL4
  • docs.mql4.com
Если выставить позицию за "правую границу" файла (больше, чем размер файла), то последующая запись в файл будет будет произведена не с конца файла, а с выставленной позиции. При этом между предыдущим концом файла и выставленной позицией будут записаны неопределенные значения...
 
Alexey Viktorov:

Il serait bon de déplacer le pointeur à la fin du fichier avant d'écrire.


C'est pour quoi faire ? J'ai lu le lien, mais je ne le comprends pas.

 
YarTrade:

C'est pour quoi faire ? J'ai lu le lien, mais je ne le comprends pas.

Pour quoi faire ? Lorsque vous ouvrez un fichier, le pointeur est positionné au début du fichier et les informations sont écrites au début du fichier. Pour écrire au bon endroit, vous devez déplacer le pointeur au bon endroit.

 
YarTrade:

Messieurs, vous pouvez me donner un indice ? Pour la deuxième semaine, j'essaie d'écrire les données de l'indicateur dans un fichier...

L'avez-vous lu ?
 
Alexey Kozitsyn:
L'avez-vous lu ?

Je suis toujours en train d'apprendre MQL4. Je n'ai pas lu.

Existe-t-il un service de formation en ligne où l'on peut apprendre MQL4 gratuitement/payé par des exemples avec un tuteur ? J'ai presque lu un tutoriel MQL4, mais je ne sais pas du tout programmer. Je ne suis pas familier avec la programmation auparavant. J'essaie d'apprendre quelque chose dans ce fil, mais je n'ai fait aucun progrès. Pouvez-vous me donner un conseil ?

 
YarTrade:

Je suis toujours en train d'apprendre MQL4. Je n'ai pas lu.

Existe-t-il un service de formation en ligne où l'on peut apprendre MQL4 gratuitement/payé par des exemples avec un tuteur ? J'ai presque lu un tutoriel MQL4, mais je ne sais pas du tout programmer. Je ne suis pas familier avec la programmation auparavant. J'essaie d'apprendre quelque chose dans ce fil, mais je n'ai pas progressé. Pouvez-vous me donner quelques suggestions ?

1. Le travail avec les fichiers dans mql4 est le même que dans mql5.

2. Avec tout le respect que je dois à Sergei Kovalev, il a également répondu à mes questions en son temps, mais à mon avis, les leçons de Kirill sont plus faciles à comprendre. Dans Yandex vous tapez et immédiatement 2 liens vers sa leçon


 

Bonjour ! Le tutoriel du site web m'a suffi, après quelques années de battement sur les baffles j'ai appris à écrire mes propres indicateurs. Mais les questions demeurent. Maintenant, je ne comprends pas pourquoi les indicateurs sont confus. Sur M1, après environ 12 heures, certains d'entre eux commencent à dessiner de manière incorrecte mais signalent correctement. Certains dessinent et signalent de manière incorrecte. Sur la M5, ils continuent à dessiner cinq fois plus longtemps. Pouvez-vous me donner un indice s'il vous plaît.

 
Alexey Viktorov:

1. La manipulation des fichiers dans mql4 est la même que dans mql5.

2. Avec tout le respect que je dois à Sergey Kovalev, il a également répondu à mes questions en son temps, mais à mon avis, la leçon de Kirill est plus facile à comprendre. Dans Yandex, tapez sur et immédiatement 2 liens vers sa leçon



Est-il possible d'apprendre avec l'aide des leçons de "Kirill" si vous n'avez jamais fait de programmation auparavant ? Combien de temps cela prend-il ?