Chiarimento funzione GlobalVar

Collapse
X
 
  • Ora
  • Show
Clear All
new posts
  • CIVT
    Senior Member
    • Dec 2009
    • 813

    #1

    Chiarimento funzione GlobalVar

    Ciao ragazzi, come da manuale ho provato a creare un semplice indicatore che mi riporta la EMA a 30 minuti sul chart a 15 minunti ma a quanto sembra la lettura è corretta solo per l\'ultima barra disegnata perché analizzando lo storico non trovo corrispondenza. Cosa stò sbagliando?

    Allego screen che mostra la verifica del valore delle EMA alle 17:30 del 27/08/2014
    Click image for larger version

Name:	Screenshot 2014-08-31 13.24.37.jpg
Views:	1
Size:	115.8 KB
ID:	165094

    Questo è lo script per il chart a 30 minuti
    Codice:
    INPUTS: @price(CLOSE), @periods(14)
    
    
    SET EMA1 = EMA(@price, @periods)
    SetGlobalVar(1, EMA1)
    set PLOT1 = EMA1
    Questo per il chart a 15 minuti dove riporto la EMA a 30 minuti
    Codice:
    SET PLOT1 = GetGlobalVar(1)
  • Francario Massimiliano
    Administrator
    • Jul 2008
    • 1033

    #2
    Salve,

    Originariamente Scritto da CIVT
    Ciao ragazzi, come da manuale ho provato a creare un semplice indicatore che mi riporta la EMA a 30 minuti sul chart a 15 minunti ma a quanto sembra la lettura è corretta solo per l\'ultima barra disegnata perché analizzando lo storico non trovo corrispondenza. Cosa stò sbagliando?

    Allego screen che mostra la verifica del valore delle EMA alle 17:30 del 27/08/2014
    [ATTACH=CONFIG]16223[/ATTACH]

    ....
    Nell\'immagine allegata non noto alcuna anomalia, la curva della EMA a 30 minuti è esattamente uguale nei due chart.
    Le funzioni SetGlobalVar e GetGlobalVar NON trasformano in alcun modo i dati, cioè non applicano alcun raggruppamento o suddivisione per adattare i vettori ai diversi timeframe.

    Max Francario
    Manuale di beeTrader
    Manuale di Fiuto Beta

    Comment

    • CIVT
      Senior Member
      • Dec 2009
      • 813

      #3
      Originariamente Scritto da Francario Massimiliano
      Salve,



      Nell\'immagine allegata non noto alcuna anomalia, la curva della EMA a 30 minuti è esattamente uguale nei due chart.
      Le funzioni SetGlobalVar e GetGlobalVar NON trasformano in alcun modo i dati, cioè non applicano alcun raggruppamento o suddivisione per adattare i vettori ai diversi timeframe.

      Max Francario
      Grazie della risposta MAX, quindi non posso utilizzare questo sistema per fare backtest? Vorrei costruire uno script che mi permette di analizzare i BT utilizzando lo Z-Score di due titoli in overspread....Mi confermi invece che l\'ultima barra la posso utilizzare come segnale di ingresso/uscita all\'interno di un eventuale script? Se la risposta è affermativa dovrei lanciare due script in parallello per poter utilizzare il GetGlobalVar, eventualmente potresti suggerirmi come fare?

      Comment

      • Francario Massimiliano
        Administrator
        • Jul 2008
        • 1033

        #4
        Salve,
        Originariamente Scritto da CIVT
        Grazie della risposta MAX, quindi non posso utilizzare questo sistema per fare backtest? Vorrei costruire uno script che mi permette di analizzare i BT utilizzando lo Z-Score di due titoli in overspread....Mi confermi invece che l\'ultima barra la posso utilizzare come segnale di ingresso/uscita all\'interno di un eventuale script? Se la risposta è affermativa dovrei lanciare due script in parallello per poter utilizzare il GetGlobalVar, eventualmente potresti suggerirmi come fare?
        il backtest con GetGlobalVar funziona perfettamente nel caso si usino 2 chart su strumenti diversi ma con lo stesso timeframe.
        Per il backtest su timeframe diversi, bisogna considerare quanto scritto sopra, e cioè che le funzioni SetGlobalVar e GetGlobalVar non "trasformano" i dati in nessun modo per adattarli ai diversi timeframe. In questi casi, alcune volte è sufficiente usare un numero diverso di periodi nel calcolo degli indicatori per ottenere lo stesso risultato.

        Per esempio, supponendo di avere un Chart a 5 minuti con applicato uno script come questo:
        Codice:
        # MioSegnale a 5 minuti
        MioSegnale = EMA(CLOSE, 10)) > CLOSE
        Se volessimo portare la variabile MioSegnale su un chart a 15 minuti, al posto di usare SetGlobalVar/GetGlobalVar (e dover di conseguenza avere 2 chart aperti), potremmo scrivere semplicemente
        Codice:
        # MioSegnale a 15 minuti
        MioSegnale = EMA(CLOSE, 30) > CLOSE
        ottenendo lo stesso risultato.
        La "traduzione" da un timeframe ad un altro di uno script non sempre è così semplice, ma nella maggior parte dei casi è alla portata di chiunque.

        In ogni caso, usando GetGlobalVar l\'ultimo valore è sempre corretto, cioè l\'utilizzo di SetGlobalVar/GetGlobalVar è sempre e comunque corretto in una Strategy in beeTrader.

        Le funzioni SetGlobalVar e GetGlobalVar si possono utilizzare per memorizzare più di un dato alla volta, cambiando il valore del parametro ID per distinguere i diversi valori. E\' quindi possibile usare anche più di 2 chart contemporaneamente ed avere segnali generati su uno di essi in base ai valori presenti in tutti gli altri.

        Max Francario
        Manuale di beeTrader
        Manuale di Fiuto Beta

        Comment

        • CIVT
          Senior Member
          • Dec 2009
          • 813

          #5
          Originariamente Scritto da Francario Massimiliano
          Salve,


          il backtest con GetGlobalVar funziona perfettamente nel caso si usino 2 chart su strumenti diversi ma con lo stesso timeframe.
          Per il backtest su timeframe diversi, bisogna considerare quanto scritto sopra, e cioè che le funzioni SetGlobalVar e GetGlobalVar non "trasformano" i dati in nessun modo per adattarli ai diversi timeframe. In questi casi, alcune volte è sufficiente usare un numero diverso di periodi nel calcolo degli indicatori per ottenere lo stesso risultato.

          Per esempio, supponendo di avere un Chart a 5 minuti con applicato uno script come questo:
          Codice:
          # MioSegnale a 5 minuti
          MioSegnale = EMA(CLOSE, 10)) > CLOSE
          Se volessimo portare la variabile MioSegnale su un chart a 15 minuti, al posto di usare SetGlobalVar/GetGlobalVar (e dover di conseguenza avere 2 chart aperti), potremmo scrivere semplicemente
          Codice:
          # MioSegnale a 15 minuti
          MioSegnale = EMA(CLOSE, 30) > CLOSE
          ottenendo lo stesso risultato.
          La "traduzione" da un timeframe ad un altro di uno script non sempre è così semplice, ma nella maggior parte dei casi è alla portata di chiunque.

          In ogni caso, usando GetGlobalVar l\'ultimo valore è sempre corretto, cioè l\'utilizzo di SetGlobalVar/GetGlobalVar è sempre e comunque corretto in una Strategy in beeTrader.

          Le funzioni SetGlobalVar e GetGlobalVar si possono utilizzare per memorizzare più di un dato alla volta, cambiando il valore del parametro ID per distinguere i diversi valori. E\' quindi possibile usare anche più di 2 chart contemporaneamente ed avere segnali generati su uno di essi in base ai valori presenti in tutti gli altri.

          Max Francario
          Grazie Max sei stato molto gentile però mi manca un ultimo passettino per arrivare a calcolare lo Z-score totale in modo corretto perchè vedo che non basta fare la semplice differenza dei due ZS singoli in quanto non mi trovo con il valore ufficiale calcolato!

          Questo è lo ZS totale calcolato per differenza dei due singoli Zs (Zs=2.86)
          Click image for larger version

