Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1025

 

Potete consigliarmi un corretto zig-zag, per favore... Perché sto usando uno di questi e a volte diventa molto traballante...


 

Per favore ditemi, non capisco bene - nel grafico del tester è il seguente, tutti i ticks sono M1, deposito iniziale 5000 ma il drawdown mostra 62% (3325), ovviamente non è sul grafico. Una discrepanza?

È la qualità della modellazione? Come fa il tester a calcolare questo prelievo? Se lo calcola, perché non si vede sulla curva dell'equity?



 
Aleksey Mavrin:

Se lo calcola, perché non appare sulla curva dell'equity?

MT4 non mostra la linea verde dell'equity fino a quando un ordine non viene chiuso.

Aleksey Mavrin:

Il tasso di prelievo mostra il 62% (3325), mentre ovviamente non è mostrato sul grafico. Discrepanza?

Il tester calcola il drawdown in base all'equity, ma relativamente all'ordine con il drawdown massimo, cioè forse avevi un ordine aperto nel tester e hai fatto la media, il tuo equity totale potrebbe essere stato in più, ma l'ordine più in perdita era in grande drawdown in un certo momento del test


HH: La qualità della modellazione è molto bassa, state testando il TS su tutti i tick, ma un TF molto grande è scelto per il testhttps://www.mql5.com/ru/articles/1486

 
Igor Makanu:

MT4 non mostra la linea verde delle azioni fino a quando un ordine non viene chiuso, non appena viene chiuso, la linea verde apparirà (MT5 non ha questo inconveniente).

Il tester considera il drawdown sul capitale, ma relativo all'ordine con un drawdown massimo, cioè, si può avere un ordine aperto nel tester e si è fatto una media, il vostro capitale totale può essere stato nel +, ma l'ordine più in perdita era in un certo momento del test in un grande deficit


ZS: la qualità della simulazione è molto bassa, si sta testando il TS su tutti i tick, ma è stato scelto un TF molto grande per il testhttps://www.mql5.com/ru/articles/1486

Esatto, il mediatore. Ora è più chiaro, grazie mille! L'unica cosa è la linea di equità.

Ho analizzato il suo grafico di trading (voglio dire visualizer) a griglia come è, cioè ha drawdown molto frequenti e la linea di equity sul grafico non riflette questo, per esempio qui

trade 2018 Dec 04. trade 1238, sul grafico questo è vicino al secondo dalla fine linea tratteggiata verticale sotto la quale il numero di trade è 1251. Non c'è alcun accenno di drawdown sulla linea verde dell'equity.

Cioè non è ancora chiaro come viene disegnato, ma concludo che è impossibile fidarsi e dovremmo smettere di usare MT5)

R.S. Non so perché la qualità della simulazione è così cattiva, TF è M1, tutti i tick.


 
Aleksey Mavrin:

Esatto, il mediatore. Ora ha più senso, grazie mille! L'unica cosa è la linea di equità.

Ho analizzato il suo grafico di trading (voglio dire visualizer) a griglia come è, cioè ha drawdown molto frequenti, e la linea di equity sul grafico non riflette questo, per esempio qui

trade 2018 December 04. trade 1238, sul grafico questo è vicino al secondo dalla fine linea tratteggiata verticale sotto la quale il numero di trade è 1251. Non c'è alcun accenno di drawdown sulla linea verde dell'equity.

Cioè non è ancora chiaro come viene disegnato, ma concludo che è impossibile fidarsi e dovrebbe essere fatto su MT5)

R.S. Non so perché la qualità della simulazione è così cattiva, TF è M1, tutti i tick.


Il tester di MetaTrader 4 è molto inferiore a quello di MetaTrader 5. Non può mostrare i fondi fino a quando qualcosa viene chiuso - li mostra solo al momento della presa di profitto/perdita. Nella tua immagine tutte le posizioni corte sono chiuse in una volta sola, ecco perché non c'è una linea di capitale tra l'apertura e la chiusura nel rapporto. Se avessi chiuso almeno una posizione tra l'apertura e lachiusura delle posizioni nel tuo screenshot, il drawdown del capitale che avevi al momento della chiusura si rifletterebbe nel tuo report. Cioè, il rapporto mostrerebbe due prelievi - sul bilancio dalla chiusura di una posizione con una perdita, e sui fondi - dal prelievo di fondi correnti a causa della perdita corrente fluttuante sui fondi di tutte le posizioni aperte.

 
Aleksey Mavrin:

