Salve, chiedo un aiuto per definire correttamente un punto chiave da utilizzare nel mio sistema. Di seguito un esempio:
Ind1 = Supertrend[30,50]
Punto L = Close CROSSES OVER Ind1
Punto S = Close CROSSES UNDER Ind1
c1 = (NOT ONMARKET AND Close > Ind1 AND Ind1<Punto L)
IF c1 THEN
SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
c2 = (SHORTONMARKET AND Close < Ind2)
IF c2 THEN
EXITSHORT 1 CONTRACTS AT MARKET
ENDIF
c3 = (SHORTONMARKET AND Ind1>Punto L)
IF c3 THEN
EXITSHORT 1 CONTRACTS AT MARKET
ENDIF
Ovviamente lo script continua con la situazione opposta riferita al Punto S.
Grazie in anticipo
Ciao,
Il problema principale è che stai assegnando a Punto L e Punto S un valore booleano (il risultato di crosses over / crosses under) e poi tenti di usare questi valori come livelli di prezzo nelle comparazioni (Ind1 < Punto L o Ind1 > Punto L), il che non ha senso: un booleano non è un prezzo.
Per risolvere la situazione, bisogna separare due concetti:
Segnale di incrocio (booleano): rilevare il momento in cui il prezzo incrocia l’indicatore.
Livello di riferimento (numerico): memorizzare il valore di Ind1 nella barra in cui si è verificato l’incrocio per confrontarlo successivamente.
Di seguito un esempio di come farlo in ProBuilder:
// 1) Calcolo del Supertrend
periodATR = 20
multiplier = 3
Ind1 = Supertrend[periodATR,multiplier]
// 2) Rilevazione del segnale di incrocio
puntoLsenal = close crosses over Ind1 // segnale vero nella barra in cui il prezzo incrocia al rialzo
puntoSsenal = close crosses under Ind1 // segnale vero nella barra in cui il prezzo incrocia al ribasso
// 3) Registrazione del valore di Ind1 al momento del segnale
ONCE puntoLnivel = 0 // inizializza solo una volta
ONCE puntoSnivel = 0
IF puntoLsenal THEN
puntoLnivel = Ind1 // salvo il livello di Ind1 al segnale long
ENDIF
IF puntoSsenal THEN
puntoSnivel = Ind1 // salvo il livello di Ind1 al segnale short
ENDIF
// 4) Logica di entrata in vendita (short) usando puntoLnivel
c1 = NOT onmarket AND close > Ind1 AND Ind1 <= puntoLnivel
IF c1 THEN
SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
// 5) Uscita dalla posizione short
c2 = shortonmarket AND close crosses under Ind1 // uscita per incrocio a ribasso del prezzo
c3 = shortonmarket AND Ind1 > puntoLnivel // uscita se Ind1 supera il livello catturato
IF c2 OR c3 THEN
EXITSHORT AT MARKET
ENDIF
// La logica per “Punto S” (long) è speculare:
// - usare puntoSnivel invece di puntoLnivel
// - invertire crosses under / crosses over
// - invertire le comparazioni
// Visualizzazione su grafico
graphonprice puntoLnivel
graphonprice puntoSnivel
graphonprice Ind1
Grazie Ivan, non ci sarei mai riuscito da solo.
Mi confermi che il PuntoL (e S) si aggiorna al successivo incrocio vero?
Prego! Sì, si aggiornano con gli incroci. Puoi verificarlo con il comando graphonprice.