Name:	ZS chart gvar.jpg
Views:	1
Size:	102.0 KB
ID:	156248

          Mentre questo è il valore ufficiale corretto (Zs=2.19)
          Click image for larger version

Name:	Tool.jpg
Views:	1
Size:	86.4 KB
ID:	156247

          Questo è il codice che ho utilizzato per calcolare lo Z-Score totale se qualcuno è così gentile da dirmi dove sbaglio ringrazio in anticipo...
          Codice:
          INPUTS: @ZsLow(-2), @ZsHigh(2), @zero(0.01)
          
          
          set PLOT1 =  GetGlobalVar(2) - GetGlobalVar(1)
          set plot2 = @ZsLow
          set plot3 = @ZsHigh
          SET PLOT4 = @zero
          p.s. x i matematici: Stando alla definizione di Z-Score ufficiale una alternativa può essere quella di calcolare lo Z-Score totale come la media (credo a 250 periodi) della differenza percentualizzata dei due titoli ed esprimerla in deviazioni standard sul grafico a 1500 barre.
          Last edited by CIVT; 24-09-14, 06:15.

          Comment

          • Cagalli Tiziano
            Senior Member
            • Dec 2007
            • 11252

            #6
            Originariamente Scritto da CIVT

            p.s. x i matematici: Stando alla definizione di Z-Score ufficiale una alternativa può essere quella di calcolare lo Z-Score totale come la media (credo a 250 periodi) della differenza percentualizzata dei due titoli ed esprimerla in deviazioni standard sul grafico a 1500 barre.
            Al primo passaggio trovi già la deviazione standard.
            Infatto il primo valore che trovi se diviso per la deviazione standard darà lo Z_Score
            ..se corri dietro a due lepri, non ne prendi nemmeno una.

            Comment

            • CIVT
              Senior Member
              • Dec 2009
              • 813

              #7
              Originariamente Scritto da Cagalli Tiziano
              Al primo passaggio trovi già la deviazione standard.
              Infatto il primo valore che trovi se diviso per la deviazione standard darà lo Z_Score
              Intendi dire che devo dividere la differenza dei due Z-score per la deviazione standard? Se la risposta è corretta (cosa che dubito) saresti così gentile da dirmi cosa ho sbagliato invece con il codice?

              Codice:
              INPUTS: @price(CLOSE), @periods(250), @deviations(2), @matype(SIMPLE)
              
              
              set ZG= GetGlobalVar(1) - GetGlobalVar(2)
              SET PLOT1 = ZG / StdDev(ZG, @periods, @deviations, @matype)
              set PLOT2 = -2
              set PLOT3 = +2
              SET PLOT4 = 0
              Grazie alle anime pie che vorranno aiutarmi!
              Last edited by CIVT; 25-09-14, 08:54.

              Comment

              • Francario Massimiliano
                Administrator
                • Jul 2008
                • 1033

                #8
                Salve,

                Originariamente Scritto da CIVT
                Intendi dire che devo dividere la differenza dei due Z-score per la deviazione standard? Se la risposta è corretta (cosa che dubito) saresti così gentile da dirmi cosa ho sbagliato invece con il codice?

                Codice:
                INPUTS: @price(CLOSE), @periods(250), @deviations(2), @matype(SIMPLE)
                
                
                set ZG= GetGlobalVar(1) - GetGlobalVar(2)
                SET PLOT1 = ZG / StdDev(ZG, @periods, @deviations, @matype)
                set PLOT2 = -2
                set PLOT3 = +2
                SET PLOT4 = 0
                Grazie alle anime pie che vorranno aiutarmi!
                se intende replicare il risultato dello Z-Score che trova nel modulo OverSpread, allora ci sono diversi passaggi da fare.
                Lo Z-Score nel modulo OverSpread è calcolato in questo modo:

                1. Calcolo del prezzo indicizzato dell\'asset A
                2. Calcolo del prezzo indicizzato dell\'asset B
                3. Calcolo dello spread, cioè risultato del punto 1 meno risultato del punto 2
                4. Calcolo dello Z-Score sul risultato del punto 3

                Max Francario
                Manuale di beeTrader
                Manuale di Fiuto Beta

                Comment

                • CIVT
                  Senior Member
                  • Dec 2009
                  • 813

                  #9
                  Originariamente Scritto da Francario Massimiliano
                  Salve,



                  se intende replicare il risultato dello Z-Score che trova nel modulo OverSpread, allora ci sono diversi passaggi da fare.
                  Lo Z-Score nel modulo OverSpread è calcolato in questo modo:

                  1. Calcolo del prezzo indicizzato dell\'asset A
                  2. Calcolo del prezzo indicizzato dell\'asset B
                  3. Calcolo dello spread, cioè risultato del punto 1 meno risultato del punto 2
                  4. Calcolo dello Z-Score sul risultato del punto 3

                  Max Francario
                  Ma per indicizzare un asset devo percentualizzarlo? Ti mostro quello ce ho fatto vediamo se mi stò avvicinando....

                  1. Calcolo del prezzo indicizzato dell\'asset A
                  Codice:
                  INPUTS: @periods(250)
                  SET PZERO = REF(CLOSE, @periods)
                  SET PERC = (100-CLOSE)/100*100
                  SetGlobalVar(1, PERC)
                  SET PLOT1 = PERC

                  2. Calcolo del prezzo indicizzato dell\'asset B
                  Codice:
                  INPUTS: @periods(250)
                  SET PZERO = REF(CLOSE, @periods)
                  SET PERC = (100-CLOSE)/100*100
                  SetGlobalVar(2, PERC)
                  SET PLOT1 = PERC
                  3. Calcolo dello spread, cioè risultato del punto 1 meno risultato del punto 2
                  4. Calcolo dello Z-Score sul risultato del punto 3
                  Codice:
                  INPUTS: @price(CLOSE), @periods(250), @deviations(2), @matype(SIMPLE)
                  set Diff = GetGlobalVar(2) - GetGlobalVar(1)
                  SET PLOT1 = ZScore(Diff, @periods)
                  set PLOT2 = -2
                  set PLOT3 = +2
                  SET PLOT4 = 0
                  Credo che manchi ancora qualcosa perchè vedo che non sono ancora sovrapponibile le due curve

                  Click image for larger version

