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

 
Сергей Таболин:

Comme je le comprends, moi, un dilettante, qui ne peut pas comprendre la signification sacrée de toutes les classes, et pourquoi la POO est nécessaire dans notre activité (commerciale) en général - les classes sont toutes des bibliothèques de code écrites (à la fois par MQ et par le gourou), conçues pour "faciliter" la vie des "codeurs non-gourous".

Le problème, et je l'ai déjà dit, c'est que l'utilisation de tout ce "relief" ne facilite pas l'écriture du code. Parce que vous devez toujours revérifier toutes les commandes que vous envoyez vous-même ! Parce que pratiquement tout le monde insiste pour que je vérifie aussi certaines "transactions". D'autant plus que ces "...actions" arrivent au hasard.

Je donne l'ordre - de planter un clou à cet endroit à tel angle. C'est tout. Ensuite, je reçois une réponse - le clou est enfoncé. Et puis j'ai un avertissement qui dit que

  • peut-être que le clou n'était pas de la bonne taille - il faut vérifier.
  • C'est peut-être le mauvais angle - il fautvérifier.
  • Peut-être qu'il est martelé au mauvais endroit - il fautvérifier.

Alors pourquoi ai-je besoin de tels interprètes (classes) ?

J'exagère peut-être un peu, mais le point ne change pas.

Et pourquoi ? Parce que toutes les données traitées dans les classes peuvent être modifiées de telle sorte que la classe ne soupçonne même pas qu'elles ont été modifiées.


Je vois.

Je suis d'accord, d'ailleurs, pour dire que la POO ne rend pas la programmation plus facile.

La POO facilite la maintenance des grands projets, mais tend à rendre plus difficile la création de petits projets.

La POO est plus difficile pour les débutants.

Utiliser les cours d'autres personnes revient, dans une certaine mesure, à utiliser des boîtes noires.

 
Bonjour. Pourriez-vous me dire où j'ai fait une erreur et pourquoi l'indicateur ne montre pas de flèches ?
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window


double      Buy[];            // Буфер для покупок
double      Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9;
input int kijun_sen1  = 26;
input int senkou_span_b1 = 52;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
//--- indicator buffers mapping
   SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   
//---
   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[])
  {
    int limit=rates_total-prev_calculated-1;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
      double tenkan_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
      double kijun_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
      double senkou_span_b = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
      double senkou_span_a = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
      double chikou_span = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
      if(tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if(tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn:
Bonjour. Pourriez-vous me dire où j'ai fait une erreur et pourquoi l'indicateur ne montre pas de flèches ?
#property indicator_buffers 2
 
MakarFX:

J'ai mis la ligne manquante mais toujours pas de flèches !

 
jarikn:

J'ai mis la ligne manquante mais toujours pas de flèches !

montrer

 
MakarFX:

montrer

//+------------------------------------------------------------------+
//|                                                     ishimocu.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2

//--- input parameters
double      Buy[];            // Буфер для покупок
double      Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9;
input int kijun_sen1  = 26;
input int senkou_span_b1 = 52;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
//--- indicator buffers mapping
   SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   
//---
   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[])
  {
  
   
 
  
    int limit=rates_total-prev_calculated-1;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
      double tenkan_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
      double kijun_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
      double senkou_span_b = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
      double senkou_span_a = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
      double chikou_span = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
      if(tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if(tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn:

J'ai un dessin...


 
MakarFX:

Je dessine...


Putain de merde. mauvais ishimoku run )))) merci beaucoup

 
Alexey Viktorov:

Oui, bon... Un minimum d'écriture et un maximum de maux de tête...

Qu'est-ce que c'est exactement ? Peut-être que je fais juste quelque chose de mal.

 
Andrey Sokolov:

Qu'est-ce que c'est exactement ? Est-ce que je fais quelque chose de mal ?

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

OOP pour les écoliers.

Alexey Viktorov, 2019.10.04 16:01

Je pense que mql a un ensemble très limité de problèmes à résoudre par la POO. Le langage lui-même, il me semble, n'est rien d'autre que la POO en C++ ou autre. Et cette POO est proposée sous la forme d'une bibliothèque standard. Et à cet OOP, il est suggéré d'ajouter, sinon on ne peut pas le dire, un autre OOP. Et puis une autre étape... Bien dit Warlock, bien que fâché, mais bienveillant, pour mes tâches OOP est comme une platine de chien. Et à quoi bon définir une tâche et la mettre en œuvre en utilisant la POO, si cette tâche peut être résolue dans le style procédural sans aucun problème.

Par exemple, prenez le .mqh de fxsaber`a pour écrire des codes pour MT5 ainsi que pour MT4. Peut-être que quelqu'un peut en avoir besoin, mais regarde qui. Pour quelqu'un qui ne veut ou ne peut absolument pas maîtriser le mql5. Ou prenez iCanvas de Nikolay ... j'ai oublié son nom de famille. Il semble que ce soit une bibliothèque utile, mais il n'est pas facile de la comprendre, et il n'y a pas de documentation, même une petite description. Ce n'est pas une plainte, désolé Nikolay, c'est un fait. Ainsi, lorsque j'ai décidé d'essayer d'écrire une étiquette graphique, il était plus facile de l'écrire sans faire référence à la bibliothèque standard ou à la bibliothèque de Nikolaï.

Et ensuite vous pourrez lire le fil entier.