Buonasera a tutti e grazie in anticipo per la vostra disponibilità.
(come intuirete tra pochissimo) sto provando a scrivere le mie prime righe senza riuscire.
Quello che volevo provare a scrivere è questo:
Se non sei già long, Entra long con 1 contratto quando il close di oggi è maggiore del MAXclose degli “n” giorni precedenti.
Esci dopo “x” giorni
Se non sei già short, Entra short con 1 contratto quando il close di oggi è minore del minclose degli “n” giorni precedenti.
Esci dopo “x”giorni
Ho definito sia n che x con valori compresi tra 1 e 20 con passo 2.
Non ho inserito né commissioni né spread.
Capitale di partenza 100000
Misura per lotto 1
Il codice è il seguente:
MAXrel = highest[n](close)
minrel = lowest[n](close)
EXIT = BARINDEX - TRADEINDEX
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND Close > MAXrel THEN
BUY 1 LOT AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket AND EXIT = x THEN
SELL 1 LOT AT MARKET
ENDIF
// Condizioni per entrare su posizioni short
IF NOT ShortOnMarket AND Close < MINrel THEN
SELLSHORT 1 LOT AT MARKET
ENDIF
// Condizioni per uscire da posizioni short
IF ShortOnMarket AND EXIT = x THEN
EXITSHORT 1 LOT AT MARKET
ENDIF
Sto provando sulla versione free della PRT con i dati end of day.
Ma il sistema mi genera zero trade in tutto lo storico considerato.
Dove sto sbagliando ?
Grazie !
Le righe 12 e 22 NON vanno bene in quanto, mentre è consentito accumulare più posizioni anche in tempi diversi, NON ne è consentita la chiusura parziale, per cui vanno chiuse tutte con:
SELL AT MARKET //per i LONG
// e
EXITSHORT AT MARKET //per gli SHORT
Comunque questo non influisce sul tuo problema.
La tua strategia NON potrà mai funzionare perché confronti i massimi (ma vale anche per i minimi) delle ultime “n” candele, qujindi anche quella corrente col prezzo di chiusura corrente. Il prezzo di chiusura corrente NON potrà MAI essere superiore al proprio massimo!!!
Questo funziona (almeno su Eur/usd, h1):
ONCE n = 10
ONCE x = 5
MAXrel = highest[n](close[1])
minrel = lowest[n](close[1])
EXIT = BARINDEX - TRADEINDEX
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND Close > MAXrel THEN
BUY 1 LOT AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket AND EXIT = x THEN
SELL AT MARKET
ENDIF
// Condizioni per entrare su posizioni short
IF NOT ShortOnMarket AND Close < MINrel THEN
SELLSHORT 1 LOT AT MARKET
ENDIF
// Condizioni per uscire da posizioni short
IF ShortOnMarket AND EXIT = x THEN
EXITSHORT AT MARKET
ENDIF
A parte avere aggiunto le due variabili mancanti n ed x all’inizio, ho modificato le righe 3 e 4 in modo che verifichino fino alla chiusura PRECEDENTE.
Ho anche modificato le righe 14 e 24 per i motivi sopra indicati.
Roberto
Buonasera Roberto e grazie per la risposta in real time !
Ho provato a farlo girare ed in effetti funziona.
Quindi le variabili n ed x le devo eguagliare ad una costante
“n = 10
x = 5 ”
anche se poi le voglio far variare ed utilizzarle come parametri per una eventuale ottimizzazione?
Ho capito invece l’errore che facevo mettendo Close invece di Close[1], abbastanza ingenuo direi 🙂
Grazie di nuovo !
Luca
Per le variabili ho indicato ONCE, ma serve a poco, fa solo risparmiare qualche microsecondo al sistema che non deve riesaminarle ogni volta.
Se le tue variabili vuoi eventualmente variarle all’interno della strategia non usare ONCE.