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

 

Pouvez-vous me conseiller un zig-zag approprié, s'il vous plaît... Parce que j'en ai utilisé un et il est parfois très instable...


 

S'il vous plaît dites-moi, je ne comprends pas bien - dans le graphique du testeur est le suivant, tous les ticks sont M1, dépôt de départ 5000, mais le drawdown montre 62% (3325), il n'est évidemment pas sur le graphique. Un écart ?

Est-ce la qualité de la modélisation ? Comment le testeur calcule-t-il ce drawdown ? S'il le calcule, pourquoi ne peut-on pas le voir sur la courbe des capitaux propres ?



 
Aleksey Mavrin:

S'il la calcule, pourquoi n'apparaît-elle pas sur la courbe des capitaux propres ?

MT4 n'affiche pas la ligne verte d'équité tant qu'un ordre n'est pas clôturé.

Aleksey Mavrin:

Le taux de prélèvement indique 62% (3325), alors qu'il n'apparaît évidemment pas sur le graphique. Discordance ?

Le testeur calcule le drawdown en fonction de l'équité, mais par rapport à l'ordre avec le drawdown maximum, c'est-à-dire que si vous aviez un ordre ouvert dans le testeur et que vous en avez fait la moyenne, votre équité totale aurait pu être en plus, mais l'ordre le plus déficitaire était en gros drawdown à un certain moment du test.


HH : La qualité de la modélisation est très faible, vous testez le TS sur tous les ticks, mais un très grand TF est choisi pour le testhttps://www.mql5.com/ru/articles/1486.

 
Igor Makanu:

MT4 n'affiche pas la ligne verte d'équité tant qu'un ordre n'est pas fermé, dès qu'il est fermé, la ligne verte apparaît (MT5 n'a pas cet inconvénient).

Le testeur prend en compte le drawdown sur les fonds propres, mais par rapport à l'ordre avec un drawdown maximum, c'est-à-dire que vous pouvez avoir eu un ordre ouvert dans le testeur et vous avez fait une moyenne, vos fonds propres totaux peuvent avoir été dans les +, mais l'ordre le plus déficitaire était à un certain moment du test dans un grand déficit


ZS : la qualité de la simulation est très faible, vous testez le TS sur tous les ticks, mais un très grand TF a été choisi pour le testhttps://www.mql5.com/ru/articles/1486.

C'est ça, la moyenne. C'est plus clair maintenant, merci beaucoup ! La seule chose à propos de la ligne d'équité est.

J'ai analysé son graphique de trading (je veux dire visualiseur) en grille telle qu'elle est, c'est-à-dire qu'il a des drawdowns très fréquents et que la ligne d'équité sur le graphique ne le reflète pas, par exemple ici

trade 2018 Dec 04. trade 1238, sur le graphique c'est près de la deuxième à partir de la fin ligne verticale en pointillés sous laquelle le numéro de trade est 1251. Il n'y a aucune trace d'un quelconque retrait sur la ligne verte des actions.

C'est-à-dire qu'on ne sait toujours pas comment il est dessiné, mais j'en conclus qu'il est impossible de s'y fier et que nous devrions cesser d'utiliser MT5).

R.S. Je ne sais pas pourquoi la qualité de la simulation est si mauvaise, TF est M1, tous les ticks.


 
Aleksey Mavrin:

C'est ça, la moyenne. Cela a plus de sens maintenant, merci beaucoup ! La seule chose à propos de la ligne d'équité est.

J'ai analysé son graphique de trading (je veux dire le visualiseur) en grille telle qu'elle est, c'est-à-dire qu'il a des drawdowns très fréquents, et la ligne d'équité sur le graphique ne le reflète pas, par exemple ici

trade 2018 04 décembre, trade 1238, sur le graphique c'est près de la deuxième à partir de la fin ligne verticale en pointillés sous laquelle le numéro de trade est 1251. Il n'y a aucune trace d'un quelconque retrait sur la ligne verte des actions.

C'est-à-dire qu'on ne sait toujours pas comment il est dessiné, mais j'en conclus qu'il est impossible de lui faire confiance et qu'il devrait être fait sur MT5).

R.S. Je ne sais pas pourquoi la qualité de la simulation est si mauvaise, TF est M1, tous les ticks.


