Buonasera a tutti, sto imparando a programmare e chiedo il vostro aiuto per riuscire a scrivere un codice su prorealtime.
Vorrei impostare un trading system che acquisti se:
se la media a 9 giorni crossa al rialzo la media a 16 giorni, vorrei memorizzare il massimo di quella candela come valore di interesse(chiamiamolo TRIGGER) per un eventuale ingresso futuro. Se nelle candele successive, mentre la media a 9 rimane sulla media a 16, la candela chiude con un valore maggiore del TRIGGER allora entro long altrimenti, aggiorno con i massimi delle nuove candele il valore del trigger.
Mi riuscite ad aiutare? io da solo non riesco.
Vi ringrazio tanto
Quindi t’interessa solo la parte LONG, non lo Short?
Ciao Roberto,
in verità mi servirebbe anche lo short, ma magari capendo come farlo sul long, poi ci avrei provato a farlo per lo short 🙂
grazie 1000 per l’aiuto.
Diciamo che quello che non riesco proprio a fare è:
al verificarsi della condizione di incrocio media, come memorizzare il massimo di quella candela per poterlo usare come valore utile nel caso in cui nelle candele successive il prezzo chiudesse oltre quel livello.
Per memorizzare il massimo della candela basta che lo salvi in una variabile nel momento in cui l’incrocio avviene:
MediaVeloce = average[9,0](close)
MediaLenta = average[16,0](close)
// long
IF MediaVeloce CROSSES OVER MediaLenta THEN
Massimo = high
Minimo = 0
ENDIF
// short
IF MediaVeloce CROSSES UNDER MediaLenta THEN
Minimo = low
Massimo = 999999
ENDIF
dopodiché con i due valori salvati, Massimo e Minimo ci fai quello che vuoi.
Quando c’è un incrocio resetto il valore dell’altra variabile per evitare che possa essere aperto un trade contrario.
Grazie per l’aiuto Roberto. Bene, ho capito ora con il tuo codice come “catturare” in una variabile il valore del prezzo in occasione dell’incrocio delle medie.
Ora bisognerebbe aggiungere che:
ipotizzando un incrocio di media al rialzo (situazione long), dopo essersi verificato l’incrocio della media e assegnato alla variabile MASSIMO il max della candela, il TS dovrebbe:
se nelle candele successive avviene un CLOSE di candela oltre il valore MASSIMO, entrare LONG. Invece se nelle candele successive si generano delle delle SPIKE DI CANDELA oltre il valore di MASSIMO queste dovrebbero aggiornare più in alto il valore di MASSIMO e non entrare LONG fino a che non si verificherà un CLOSE oltre il nuovo valore di MASSIMO.
Ovviamente lo stesso ragionamento vale per lo short, sulla variabile MINIMO.
Come potrei fare a codificare tutto ciò? io ho pensato ad un ciclo ma non riesco a scriverlo…
Grazie per il tuo aiuto.
Basta verificare che il prezzo di chiusura sia > Massimo ed aggiornare il Massimo se c’è uno spike:
IF Massimo > 0 AND Massimo < 999999 THEN
Massimo = max(Massimo,high)
ENDIF
IF close > Massimo AND Not OnMarket THEN
BUY 1 CONTRACT AT MARKET
ENDIF
viceversa per gli short.
MediaVeloce = EXPONENTIALaverage[9](close)
MediaLenta = EXPONENTIALaverage[16](close)
// long
IF MediaVeloce CROSSES OVER MediaLenta THEN
Massimo = high
Minimo = 0
ENDIF
// short
IF MediaVeloce CROSSES UNDER MediaLenta THEN
Minimo = low
Massimo = 999999
ENDIF
IF Massimo > 0 AND Massimo < 999999 THEN
Massimo = max(Massimo,high)
ENDIF
IF close > Massimo AND Not LONGOnMarket THEN
BUY 1 CONTRACT AT MARKET
ENDIF
IF Minimo > 0 and Minimo < 999999 THEN
Minimo = min(Minimo,low)
ENDIF
IF Close < Minimo and NOT SHORTONMARKET THEN
SELL 1 CONTRACT AT MARKET
ENDIF
Ciao Roberto, ho provato a mettere tutto il codice insieme ed ho inserito il pezzo per lo short, ma devo aver sbagliato qualcosa? Quando lo backtesto non compare neanche un operazione. Come mai accade? Grazie 1000
credo di aver capito che non andasse bene il valore “999999” alla riga 12
No, il problema non è li, è alla 17, perché se aggiorni continuamente Massimo, CLOSE alla riga 20 non potrá mai essere naggiore al suo massimo.
Prova a spostare le righe 16-18 alla fine, dopo la 30.
Ottimo Suggerimento, cosi facendo ed aggiungendo le condizioni short, sul giornaliero comincia a diventare interessante.
A questo punto mi potresti aiutare nell’inserire delle regole di money managment? tipo dei target e dei traling stop che liquidino magari metà posizione ad un certo prezzo e mettano lo stop in pari per evitare perdite e lasciar correre il guadagno con altra metà posizione?
GRAZIE
MediaVeloce = EXPONENTIALaverage[9](close)
MediaLenta = EXPONENTIALaverage[25](close)
// long
IF MediaVeloce CROSSES OVER MediaLenta THEN
Massimo = high
GRAPHONPRICE Massimo as "Massimo"
Minimo = 0
ENDIF
// short
IF MediaVeloce CROSSES UNDER MediaLenta THEN
Minimo = low
GRAPHONPRICE Massimo as "Minimo"
Massimo = 999999
ENDIF
IF close > Massimo AND Not LONGOnMarket THEN
BUY 1 CONTRACT AT MARKET
ENDIF
IF Close < Minimo and NOT SHORTONMARKET THEN
SELL 1 CONTRACT AT MARKET
ENDIF
IF close < Minimo AND Not ShortOnMarket THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
IF Close > Massimo and NOT LongONMARKET THEN
EXITSHORT 1 CONTRACT AT MARKET
ENDIF
IF Minimo > 0 and Minimo < 999999 THEN
Minimo = min(Minimo,low)
ENDIF
IF Massimo > 0 AND Massimo < 999999 THEN
Massimo = max(Massimo,high)
ENDIF
Per il momento non è possibile chiudere una posizione in modo parziale, tutto o niente! Dovrebbe cambiare con la nuova versione 11 che arriverà questo mese o il prossimo.
Cercando la parola BREAKEVEN ho trovato, tra fli altri, questo codice di Nicolas https://www.prorealcode.com/blog/learning/breakeven-code-automated-trading-strategy/.
Cercando TRAILING STOP ho trovato, sempre tra i molti esempi, questo codice, sempre di Nicolas https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/.