Testeur soutenant les scripts et les conseillers MG4 - page 2

 
AlexeyVik:

Peut-être que les créateurs ne voient pas le genre de difficultés que rencontrent les programmeurs ordinaires.

Par exemple, j'ai étudié le BASIC à l'université et rien d'autre. J'ai essayé d'utiliser mql4 mais maintenant je n'ai plus aucun problème avec elle. Quand j'ai essayé d'utiliser mql5, j'ai écrit un indicateur simple de moins de 100 lignes avec un chapeau d'indicateur mql5. À mon avis, il y a une différence et la différence est significative.

C'est un mythe et vous le savez.

Prenons l'ATR standard.mq4 de MetaTrader 4. Il y a 104 lignes ici :

//+------------------------------------------------------------------+
//|                                                          ATR.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "https://www.mql4.com"
#property description "Average True Range"
#property strict

//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 1
#property  indicator_color1  DodgerBlue
//--- input parameter
input int InpAtrPeriod=14; // ATR Period
//--- buffers
double ExtATRBuffer[];
double ExtTRBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   string short_name;
//--- 1 additional buffer used for counting.
   IndicatorBuffers(2);
   IndicatorDigits(Digits);
//--- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtATRBuffer);
   SetIndexBuffer(1,ExtTRBuffer);
//--- name for DataWindow and indicator subwindow label
   short_name="ATR("+IntegerToString(InpAtrPeriod)+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//--- check for input parameter
   if(InpAtrPeriod<=0)
     {
      Print("Wrong input parameter ATR Period=",InpAtrPeriod);
      return(INIT_FAILED);
     }
//---
   SetIndexDrawBegin(0,InpAtrPeriod);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
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 i,limit;
//--- check for bars count and input parameter
   if(rates_total<=InpAtrPeriod || InpAtrPeriod<=0)
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtATRBuffer,false);
   ArraySetAsSeries(ExtTRBuffer,false);
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
//--- preliminary calculations
   if(prev_calculated==0)
     {
      ExtTRBuffer[0]=0.0;
      ExtATRBuffer[0]=0.0;
      //--- filling out the array of True Range values for each period
      for(i=1; i<rates_total; i++)
         ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      //--- first AtrPeriod values of the indicator are not calculated
      double firstValue=0.0;
      for(i=1; i<=InpAtrPeriod; i++)
        {
         ExtATRBuffer[i]=0.0;
         firstValue+=ExtTRBuffer[i];
        }
      //--- calculating the first value of the indicator
      firstValue/=InpAtrPeriod;
      ExtATRBuffer[InpAtrPeriod]=firstValue;
      limit=InpAtrPeriod+1;
     }
   else
      limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit; i<rates_total; i++)
     {
      ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      ExtATRBuffer[i]=ExtATRBuffer[i-1]+(ExtTRBuffer[i]-ExtTRBuffer[i-InpAtrPeriod])/InpAtrPeriod;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Prenons le fichier ATR.mq5 de MetaTrader 5, qui comporte 96 lignes.

//+------------------------------------------------------------------+
//|                                                          ATR.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2009, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property description "Average True Range"
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  DodgerBlue
#property  indicator_label1  "ATR"
//--- input parameters
input int InpAtrPeriod=14;  // ATR period
//--- indicator buffers
double    ExtATRBuffer[];
double    ExtTRBuffer[];
//--- global variable
int       ExtPeriodATR;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input value
   if(InpAtrPeriod<=0)
     {
      ExtPeriodATR=14;
      printf("Incorrect input parameter InpAtrPeriod = %d. Indicator will use value %d for calculations.",InpAtrPeriod,ExtPeriodATR);
     }
   else ExtPeriodATR=InpAtrPeriod;
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtATRBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtTRBuffer,INDICATOR_CALCULATIONS);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpAtrPeriod);
//--- name for DataWindow and indicator subwindow label
   string short_name="ATR("+string(ExtPeriodATR)+")";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   PlotIndexSetString(0,PLOT_LABEL,short_name);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
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 i,limit;
//--- check for bars count
   if(rates_total<=ExtPeriodATR)
      return(0); // not enough bars for calculation
