Announcement

Collapse
No announcement yet.

Come visualizzare l'equity line di un backtest nella finestra del grafico?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Come visualizzare l'equity line di un backtest nella finestra del grafico?

    Ciao a tutti,
    vorrei tracciare l'equity line durante un backtest di un EA nella stessa finestra del grafico (o in quella separata di un indicatore), in modo che sia visualizzata nella stessa scala temporale. In questo modo spero diventi più agevole fare delle comparazioni tra l'andamento dell'equity e vari indicatori.
    Ho trovato questo metodo, ma a me non funziona: https://www.mql5.com/en/articles/1487
    Qualcuno sa come fare?


    #2
    Il codice del link che hai postato funziona bene e sembra fare proprio quello che vuoi te.
    Se non riesci a farlo funzionare probabilmente stai sbagliando qualcosa.

    Il codice è scritto con la vecchia sintassi dell'MQL4 ma funziona comunque con l'MQL4 attuale.

    Questa parte di codice va all'interno della OnTick() dell'EA:
    Code:
    GlobalVariableSet("vGrafBalance",AccountBalance());
    GlobalVariableSet("vGrafEquity",AccountEquity());
    In teoria andrebbe messo tra le prime istruzioni della funzione OnTick().

    Quest'altro codice va invece all'interno della OnCalculate() dell'indicatore:
    Code:
    balance[0]=GlobalVariableGet("vGrafBalance");
    equity[0]=GlobalVariableGet("vGrafEquity");
    Lo do per scontato ma ricorda ovviamente di inizializzare i 2 buffer dell'indicatore.

    In definitiva l'algoritmo vero e proprio sono solo queste 4 righe di codice.
    Skype: cadddami

    Comment


      #3
      Quando dici di inizializzare i buffer ti riferisci alle istruzioni SetIndexBuffer o sto sbagliando?

      Grazie caddami!


      Questo è il codice dell'indicatore:

      Code:
      #property strict
      #property indicator_separate_window
      #property indicator_buffers 2
      #property indicator_color1 Blue
      #property indicator_color2 Red
      
      double balance[], equity[];
      
      
      //+------------------------------------------------------------------+
      //| Custom indicator initialization function                         |
      //+------------------------------------------------------------------+
      int OnInit()
        {
          IndicatorShortName( "vGrafBalance&Equity" );
          IndicatorDigits( 2 );
      
          SetIndexStyle( 0, DRAW_LINE );
          SetIndexBuffer( 0, balance );
          SetIndexLabel( 0, "Balance" );
      
          SetIndexStyle( 1, DRAW_LINE );
          SetIndexBuffer( 1, equity );
          SetIndexLabel( 1, "Equity" );
          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[])
        {
          balance[0] = GlobalVariableGet( "vGrafBalance" );
          equity [0] = GlobalVariableGet( "vGrafEquity"  );
          return(0);
        }

      Comment


        #4
        Sì, giusto.
        Il codice che hai postato sembra essere giusto.
        Skype: cadddami

        Comment


          #5
          Originally posted by cadddami View Post
          Sì, giusto.
          Il codice che hai postato sembra essere giusto.
          Allora forse sbaglio qualcosa nel visualizzare i risultati del backtest. Dopo averlo eseguito clicco su "Grafico aperto" e poi al grafico aggiungo l'indicatore (che apre una finestra separata). Ma la finestra dell'indicatore è vuota.

          Nell'EA ci sono le righe di codice:

          Code:
             GlobalVariableSet( "vGrafBalance", AccountBalance() );
             GlobalVariableSet( "vGrafEquity", AccountEquity() );
          Inoltre ho provato ad inserire anche, come verifica:

          Code:
             double temp = iCustom(Symbol(), Period(), "PT-Balance+Equity",1,0);
             Print ("temp: ", temp);
          ma la variabile temp risulta sempre pari a 0.

          Dove sbaglio?

          Comment


            #6
            Sbagli il procedimento.
            L'indicatore è fatto in modo che non disegni nel passato ma solo nel presente, ovvero la candela attuale.
            L'indicatore è complementare all'EA e insieme devono girare per forza in contemporanea.
            L'unico modo per farli funzionare in contemporanea in backtest è facendo un backtest "visuale" (lo dicono anche nei commenti in fondo alla pagina che hai linkato nel primo post).

            Quindi il procedimento giusto è:
            1) Apri un grafico a caso.
            2) Carichi l'indicatore sul grafico.
            3) Salvi il formato (template) del grafico con il nome "tester".
            4) Fai partire il backtest visuale.
            Skype: cadddami

            Comment


              #7
              Originally posted by cadddami View Post
              Sbagli il procedimento.
              L'indicatore è fatto in modo che non disegni nel passato ma solo nel presente, ovvero la candela attuale.
              L'indicatore è complementare all'EA e insieme devono girare per forza in contemporanea.
              L'unico modo per farli funzionare in contemporanea in backtest è facendo un backtest "visuale" (lo dicono anche nei commenti in fondo alla pagina che hai linkato nel primo post).

              Quindi il procedimento giusto è:
              1) Apri un grafico a caso.
              2) Carichi l'indicatore sul grafico.
              3) Salvi il formato (template) del grafico con il nome "tester".
              4) Fai partire il backtest visuale.
              Grazie mille caddami!!
              Mi mancava il salvataggio del template...
              Funziona.
              Peccato che in Metatrader ci sia un limite allo zoom "-": non riesco ad avere una visione d'insieme di tutti gli anni testati. Comunque meglio di niente!

              Comment

              Working...
              X