Vorrei sapere quale è dal punto di vista semantico l’utilizzo più corretto di Highest:
A. hhNM = Highest[winNM](high)[confOffNM]
o
B Highcicle = (high)[confOffNM]
hhNM = Highest[winNM](highcicle)
Oppure funzionano entrambe
Grazie
dimenticavo il tutto è in un ciclo di for che fa variare confOffNM
@alessandro_furlani: le due scritture non sono semanticamente equivalenti e in generale danno risultati diversi. La differenza è dove applichi l’offset [confOffNM] rispetto al calcolo di Highest.
-
A) hhNM = Highest[winNM](high)[confOffNM]
Qui prima calcoli Highest[winNM](high) (massimo su finestra di winNM barre, “centrato” sulla barra corrente), poi applichi l’offset [confOffNM] al risultato.
Quindi è equivalente a: “dammi il valore dell’indicatore Highest com’era confOffNM barre fa”.
-
B) Highcicle = high[confOffNM] ; hhNM = Highest[winNM](Highcicle)
Qui sposti prima la serie (high) creando una serie “ritardata/anticipata” (a seconda del segno di confOffNM), e poi calcoli Highest su quella serie.
Quindi è equivalente a: “calcola il massimo su winNM barre, ma su una serie di high già traslata di confOffNM”.
Perché danno risultati diversi
- A sposta nel tempo l’output di Highest.
- B sposta nel tempo l’input (la serie) prima di fare il massimo; questo cambia anche quali barre entrano nella finestra di calcolo del massimo.
Qual è “più corretto” dipende dall’intento:
- Se vuoi confrontare/leggere “il massimo su winNM barre” ma riferito a confOffNM barre fa (cioè un valore di indicatore nel passato), allora è più coerente A.
- Se vuoi calcolare il massimo su una finestra che, di fatto, è spostata perché stai usando high di un’altra barra come campione (tipico in cicli for per testare traslazioni), allora è coerente B.
Esempio minimo (solo per chiarire la semantica in ProBuilder):
winNM = 10
confOffNM = 3
// A) offset applicato al RISULTATO di Highest
hhA = Highest[winNM](high)[confOffNM]
// B) offset applicato alla SERIE prima di Highest
highCycle = high[confOffNM]
hhB = Highest[winNM](highCycle)
RETURN hhA AS "A", hhB AS "B"
Nota sul for: se confOffNM varia nel ciclo, in A stai campionando lo storico di un indicatore già calcolato, in B stai ricalcolando Highest su una serie diversa a ogni iterazione; anche per questo spesso i due approcci divergono in modo evidente.
In ogni caso quale è la sintassi corretta per l'espressione A:
hhA = Highest[winNM](high)[confOffNM]
oppure
hhA = Highest[winNM](high[confOffNM])
In realtà le seguenti tre istruzioni, pur diverse per la loro logica costruttiva, forniscono tutte lo stesso risultato.
1) hhNM = Highest[winNM](high)[confOffNM]
2) hhNM = Highest[winNM](high[confOffNM])
3) x = Highest[winNM](high)
hhNM = x[confOffNM]
Puoi vederne i risultati comn questo esempio di strategia:
hhNM1 = Highest[10](high)[1]
hhNM2 = Highest[10](high[1])
x = Highest[10](high)
hhNM3 = x[1]
buy at -close limit
graphonprice hhNM1
graphonprice hhNM2
graphonprice hhNM3
ovviamente sia il valore 10 che 1 possono essere sostituiti da una variabile per i cicli (FOR o WHILE).