Le testeur MetaTrader 4 est très inférieur au testeur MetaTrader 5. Il ne peut pas afficher les fonds jusqu'à ce que l'opération soit clôturée - il ne les affiche qu'au moment de la prise de bénéfices/pertes. Dans votre image, toutes les positions courtes sont fermées en une fois, c'est pourquoi il n'y a pas de ligne d'équité entre l'ouverture et la fermeture dans le rapport. Si vous aviez fermé au moins une position entre l'ouverture et lafermeture des positions sur votre capture d'écran, le drawdown de l'équité que vous aviez au moment de la fermeture serait reflété dans votre rapport. En d'autres termes, le rapport ferait apparaître deux prélèvements - sur le bilan, du fait de la clôture d'une position avec une perte, et sur les fonds - du fait du prélèvement sur les fonds actuels dû à la perte flottante actuelle sur les fonds de toutes les positions ouvertes.

 
Aleksey Mavrin:

La façon dont il est dessiné n'est toujours pas claire, mais j'en conclus qu'il n'y a aucun moyen de s'y fier et que nous devrions rejeter la faute sur MT5).

vous pouvez faire confiance, mais vous devez lire le rapport complet du testeur

ajouter votre estimation du drawdown au code et l'afficher dans le journal dans OnDeinit(), si vous parlez de la façon de vérifier le testeur dans le calcul du drawdown maximum, alors quelque chose comme ceci

double minOrderProfit = 0.0;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Print("minOrderProfit = ",minOrderProfit);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) minOrderProfit = fmin(minOrderProfit,OrderProfit());
   }

// основной код

   
  }
//+------------------------------------------------------------------+


ZS : pas vérifié, mais cela devrait fonctionner.

 
Igor Makanu:

vous pouvez faire confiance, mais vous devez lire l'intégralité du rapport du testeur

ajouter votre estimation du drawdown au code et l'afficher dans le journal dans OnDeinit(), si nous parlons de la façon de vérifier le testeur dans le calcul du drawdown maximum, alors quelque chose comme ceci


ZS : pas vérifié, mais cela devrait fonctionner.

Je l'ai, merci. Je collecte toutes les statistiques dans mes EAs et pour le testeur-optimiseur en général, je compte les coefficients de sharps et autres, la volatilité et le DD, etc. quotidiennement, mensuellement, au total, bien sûr, tout ce que je peux.

Et ceci était une expérience avec un robot de Market, je l'ai mis à l'épreuve, car je sais qu'un tel graphique de courbe ne peut pas exister avec de tels méga-profits. J'étais convaincu d'avoir raison, c'est-à-dire à cause de la façon dont la courbe d'équité est affichée dans MT4.

Je me suis assuré d'avoir raison, à cause de la façon dont la courbe d'équité est affichée dans MT4, une mauvaise évaluation est faite des capacités du produit (si vous regardez le graphique de trading), alors que les graphiques se baladent sur le marché, vous comprenez le message ? :) s.s. ils vendent de la merde aux gens

 

Bon après-midi.

J'ai écrit un indicateur mais je m'aperçois qu'il y a une erreur ! !! Question à la ligne horizontale rouge (depuis le début de la session de jour).

J'ai essayé de l'utiliser pour une raison quelconque, mais il n'a pas fonctionné correctement dans les conseillers experts etje ne pense pas avoir réussi à le faire. Et il ne jure que par l'entrée dans les EA.

(2019.12.19 11:25:31.532 Jour de la session (EURUSDrfd,H1) array out of range in 'Session Day.mq5' (144,41)

L'aide de la salle...

Merci d'avance pour le conseil !


PS

LIGNE ROUGE direction (ouverture de la session) est DROITE, d'aujourd'hui à hier !!!!!!!

//+------------------------------------------------------------------+
//|                                                  Session Day.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   2
//---- plot ColorCandles
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  White,Blue,Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_label1  "Open;High;Low;Close"
//----
#property indicator_type2   DRAW_LINE
#property indicator_color2  Red
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3
#property indicator_label2  "Line open session"
//-----
input int     StartCandle = 100;         //Кол-во свечек для расчета средней
input int     StartBarDay = 0;           //Час начала торгового дня
input int     BarSession1 = 10;          //Чвс Открытия дневной сессии
input int     BarSession2 = 19;          //Чвс Закрытия дневной сессии
input bool    LevelOpenSession = true;   //Уровень открытия сессии дня
//---
double ExtOpenBuffer[];
double ExtHighBuffer[];
double ExtLowBuffer[];
double ExtCloseBuffer[];
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtOpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtHighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ExtLowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,ExtCloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,ExtBuffer,INDICATOR_DATA);
//--- установим цвет контура и теней
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrWhite);
//--- установим цвет тела для бычьей свечи
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrBlue);
//--- установим цвет тела для медвежьей свечи
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
   if(Period()<PERIOD_H4)
      IndicatorSetString(INDICATOR_SHORTNAME,"Session Day \nOpen session: "+string(BarSession1)+" hour \nClose session: "+string(BarSession2)+" hour");
   else
      IndicatorSetString(INDICATOR_SHORTNAME,"Session Day");
   int bars=iBars(NULL,_Period);
   for(int b=0; b<5; b++)
      PlotIndexSetInteger(b,PLOT_DRAW_BEGIN,bars-StartCandle);
  }