Name:	ZS TOTALCattura.jpg
Views:	1
Size:	102.2 KB
ID:	156264

                  A questo punto dopo la telefonata a casa chiederei l\'aiuto del pubblico!

                  Comment

                  • Smash
                    Senior Member

                    • Feb 2012
                    • 351

                    #10
                    Originariamente Scritto da CIVT
                    Ma per indicizzare un asset devo percentualizzarlo? Ti mostro quello ce ho fatto vediamo se mi stò avvicinando....

                    1. Calcolo del prezzo indicizzato dell\'asset A
                    Codice:
                    INPUTS: @periods(250)
                    SET PZERO = REF(CLOSE, @periods)
                    SET PERC = (100-CLOSE)/100*100
                    SetGlobalVar(1, PERC)
                    SET PLOT1 = PERC

                    2. Calcolo del prezzo indicizzato dell\'asset B
                    Codice:
                    INPUTS: @periods(250)
                    SET PZERO = REF(CLOSE, @periods)
                    SET PERC = (100-CLOSE)/100*100
                    SetGlobalVar(2, PERC)
                    SET PLOT1 = PERC
                    3. Calcolo dello spread, cioè risultato del punto 1 meno risultato del punto 2
                    4. Calcolo dello Z-Score sul risultato del punto 3
                    Codice:
                    INPUTS: @price(CLOSE), @periods(250), @deviations(2), @matype(SIMPLE)
                    set Diff = GetGlobalVar(2) - GetGlobalVar(1)
                    SET PLOT1 = ZScore(Diff, @periods)
                    set PLOT2 = -2
                    set PLOT3 = +2
                    SET PLOT4 = 0
                    Credo che manchi ancora qualcosa perchè vedo che non sono ancora sovrapponibile le due curve

                    [ATTACH=CONFIG]16393[/ATTACH]

                    A questo punto dopo la telefonata a casa chiederei l\'aiuto del pubblico!

                    Ed ecco il pubblico!!!

                    Al punto 1 e 2 il vettore PZERO:

                    - dovrebbe essere un vettore costante, mentre così come lo hai calcolato è variabile
                    - credo che andrebbe determinato 1500 periodi indietro rispetto all\'ultimo valore (per cui ti serve un grafico contenente almeno 1500 dati)
                    - in più mi sembra che il vettore lo calcoli ma poi non lo utilizzi ...

                    Comment

                    • Francario Massimiliano
                      Administrator
                      • Jul 2008
                      • 1033

                      #11
                      Salve,
                      forse il calcolo del prezzo indicizzato non è corretto. La proporzione è:
                      PZERO : 100 = CLOSE : X
                      quindi
                      X = (CLOSE * 100) / PZERO
                      dove X è il valore di prezzo indicizzato.

                      Rimane comunque un\'altra differenza, sempre rispetto al modulo OverSpread, e sempre relativa al prezzo indicizzato. Nel modulo OverSpread il prezzo di partenza rimane sempre fisso a quello della prima barra di dati storici, non si sposta mai, è come se fosse il REF del CLOSE con periodo variabile.

                      Max Francario
                      Manuale di beeTrader
                      Manuale di Fiuto Beta

                      Comment

                      • CIVT
                        Senior Member
                        • Dec 2009
                        • 813

                        #12
                        Anche così funziona alla grande!!!!

                        Ringrazio dei suggerimenti ma senza stare ad impazzire troppo con costanti e calcoli vari se calcolo lo Z-Score totale come differenza dei due Z-Score singoli il risultato "anche se con qualche scostamento in eccesso" sembra sovrapponibile e soprattutto tradabile! C\'è da lavorarci un pochino ma anche così grezzo mostra un potenziale incredibile questo sistema!

                        Questa la sovraposizione con lo Z-score ufficiale
                        Click image for larger version