Cioè non è ancora chiaro come è disegnato, ma concludo che non c'è modo di fidarsi e dovremmo dare la colpa a MT5)

di cui ci si può fidare, ma è necessario leggere l'intero rapporto del tester

aggiungete la vostra stima del drawdown al codice e mostratela nel log in OnDeinit(), se state parlando di come controllare il tester nel calcolo del drawdown massimo, allora qualcosa come questo

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: non controllato, ma dovrebbe funzionare

 
Igor Makanu:

di cui ci si può fidare, ma è necessario leggere l'intero rapporto del tester

aggiungi la tua stima del drawdown al codice e inviala al log in OnDeinit(), se stiamo parlando di come controllare il tester nel calcolo del drawdown massimo, allora qualcosa del genere


ZS: non controllato, ma dovrebbe funzionare

Ho capito, grazie. Sto raccogliendo tutte le statistiche nei miei EA e per il tester-ottimizzatore in generale, sto contando i coefficienti sharps e altri, volatilità e DD, ecc. giornalmente, mensilmente, in totale, ovviamente, tutto quello che posso.

E questo era un esperimento con un robot di Market, l'ho messo a controllare, perché so che un grafico con una tale curva non può esistere con tali mega-profitti. Ero convinto di avere ragione, cioè a causa del modo in cui la curva dell'equity viene visualizzata in MT4

Ho fatto in modo di avere ragione, a causa del modo in cui la curva dell'equity viene visualizzata in MT4, viene fatta una valutazione sbagliata delle capacità del prodotto (se si guarda il grafico di trading), mentre i grafici stanno frugando nel mercato, si ottiene il messaggio? :) s.s. vendono merda alla gente

 

Buon pomeriggio.

Ho scritto un indicatore ma mi rendo conto che c'è un errore!!! Domanda alla linea orizzontale rossa (dall'inizio della sessione del giorno).

Ho provato ad usarlo per qualche motivo, ma non ha funzionato correttamente in expert advisor e non credodi averlo fatto bene. E giura sulla voce in EAs.

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

Aiuto dalla sala...

Grazie in anticipo per il suggerimento!


PS

La direzione della LINEA ROSSA (apertura della sessione) è DESTRA, da oggi a ieri!!!!!!!

//+------------------------------------------------------------------+
//|                                                  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:

Buon pomeriggio.

Ho scritto un indicatore ma mi rendo conto che c'è un errore!!! Domanda alla linea orizzontale rossa (dall'inizio della sessione del giorno).

Ho provato ad usarlo per qualche motivo, ma non ha funzionato correttamente in expert advisor e non credo di averlo fatto bene. E giura sulla voce in EAs.

(2019.12.19 11:25:31.532 Session Day (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;

a questo punto, ad un certo punto, si accede ad un indice di array negativo. controllare l'impostazione e la verifica di tutte le condizioni al contorno per i, j

 
Artyom Trishkin:

Il tester di MetaTrader 4 è notevolmente inferiore a quello di MetaTrader 5. Non può mostrare i fondi fino a quando qualcosa viene chiuso - li mostra solo al momento della presa di profitto/perdita. Nella tua immagine tutte le posizioni corte sono chiuse in una volta sola, ecco perché non c'è una linea di capitale tra l'apertura e la chiusura nel rapporto. Se avessi chiuso almeno una posizione tra l'apertura e la chiusura delle posizioni nel tuo screenshot, il drawdown del capitale che avevi al momento della chiusura si rifletterebbe nel tuo report. Cioè, il rapporto mostrerebbe due prelievi - sul bilancio dalla chiusura di una posizione con una perdita, e sui fondi - dal prelievo di fondi correnti a causa della perdita corrente fluttuante sui fondi di tutte le posizioni aperte.

È una descrizione molto chiara, grazie. Non ho notato il post all'inizio per qualche motivo(

E una domanda poi) - Richiedere all'interno delle funzioni del tester delle informazioni sullo stato del conto come AccountEquity, ecc. - dà un'immagine corretta indipendentemente dal fatto che qualche posizione sia chiusa o meno?

Per esempio, se si aprono trade a lungo termine e si registra il drawdown delle azioni ogni giorno, il tester non barerà?