Ciao a tutti, sto simulando dei PAC, ma per chiudere il trading system e calcolare il controvalore all’ultima candela non ho trovato altra soluzione che terminare con
IF DATE = 20230502 THEN
SELL AT MARKET
ENDIF
modificando manualmente il valore della data ogni giorno che passa.
Non c’è un modo affinché riconosca l’ultima barra e venda tutte le posizioni accumulate? Grazie
Se ti è più comprensibile (simulo un PAC semestrale in cui “m” è una variabile che può assumere valori da 1 a 6 per capire qual è stata in passato la cadenza più profittevole)
quota = 1200
k = 6
if month <> month[1] and (month=m or month=m+6) then
BUY quota/(12/k) cash AT MARKET
ENDIF
IF DATE = 20230502 THEN
SELL AT MARKET
ENDIF
Ho spostato il topic in ProOrder, inquanto riguarda una strategia, non un argomento sulla piattaforma.
Ogni barra è l’ultima barra, quindi vuoi chiudere ad ogni barra?
Prova a creare questo indicatore di una sola riga e vedrai che ti segnala sempre l’ultima barra ad ogni barra, dal momento in cui lo carichi sotto il grafico:
RETURN IsLastBarUpdate AS "Ultima Barra"
Grazie. No, non voglio chiudere ogni barra, bensì voglio che tutte le posizioni accumulate vengano vendute all’ultima barra, una cosa del tipo (che però non funziona)
IF IsLastBarUpdate SELL AT MARKET
Non funziona perché è vera ad ogni barra.
IsLastBarUpdate serve a riconoscere quando siamo sulla barra in corso. Questa istruzione è stata aggiunta perché si potesse evitare, per chi lo desidera, che gli indicatori NON siano calcolati anche sulle barre precaricate (ProBuilder carica sempre circa 500+ barre antecedenti la prima delle unità scelte, ProOrder 2000 per default, ma si può usare da 0 a 10000). Se selezioni 1000 unità sul grafico, ProBuilder ne carica 1500, per fare in modo che gli indicatori e i segnali NON siano verificati e calcolati anche sulla prime 500 (ad esempio una media a 100 periodi), si può usare questa istruzione.
Una volta iniziato dalla prima barra precaricata, quando arriva a quella corrente saranno tutte CORRENTI una dopo l’altra, da li in poi.
Quindi devi escogitare un modo diverso, oppure continuare ad usare la data come stai facendo.
Grazie, però comunque col metodo della data il trading non si chiude… non capisco perché (a meno che non imposta una data molto indietro, tipo un giorno qualsiasi del 2021, ma così facendo si aprono delle posizioni successive che mi rimangono aperte)
Se mi spieghi bene cosa vuoi fare, posso provare a qualche alternativa.
Indicami quando vuoi aprire una posizione, quando accumularne e quando chiuderle (tutte o parzialmente).
Voglio acquistare azioni ogni 6 mesi, va bene anche gennaio-giugno di ogni anno (m=1 nel codice sotto)
quota = 1200
k = 6
if month <> month[1] and (month=m or month=m+6) then
BUY quota/(12/k) cash AT MARKET
ENDIF
IF DATE = 20230502 THEN
SELL AT MARKET
ENDIF
e vendere tutte le posizioni accumulate nell’ultimo giorno disponibile (ad oggi 2 maggio 2023. Domani sarà il 3 maggio è così via).
La logica è quelle dei PAC insomma, nel mio caso semestrale. Spero di essermi spiegato. Ad ogni modo il mio codice va bene eccetto per il fatto che non si chiude…
Si, ma vorrei capire perché chiudere proprio il 2 Maggio? E le date successive di chiusura quali sarebbero?
In verità m’interessa l’ultima candela chiusa, per cui oggi m’interessa il 2 maggio (se si è già formata va bene anche quella del 3, anzi meglio). Se lo guardo fra un mese sarà il 2 giugno e così via, perchè il controvalore delle quote accumulate cambiano in base al valore dell’ultima candela chiusa
Non mi pare possibile. Il codice può solo calcolare sulla base di dati precisi, quindi se non c’è una formula per calcolare quando dovrà avvenire la chiusura, non si può fare niente, purtroppo.
In verità il codice funziona, ma non so perché con date che vanno dal 2022 in poi non venda le posizioni accumulate…
Non so cosa dirti, con gli elementi indicati.