Ciao a tutti
sono nuovissimo alla programmazione e vorrei capire come far eseguire un comando al verificarsi di due condizioni in sequenza temporale, cioè due condizioni che non si verifichino nello stesso momento ma una dopo l’altra.
In particolare, aprire una posizione long soltanto se si verificano in sequenza tutte e due le condizioni seguenti:
1) la media mobile MM1 incrocia al rialzo la media mobile MM2 e in seguito
2) la MM3 incrocia al rialzo la MM4.
Ovviamente il comando non deve essere eseguito all’incrocio tra MM1 e MM2, ma soltanto se successivamente si verifica anche l’incrocio tra MM3 e MM4.
Il problema è che non si può sapere se e quando, dopo il primo incrocio, si verificherà anche l’altro, per cui non è possibile inserire limiti temporali o di prezzo o numero di barre.
Ho provato con la sequenza IF/THEN/IF/ ma non funziona, probabilmente perché assume che le due condizioni debbano verificarsi contemporaneamente – il che ovviamente non può mai accadere.
Riporto comunque quello che ho scritto e ringrazio chiunque vorrà darmi una mano.
Lo strumento è il Mini S&P500 Only0320, il TF 1 min. su un intervallo di 5 giorni.
<pre class=”lang:probuilder decode:true” title=”Cross M1/M2 poi M3/M4″>defparam cumulateorders=false
M1=average [20](close)
M2=average [50](close)
M3=average [30](close)
M4=average [60](close)
if M1 crosses over M2 then
if M3 crosses over M4 then
buy 1 shares at market
endif
endif
Provalo:
ONCE Cross1 = 0
ONCE Cross2 = 0
M1=average [20](close)
M2=average [50](close)
M3=average [30](close)
M4=average [60](close)
//
// Verificare se c'è il primo incrocio (ed azzerare tutto se c'è l'incrocio opposto)
//
if M1 crosses over M2 then
Cross1 = 1
Cross2 = 0
endif
if M1 crosses under M2 then
Cross1 = 0
endif
//
// Verificare se c'è il secondo incrocio, purché cia sia stato il primo (ed azzerare solo il secondo se avviene quello opposto)
//
if M3 crosses over M4 then
If Cross1 THEN
Cross2 = 1
endif
endif
if M3 crosses under M4 then
Cross2 = 0
endif
//
IF Cross1 AND Cross2 AND Not OnMarket THEN
buy 1 shares at market
ENDIF
Grazie Roberto per la risposta prontissima.
Purtroppo non mi funziona neanche questo, mi dà solo un primo acquisto in apertura poi più nulla. Ti allego il risultato del backtesting.
Tu l’hai provato? Non vorrei che fosse un problema soltanto della mia piattaforma, da quando c’è stato l’aggiornamento alla versione 11 succedono cose strane.
In ogni caso studiando il codice che mi hai mandato ho capito un sacco di cose, ti ringrazio.
Tu mi hai chiesto come mettere insieme le condizioni per entrare e l’ho fatto (solo Long, lo Short è opposto).
Devi mettere te le condizioni per uscire. Non è prevista un’uscita, quindi immagino la posizione resti aperta all’infinito.
Basta che metti un target profit ed uno stop loss ed uscirà, prova ad aggiungere alla fine:
SET STOP pLOSS 30
SET TARGET pPROFIT 100
oviamente cambierai i valori come vorrai tu.
Oppure puoi scegliere di uscire quando c’è un incrocio opposto.
Sì con gli stop funziona. Ogni volta che vende poi riapre il long esattamente al secondo incrocio.
Non avevo provato ad inserire gli stop perchè pensavo che dovesse comunque darmi sul grafico un acquisto ogni volta che si verificava un doppio incrocio al rialzo, invece non è così.
Grazie mille!