Name:	Screenshot 2014-09-25 22.28.09.jpg
Views:	1
Size:	119.0 KB
ID:	156267

                        Questo il trading system applicato
                        Click image for larger version

Name:	Screenshot 2014-09-25 22.11.09.jpg
Views:	1
Size:	145.5 KB
ID:	156268
                        Click image for larger version

Name:	Screenshot 2014-09-25 22.41.39.jpg
Views:	1
Size:	98.0 KB
ID:	156269

                        Comment

                        • CIVT
                          Senior Member
                          • Dec 2009
                          • 813

                          #13
                          Originariamente Scritto da Francario Massimiliano
                          Salve,
                          forse il calcolo del prezzo indicizzato non è corretto. La proporzione è:
                          PZERO : 100 = CLOSE : X
                          quindi
                          X = (CLOSE * 100) / PZERO
                          dove X è il valore di prezzo indicizzato.

                          Rimane comunque un\'altra differenza, sempre rispetto al modulo OverSpread, e sempre relativa al prezzo indicizzato. Nel modulo OverSpread il prezzo di partenza rimane sempre fisso a quello della prima barra di dati storici, non si sposta mai, è come se fosse il REF del CLOSE con periodo variabile.

                          Max Francario
                          Ciao infaticabile MAX! Contrariamente a quanto supponevo credo proprio che dovrò rimboccarmi le maniche e calcolare lo Z-Score con il tuo metodo perché vedo che il calcolo "semplificato" commette degli errori che non posso ritenere trascurabili....come puoi vedere da questo ennesimo confronto lo scostamento tra Overspread ufficiale e calcolato non è lieve, 2.7 contro 1.3 significa che stò introducendo un errore intorno al 50%!!!

                          Click image for larger version

