-
06-11-13, 02:32 #1
- Data Registrazione
- Sep 2013
- Località
- Monza
- Messaggi
- 186
Come funziona il vettoriale sull'ultima barra ?
Salve,
per cortesia vorrei capire meglio come funziona il vettoriale, in particolare sull'ultima barra.
Mi è chiaro che prima di passare alla linea di codice successiva ogni linea viene calcolata per tutte
le barre presenti sul grafico.
Ma arrivati all'ultima barra, ogni volta che arriva un nuovo tick che succede ?
Viene calcolato e aggiornato solo l'ultimo valore di ogni vettore ?
-
Inoltre, supponendo di aver creato il nostro vettore di periodo dinamico e di poterlo in futuro passare, per esempio,
alla funzione SuperTrend, come sarebbe utilizzato da quest'ultima ?
In teoria, stando al funzionamento di cui sopra, alla funzione SuperTrend dovrebbe essere passato solo l'ultimo
valore del vettore per quanto riguarda le barre storiche, (giusto ?)
e l'ultimo valore calcolato tick by tick nella fase di realtime.
Questo dovrebbe portare a dei valori di backtest completamente diversi da quelli realtime
Il ragionamento è corretto ???
Sicuramente un motivo in più per creare un playback almeno barra per barra.
Saluti
Massimo
-
06-11-13, 11:47 #2
Salve Massimo,
per prima cosa, dalla attuale release 0.8.10.17, tutte le funzioni di analisi tecnica di EasyScript sono in grado di accettare anche vettori o variabili per i parametri relativi a periodi di tempo.
All'arrivo di un nuovo tick vengono ricalcolati tutti i valori dall'inizio, come se fosse la prima volta che quel calcolo viene eseguito. In termini di implementazione, questo ci consente di avere un unico insieme di funzioni di calcolo, al posto di averne 2, una per il calcolo iniziale ed una per il solo tick real-time. In termini di performance, la differenza è comunque ridotta data la natura del calcolo relativo esclusivamente all'ultima barra, che è inerentemente seriale e richiede comunque di accedere ad un hash-map con i dati calcolati in precedenza.
Max Francario
-
06-11-13, 13:25 #3
- Data Registrazione
- Sep 2013
- Località
- Monza
- Messaggi
- 186
Salve Max,
ho provato con il seguente esempio, ma purtroppo non funziona.
Mi scrive:
Error: "A" is an invalid value for "periods" argument of SUPERTREND.
Ho sbagliato qualcosa ?
12345678910111213141516171819202122232425262728293031# FUNZIONE PERIODO_DINAMICO
#
INPUTS
:
@MaxPeriodo(60), @MinPeriodo(5), @PeriodoVolatilita(30)
SET
HistVol =
SDV
(
CLOSE
,
@PeriodoVolatilita , 1, SIMPLE)
SET
YestHistVol =
REF
(HistVol,
1
)
SET
DeltaHistVol1 = (HistVol -
REF
(HistVol,
1
)) / HistVol
SET
DeltaHistVol =
MINOF
(DeltaHistVol1,
0.1
)
SET
vPeriodoDinamico = BARLOOP (
20
,
1
,
MULTIPLY
, (
1
- DeltaHistVol),
@MinPeriodo, @MaxPeriodo)
SET
PERIODO_DINAMICO = FLOOR(vPeriodoDinamico)
1234567891011121314151617# Indicatore SUPERTREND DINAMICO
#
INPUTS
:
@MaxPeriodo(60), @MinPeriodo(5), @PeriodoVolatilita(30)
SET
A = PERIODO_DINAMICO(
@MaxPeriodo, @MinPeriodo, @PeriodoVolatilita)
SET
B =
SuperTrend
( A ,
5
)
SET
PLOT1
= B
-
06-11-13, 13:37 #4
- Data Registrazione
- Sep 2013
- Località
- Monza
- Messaggi
- 186
Tenendo buono l'esempio di codice del post precedente, e supponendo che sia corretto, la mia domanda era: -Ad ogni tick cosa succede ?
Nell'indicatore SET A = PERIODO_DINAMICO(...) calcola il valore del vettore A per tutti i valori di barra,
e nell'ultima barra calcola il valore per l'ultimo tick.
Quindi arriviamo alla line successiva di codice dove viene passato il vettore A al SUPERTREND.
Che valore viene passato ?
Per la barra 1 il valore 1, per la barra 2 il valore 2, e così via fino all'ultimo tick,
oppure viene passato solo l'ultimo valore calcolato sull'ultimo tick ?
E' questo che vorrei capire !!!
Grazie
Saluti
Massimo
-
06-11-13, 13:58 #5
Salve Massimo,
a livello di sintassi no.
Attenzione però che il vettore che viene passato alla funzione SuperTrend deve contenere dei valori validi per il calcolo.
Nel caso specifico, il parametro Periods deve contenere valori non inferiori a 2 e non maggiori del numero massimo di barre disponibili, altrimenti compare comunque quel messaggio di errore.
Specialmente durante la verifica di uno script, è possibile incorrere in situazioni non previste, ad esempio ottenere uno zero dove invece ci si aspetta un valore positivo. Infatti in questa fase vengono generate delle serie storiche fittizie alle quali viene applicato lo script al solo scopo di verificarne la correttezza, e queste potrebbero portare lo script alla condizione di errore che ha incontrato.
Max Francario
-
06-11-13, 14:03 #6
Salve Massimo,
ogni barra ha il suo valore: per il calcolo della funzione SuperTrend sulla barra 10 viene utilizzato il valore di A per quella stessa barra se c'è, altrimenti viene utilizzato il valore finale di A.
Per fare un esempio, se scrivo:
per le prime 21 barre non esiste un valore valido per il vettore A. Pertanto, se avessi questa riga:1SET
A =
EMA
(
CLOSE
,
21
)
per le prime 21 barre, il calcolo del supertrend userebbe il valore finale di A, dalla 22° in poi andrebbe ad usare i valori di A barra per barra.1SET
B =
SUPERTREND
(A,
5
)
Max Francario
-
06-11-13, 14:42 #7
Ciao maxmax68, secondo me hai ridondato troppo la variabile A con l'aggiunta delle parentesi per cui andrebbe scritta semplicemente in questo modo:
SET A = PERIODO_DINAMICO
così facendo sembra funzionare e l'indicatore viene correttamente plottato sul grafico
quindi il codice completo diventa :
123456789101112131415161718192021222324252627282930313233343536373839INPUTS
:
@MaxPeriodo(60), @MinPeriodo(5), @PeriodoVolatilita(30)
SET
HistVol =
SDV
(
CLOSE
,
@PeriodoVolatilita , 1, SIMPLE)
SET
YestHistVol =
REF
(HistVol,
1
)
SET
DeltaHistVol1 = (HistVol -
REF
(HistVol,
1
)) / HistVol
SET
DeltaHistVol =
MINOF
(DeltaHistVol1,
0.1
)
SET
vPeriodoDinamico = BARLOOP (
20
,
1
,
MULTIPLY
, (
1
- DeltaHistVol),
@MinPeriodo, @MaxPeriodo)
SET
PERIODO_DINAMICO = FLOOR(vPeriodoDinamico)
SET
A = PERIODO_DINAMICO
SET
B =
SuperTrend
( A ,
5
)
SET
PLOT1
= B
SET
PLOTCOLOR1
=
IF
(
PLOT1
>
CLOSE
,
COLOR_LIGHT_RED
,
COLOR_LIGHT_GREEN
)
ApoUltima modifica di Apocalips; 06-11-13 alle 14:48
....non si desidera ciò che è facile ottenere (Ovidio)....
-
06-11-13, 15:09 #8
- Data Registrazione
- Sep 2013
- Località
- Monza
- Messaggi
- 186
ogni barra ha il suo valore: per il calcolo della funzione SuperTrend sulla barra 10 viene utilizzato il valore di A per quella stessa barra se c'è, altrimenti viene utilizzato il valore finale di A.
Ottimo. Stasera provo.
A proposito di Supertrend ne approfitto per richiederne un completamento.
Manca la possibilità di modificare il multiplo di atr che viene addizionato o sottratto alla media !!!
Inoltre sarebbe da correggere @strenght in @strength per gli anglofoni.
Saluti
Massimo
-
06-11-13, 20:16 #9
- Data Registrazione
- Sep 2013
- Località
- Monza
- Messaggi
- 186
Ciao Apo,
credo che il problema sia quello spiegato da Max Francario :
Attenzione però che il vettore che viene passato alla funzione SuperTrend deve contenere dei valori validi per il calcolo.
Nel caso specifico, il parametro Periods deve contenere valori non inferiori a 2 e non maggiori del numero massimo di barre disponibili, altrimenti compare comunque quel messaggio di errore.
Specialmente durante la verifica di uno script, è possibile incorrere in situazioni non previste, ad esempio ottenere uno zero dove invece ci si aspetta un valore positivo. Infatti in questa fase vengono generate delle serie storiche fittizie alle quali viene applicato lo script al solo scopo di verificarne la correttezza, e queste potrebbero portare lo script alla condizione di errore che ha incontrato.
si pone il problema di verificare ed eventualmente correggere il valore del vettore
creato dalla funzione esterna, prima di passarlo alla funzione SuperTrend,
per non incappare nel messaggio d'errore.
Ho provato a modificare il codice precedente aggiungendo un controllo, e adesso
sembrerebbe funzionare.
Saluti
Massimo
12345678910# Indicatore SUPERTREND DINAMICO
#
INPUTS
:
@MaxPeriodo(60), @MinPeriodo(5), @PeriodoVolatilita(30)
SET
A = PERIODO_DINAMICO(
@MaxPeriodo, @MinPeriodo, @PeriodoVolatilita)
SET
COND1 = A <
@MinPeriodo OR A > @MaxPeriodo OR A = NAN
SET
B =
IF
(COND1 ,
@MinPeriodo , A)
SET
PLOT1
=
ST
(
@MinPeriodo , 5)
SET
PLOT2
=
ST
(
@MaxPeriodo , 5)
SET
PLOT3
=
ST
( B ,
5
)
-
14-11-13, 00:25 #10
- Data Registrazione
- Sep 2013
- Località
- Monza
- Messaggi
- 186