//--- preliminary calculations
   if(prev_calculated==0)
     {
      ExtTRBuffer[0]=0.0;
      ExtATRBuffer[0]=0.0;
      //--- filling out the array of True Range values for each period
      for(i=1;i<rates_total && !IsStopped();i++)
         ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      //--- first AtrPeriod values of the indicator are not calculated
      double firstValue=0.0;
      for(i=1;i<=ExtPeriodATR;i++)
        {
         ExtATRBuffer[i]=0.0;
         firstValue+=ExtTRBuffer[i];
        }
      //--- calculating the first value of the indicator
      firstValue/=ExtPeriodATR;
      ExtATRBuffer[ExtPeriodATR]=firstValue;
      limit=ExtPeriodATR+1;
     }
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
     {
      ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      ExtATRBuffer[i]=ExtATRBuffer[i-1]+(ExtTRBuffer[i]-ExtTRBuffer[i-ExtPeriodATR])/ExtPeriodATR;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Il n'y a pas de différence de taille entre 104 et 96 lignes, même l'avantage est du côté de MQL5.

C'est ainsi que les gens transfèrent les absurdités et les mythes d'un forum à l'autre.

 
Renat:

Cela ne signifie pas du tout que la langue est la même.

La différence ne réside que dans un petit ensemble de fonctions (MT5 en possède de meilleures) et il n'y a pas de coûts importants à maîtriser.

Quant à "je ne veux pas perdre mon temps" et "j'en ai besoin hier", je tiens à vous rappeler qu'une plateforme de négociation est un outil important pour accroître l'efficacité d'un trader. Lorsqu'il existe une solution manifestement plus efficace et plus fonctionnelle, ne pas l'utiliser est un acte d'autodestruction et d'auto-illusion avec des mythes inventés.

Il suffit de comparer les testeurs de stratégies de trading pour oublier MT4 à jamais. Je ne plaisante pas et je ne réagis pas de façon excessive - c'est réel.

Le principe le plus stupide de totalisation des positions dans MT5 (et cela signifie l'impossibilité de limiter l'opération simultanée de plusieurs MTS sur un symbole et un compte sans aucune astuce) a découragé à jamais le trading sur celui-ci. Même lorsqu'il y aura plus de courtiers fournissant des MT5 sur le marché réel qu'il n'y a de doigts sur les mains.

Et réécrire le code pour MT5 uniquement pour le compte d'un testeur - désolé, mais c'est absurde.

 
evillive:

Le principe le plus stupide de totalisation des positions dans MT5 (qui signifie l'impossibilité de limiter l'opération simultanée de plusieurs MTS sur un symbole et un compte sans aucune astuce) a découragé à jamais le trading sur celui-ci. Même lorsqu'il y aura plus de courtiers fournissant MT5 en réel qu'il n'y a de doigts sur les mains.

Ce n'est pas du tout absurde.

Les avantages ont été expliqués tellement de fois que je ne veux pas les répéter. J'ai également expliqué à plusieurs reprises pourquoi "de multiples MTS sur un seul symbole vont à l'encontre du but recherché, sont une perte et une situation irréaliste pour une utilisation de masse".


Et réécrire le code pour MT5 juste pour le plaisir d'un testeur - désolé, mais c'est absurde.

Ce n'est pas absurde.

Vous réduisez vos propres opportunités et vous manquez des chances de développement. Prouver à soi-même et aux autres qu'un système sciemment meilleur, plus fonctionnel et plus puissant est pire qu'un ancien système avec un tas de défauts, c'est se faire du mal directement.

 
Renat:

Pas du tout signifie que la langue est la même.

La seule différence est un petit ensemble de fonctions (dans MT5, elles sont meilleures) et il n'y a pas de coûts majeurs à maîtriser.

Quant à "je ne veux pas perdre mon temps" et "j'en ai besoin hier", je tiens à vous rappeler qu'une plateforme de négociation est un outil important pour accroître l'efficacité d'un trader. Lorsqu'il existe, en toute connaissance de cause, une solution plus efficace et plus fonctionnelle à proximité, ne pas l'utiliser, c'est se faire du mal et se tromper soi-même avec des mythes inventés.

Il suffit de comparer les testeurs de stratégies de trading pour oublier MT4 à jamais. Je ne plaisante pas et je ne réagis pas de façon excessive - c'est réel.

Renat, est-il difficile d'assimiler un testeur mt4 à un testeur mt5 ?
 
Renat:

C'est un mythe et vous le savez.

Prenons l'ATR standard.mq4 de MetaTrader 4. Il y a 104 lignes ici :


Prenons le fichier ATR.mq5 de MetaTrader 5, qui comporte 96 lignes.


Il n'y a pas de différence de taille entre 104 et 96 lignes, et même l'avantage va à MQL5.

C'est ainsi que les gens transfèrent les absurdités et les mythes d'un forum à l'autre.

Ma question est que le même indicateur dans mql4 m'a pris une heure à écrire, et il m'a fallu une semaine pour maîtriser l'écriture du même code dans mql5.... Ce n'est pas le nombre de citations qui compte, c'est la compréhension des approches de programmation...

Quelle est la différence entre la fonction permettant d'obtenir la valeur de l'indicateur standard dans mql4 et la même fonction dans mql5... J'ai presque perdu la tête quand j'y faisais face. Bien sûr, vous pouvez proposer des cours de programmation, mais vous devez tenir compte d'autres facteurs qui peuvent ne pas permettre d'aller à de tels cours... Et le coût, et l'âge, et la distance du lieu ou le coût du trafic dans le cas de l'apprentissage en ligne ... On ne sait jamais...

 
AlexeyVik:
Renat, est-il difficile d'assimiler le testeur mt4 au testeur mt5 ?
Nous ne toucherons pas au 4, seulement à la partie service de l'intégration avec MQL5.community.
 
Renat:
Nous ne toucherons pas au quartet, seulement à la partie service de l'intégration avec MQL5.community.
Je n'ai même pas demandé si tu allais le faire, donc j'ai deviné que tu ne le ferais pas. J'ai demandé si c'était difficile de...
 
AlexeyVik:

Ce n'est pas ce que je disais, je disais que j'ai écrit le même indicateur sur mql4 en une heure, et qu'il m'a fallu une semaine pour apprendre à écrire le même code sur mql5.... Ce n'est pas le nombre de citations qui compte, c'est la compréhension des approches de programmation...

Quelle est la différence entre la fonction d'obtention de la valeur de l'indicateur personnalisé dans mql4 et la même fonction dans mql5 ... J'ai été presque fou d'essayer de le comprendre. Bien sûr, vous pouvez proposer des cours de programmation, mais vous devez tenir compte d'autres facteurs qui peuvent ne pas permettre d'aller à de tels cours... Et le coût, et l'âge, et la distance du lieu ou le coût du trafic dans le cas de l'apprentissage en ligne ... On ne sait jamais...

Comparez les deux fichiers et vous trouverez les différences minimales.

À propos du "une semaine pour s'y faire, j'ai failli devenir fou", c'est un mot rouge sur le forum. C'est ainsi que naissent les mythes.

 
AlexeyVik:
Seulement, la langue y est si différente qu'il faut beaucoup de temps pour la maîtriser.
Fais chier. Un mois était suffisant.
 
Renat:

Comparez les deux fichiers et vous trouverez des différences minimes.

Le "une semaine pour s'y retrouver, j'ai failli devenir fou" est une expression à la mode sur le forum. C'est ainsi que naissent les mythes.

Je ne prouverai pas que c'est la vérité. Pour une personne qui n'est pas familière avec la programmation C++ et généralement la POO, c'est plutôt difficile et pas du tout pour le plaisir des mots rouges ou la création d'un mythe. Aussi étrange que cela puisse paraître, j'ai tout compris en une semaine et j'ai écrit ce dont j'avais besoin. Et ceci est un mythe complètement différent ; il montre que mql5 peut être facilement maîtrisé même par des non-professionnels, comme moi.