Name:	NO_ZS.jpg
Views:	1
Size:	101.2 KB
ID:	156357

                          Tornando al metodo di calcolo che mi hai suggerito potresti darmi qualche info in più in modo che un comune mortale sia in grado di tradurlo in Easyscript? Come posso bloccare "X" ovvero il prezzo indicizzato a 1500 barre passate!!?!? Mi sa che qui ci vuole ancora l\'aiuto del nostro supereroe Smash!!!
                          Last edited by CIVT; 07-10-14, 12:26.

                          Comment

                          • fernatrade
                            Member

                            • Jul 2016
                            • 75

                            #14
                            Originariamente Scritto da Francario Massimiliano
                            Salve,


                            il backtest con GetGlobalVar funziona perfettamente nel caso si usino 2 chart su strumenti diversi ma con lo stesso timeframe.
                            Per il backtest su timeframe diversi, bisogna considerare quanto scritto sopra, e cioè che le funzioni SetGlobalVar e GetGlobalVar non "trasformano" i dati in nessun modo per adattarli ai diversi timeframe. In questi casi, alcune volte è sufficiente usare un numero diverso di periodi nel calcolo degli indicatori per ottenere lo stesso risultato.

                            Per esempio, supponendo di avere un Chart a 5 minuti con applicato uno script come questo:
                            Codice:
                            # MioSegnale a 5 minuti
                            MioSegnale = EMA(CLOSE, 10)) > CLOSE
                            Se volessimo portare la variabile MioSegnale su un chart a 15 minuti, al posto di usare SetGlobalVar/GetGlobalVar (e dover di conseguenza avere 2 chart aperti), potremmo scrivere semplicemente
                            Codice:
                            # MioSegnale a 15 minuti
                            MioSegnale = EMA(CLOSE, 30) > CLOSE
                            ottenendo lo stesso risultato.
                            La "traduzione" da un timeframe ad un altro di uno script non sempre è così semplice, ma nella maggior parte dei casi è alla portata di chiunque.

                            In ogni caso, usando GetGlobalVar l\'ultimo valore è sempre corretto, cioè l\'utilizzo di SetGlobalVar/GetGlobalVar è sempre e comunque corretto in una Strategy in beeTrader.

                            Le funzioni SetGlobalVar e GetGlobalVar si possono utilizzare per memorizzare più di un dato alla volta, cambiando il valore del parametro ID per distinguere i diversi valori. E\' quindi possibile usare anche più di 2 chart contemporaneamente ed avere segnali generati su uno di essi in base ai valori presenti in tutti gli altri.

                            Max Francario



                            Ciao Max


                            Nell\'esempio citato non riesco a vedere dove sia la variabile Timeframe

                            Grazie Ciao


                            Fernando

                            Comment

                            Working...