//+------------------------------------------------------------------+
//| 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 i;
   if(rates_total<24)
      return(0);
   MqlDateTime tm;
//----
   if(prev_calculated==0)
     {
      ArrayInitialize(ExtOpenBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtHighBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtCloseBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtBuffer,EMPTY_VALUE);
      i=0;
     }
   else
      i=prev_calculated-1;
//----
   while(i<rates_total && !IsStopped())
     {
      TimeToStruct(time[i],tm);
      if(Period()==PERIOD_MN1 && (tm.mon==4 || tm.mon==8 || tm.mon==12))
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_W1 && tm.mon>=1 && tm.mon<=12 && tm.day>=1 && tm.day<8)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_D1 && tm.day_of_week==1)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_H4 && tm.hour==StartBarDay && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()<=PERIOD_H1 && tm.hour==BarSession1 && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()<=PERIOD_H1 && tm.hour==BarSession2 && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }


                     ПРОБЛЕМА !!!!!
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      if(LevelOpenSession==true && Period()==PERIOD_H1 && tm.hour==BarSession1 && tm.min==0)
         for(int j=0; j<24; j++)
           {
            ExtBuffer[i-j]=open[i];
            if(ExtBuffer[i-j]!=ExtBuffer[i-j-1])
               ExtBuffer[i-j-1]=EMPTY_VALUE;
           }
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      //---
      i++;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+




 
kopeyka2:

Bon après-midi.

J'ai écrit un indicateur mais je m'aperçois qu'il y a une erreur ! !! Question à la ligne horizontale rouge (depuis le début de la session de jour).

J'ai essayé de l'utiliser pour une raison quelconque, mais il n'a pas fonctionné correctement dans les conseillers experts et je ne pense pas avoir réussi à le faire. Et il ne jure que par l'entrée dans les EA.

(2019.12.19 11:25:31.532 Jour de la session (EURUSDrfd,H1) array out of range in 'Session Day.mq5' (144,41)


 ExtBuffer[i-j]=open[i];
            if(ExtBuffer[i-j]!=ExtBuffer[i-j-1])
               ExtBuffer[i-j-1]=EMPTY_VALUE;

à ce stade, à un moment donné, vous accédez à un indice négatif du tableau. vérifiez la mise en place et la vérification de toutes les conditions limites pour i, j

 
Artyom Trishkin:

Le testeur de MetaTrader 4 est considérablement inférieur à celui de MetaTrader 5. Il ne peut pas afficher les fonds jusqu'à ce que l'opération soit clôturée - il ne les affiche qu'au moment de la prise de bénéfices/pertes. Dans votre image, toutes les positions courtes sont fermées en une fois, c'est pourquoi il n'y a pas de ligne d'équité entre l'ouverture et la fermeture dans le rapport. Si vous aviez fermé au moins une position entre l'ouverture et la fermeture des positions sur votre capture d'écran, le drawdown de l'équité que vous aviez au moment de la fermeture serait reflété dans votre rapport. En d'autres termes, le rapport ferait apparaître deux prélèvements - sur le bilan, du fait de la clôture d'une position avec une perte, et sur les fonds - du fait du prélèvement sur les fonds actuels dû à la perte flottante actuelle sur les fonds de toutes les positions ouvertes.

C'est une description très claire, merci. Je n'ai pas remarqué le message au début pour une raison quelconque(

Et une question alors) - Demander à l'intérieur des fonctions du testeur des informations sur l'état du compte comme AccountEquity, etc. - il donne une image correcte, que certaines positions soient fermées ou non ?

Par exemple, si des transactions à long terme sont ouvertes et que la baisse du capital est enregistrée chaque jour, le testeur ne trichera pas ?