Discussione: Chiarimento funzione GlobalVar
-
31-08-14, 14:00 #1
- Data Registrazione
- Dec 2009
- Messaggi
- 813
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
Questo è lo script per il chart a 30 minuti
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
SET PLOT1 = GetGlobalVar(1)
-
01-09-14, 10:06 #2
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
-
01-09-14, 12:08 #3
- Data Registrazione
- Dec 2009
- Messaggi
- 813
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?
-
01-09-14, 13:57 #4
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:
# 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
# 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
-
24-09-14, 00:12 #5
- Data Registrazione
- Dec 2009
- Messaggi
- 813
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)
Mentre questo è il valore ufficiale corretto (Zs=2.19)
Questo è il codice che ho utilizzato per calcolare lo Z-Score totale se qualcuno è così gentile da dirmi dove sbaglio ringrazio in anticipo...
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.Ultima modifica di CIVT; 24-09-14 alle 06:15
-
24-09-14, 09:00 #6
-
25-09-14, 08:48 #7
- Data Registrazione
- Dec 2009
- Messaggi
- 813
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?
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!Ultima modifica di CIVT; 25-09-14 alle 08:54
-
25-09-14, 11:54 #8
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
-
25-09-14, 15:02 #9
- Data Registrazione
- Dec 2009
- Messaggi
- 813
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
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
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
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
A questo punto dopo la telefonata a casa chiederei l'aiuto del pubblico!
-
25-09-14, 15:22 #10
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
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 ...