Grazie roberto per l’aiuto.
Intanto volevo chiederti…da quello che ho capito, suppongo che il prt “legga” il codice ad ogni nuova barra, è corretto?
Le variabili della barra precedente restano in memoria? (es. ad una barra setto una variabile. Alla barra successiva, quando il programma viene ri-eseguito, la variabile resta settata?)
Poi…qualcosa non mi torna:
// Condizioni per entrare su posizioni long
indicator = CALL "In Trend"[10, 0, 20, 1, 30, 1]
//conta da quante barre il trend è positivo
//count = indice prima barra dove non è in trend
count = 0
WHILE indicator[count] = 1 DO
count = count + 1
WEND
//verifica che ci sia stata un'inversione in meno di 3 giorni
inversione = indicator[count+2] = -1
//-----------------------------------------------------------------//
//cerca il pullback più vicino a noi e setta entry e stop
IF (inversione = 1) THEN
i = 0
indexBarPullback = -1
WHILE (i < count AND indexBarPullback = -1) DO
IF(high[i] < high[i+1] AND low[i] < low[i+1]) THEN
indexBarPullback = i
entry = high[i]
stopLoss = low[i]
ENDIF
i = i + 1
WEND
ENDIF
Questa è la routine che fa. Ho provato a farlo disegnare come indicatore e dovrebbe funzionare. Mi disegna sul grafico le righe giuste ed i dati giusti.
IF indicator = 1 AND indexBarPullback > 0 THEN
DRAWARROWUP(barindex[indexBarPullback], low[indexBarPullback]-1) coloured(255,0,0,255)
DrawText(entry,barindex[indexBarPullback],low[indexBarPullback]-2) coloured(255,0,0,255)
DrawText(stopLoss,barindex[indexBarPullback],low[indexBarPullback]-3) coloured(255,0,0,255)
ENDIF
IF(close > entry AND indexBarPullback > 0) THEN
DRAWARROW(barindex[indexBarPullback], entry) coloured(0,0,255,255)
DrawText(entry,barindex[indexBarPullback],entry+1) coloured(0,0,255,255)
ENDIF
Se invece, anzichè disegnare, faccio fare gli acquisti, non compra niente.
IF indicator = 1 AND indexBarPullback > 0 AND Not OnMarket THEN
BUY 1 CONTRACTS AT entry STOP
SET TARGET pPROFIT 500 //500 pips fissi
SLexit = stopLoss //Lo stop è quello calcolato con la routine
SET STOP pLOSS abs(Entry - SLexit) / pipsize //Questa istruzione non ho ben capito cosa fa >.<
ENDIF
Non so se ho sbagliato qualcosa. Ho modificato il tuo codice e ho concettualmente ricontrollato quello che fa.
Gli ordini li ho provati sia con BUY LIMIT che con BUY STOP, non funziona.
P.S. Al controllo degli stop ancora non ci sono arrivato, se non compra nulla non posso testarli, però chiedo già.
La condizione di modifica dello stop io la farei semplicemente così
IF stopLoss > SLexit AND POSITIONPERF > 0 THEN
SLexit = max(PositionPrice,stopLoss)
ENDIF
IF LongOnMarket THEN
SELL AT SLexit STOP //piazza l'ordine di StopLoss (durata 1 candela)
ENDIF
“Le ultime 3 righe piazzano un ordine STOP pendente ad ogni nuova candela, se a mercato, perché gli ordini pendenti hanno validità per una sola candela.”
Non si può ripiazzare uno stop “classico”?