Buonasera a tutti,
vi chiedo un aiuto in merito a questa strategia. Vorrei aprire una posizione long quanto l’Heikin Ashi è blu (rialzista), solo ed esclusivamente quando il prezzo è sopra la Kumo verde (rialzista), chiudere il long, non appena la candela diventa rossa.
Vi allego il codice che ho usato ed uno screenshot della posizione aperta. Il problema è il seguente : apertura long giusta, ma avrebbe dovuto aprirne più di una (anzichè una soltanto) e la chiusura non è avvenuta alla comparsa della candela rossa, bensì prima).
Vi ringrazio fin da subito per un aiuto ad imparare come scrivere il codice corretto.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Condizioni per entrare su posizioni long
indicator1 = SenkouSpanA[9,26,52]
c1 = (close[1] > indicator1[1])
c2 = (close[1] >= open[1])
indicator2 = SenkouSpanA[9,26,52]
indicator3 = SenkouSpanB[9,26,52]
c3 = (indicator2 CROSSES OVER indicator3)
IF c1 AND c2 AND c3 THEN
BUY 1 SHARES AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
c4 = (close[1] < open[1])
IF c4 THEN
SELL AT MARKET
ENDIF
A parte ogni altra verifica, tu non stai applicando la strategia alle candele HA, ma a quelle normali giapponesi.
Alla riga 3 inserisci queste righe per definire le candele HA:
once haOpen = open
haClose = (open+close+high+low)/4
if barindex > 0 then
haOpen = (haOpen+haClose[1])/2
endif
//haLow = min(low,min(haClose,haOpen))
//haHigh = max(high,max(haClose,haOpen))
poi sostituisci, nelle righe successive, ogni CLOSE con haClose.
Provalo così intanto, ma credo dovremo modificare anche i calcoli delle SpanA e SpanB, perché così come sono credo anch’esse facciano i calcoli sulle candele giapponesi.
Nella definizione delle HA ho commentato le ultime due righe perché tu non usi mai Low e High.
Un’ultima cosa, tu fai sempre riferimento alla candela precedente mettendo [1] dopo CLOSE, è voluto oppure è un errore?
Grazie Roberto,
non sapevo come impostare le HA nel codice, grazie per avermelo insegnato.
Purtroppo però non è cambiato un gran che… evidentemente sbaglio a impostare le altre condizioni. Ti allego il nuovo codice modificato come da tua indicazione. Come dici tu, dovremo cambiare anche il settaggio della SpanA e SpanB.
Per rispondere alla tua domanda del riferimento alla candela precedente, l’ho inserita semplicemente perchè in questo modo avevo almeno 1 long aperto, nel tratto di trend che ho screenshottato, togliendo [1] non ho neppure quel segnale aperto…
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
once haOpen = open
haClose = (open+close+high+low)/4
if barindex > 0 then
haOpen = (haOpen+haClose)/2
endif
//haLow = min(low,min(haClose,haOpen))
//haHigh = max(high,max(haClose,haOpen))
// Condizioni per entrare su posizioni long
indicator1 = SenkouSpanA[9,26,52]
c1 = (haclose > indicator1)
c2 = (haclose >= haopen)
indicator2 = SenkouSpanA[9,26,52]
indicator3 = SenkouSpanB[9,26,52]
c3 = (indicator2 CROSSES OVER indicator3)
IF c1 AND c2 AND c3 THEN
BUY 1 SHARES AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
c4 = (haclose < haopen)
IF c4 THEN
SELL AT MARKET
ENDIF
Prova questa (io ho solo fatto verifiche sintattiche):
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// settaggi candele HA
once haOpen = open
haClose = (open+close+high+low)/4
if barindex > 0 then
haOpen = (haOpen+haClose)/2
endif
haLow = min(low,min(haClose,haOpen))
haHigh = max(high,max(haClose,haOpen))
//
// settaggi e parametri Ichimoku
//
Tenkansen = (highest[9](haHigh) + lowest[9](haLow)) / 2 //media Veloce
Kijunsen = (highest[26](haHigh) + lowest[26](haLow)) / 2 //media LENTA
SpanA = (tenkansen[26] + kijunsen[26]) / 2
SpanB = (highest[52](haHigh[26]) + lowest[52](haLow[26])) / 2
//Chikou = haClose[26]
//
// Condizioni per entrare su posizioni long
indicator1 = SpanA
c1 = (haclose > indicator1)
c2 = (haclose >= haopen)
indicator2 = SpanA
indicator3 = SpanB
c3 = (indicator2 CROSSES OVER indicator3)
IF c1 AND c2 AND c3 THEN
BUY 1 SHARES AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
c4 = (haclose < haopen)
IF c4 THEN
SELL AT MARKET
ENDIF
Ho dovuto ridefinire ICHIMOKU perché con IG non ho la versione 11. Avrei la 11 in formato gratuito con i dati di fine giornata, ma non ho candele intraday quindi non la uso.
Grazie Roberto,
ho provato il codice che mi hai dato, ma mi da errore alla riga 14 e 15 dicendomi che mancano dei caratteri..
E’ dovuto alla v11. La 10.3 non ha le nuove istruzioni per Ichimoku, per cui le ho definite io. Eeventualmente i due nomi, Tenkansen e Kijunsen, sono riservati sulla tua versione e dobbiamio cambiarli, basta che aggiungi una lettera qualunque, diciamo X, in modo che diventino TenkansenX e KijunsenX (sia alle righe 14 e 15 che alle successive dove si fa riferimento a quelle variabili, mi pare ci sia solo la riga 16, in ogni caso ti verrebbe segnalato se ce ne fossero altre).
Funziona alla perfezione! 🙂
Grazie Roberto
Ciao Roberto,
visto che il codice funziona perfettamente grazie alle tue indicazioni, ti chiedo se è possibile implementare la seguente funzione: c’è un modo per dire alla strategia di aprire un long o uno short alle stesse condizioni ma non alla prima candela positiva in caso di long o alla prima candela negativa in caso di short, bensì dopo n candele positive o n candele negative ?
Grazie in anticipo
Eccolo modificato, all’inizio ho messo 3 candele consecutive, ma puoi variarlo da 1 a quello che vuoi:
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
ONCE NumeroBarre = 3
// settaggi candele HA
once haOpen = open
haClose = (open+close+high+low)/4
if barindex > 0 then
haOpen = (haOpen+haClose)/2
endif
haLow = min(low,min(haClose,haOpen))
haHigh = max(high,max(haClose,haOpen))
//
// settaggi e parametri Ichimoku
//
Tenkansen = (highest[9](haHigh) + lowest[9](haLow)) / 2 //media Veloce
Kijunsen = (highest[26](haHigh) + lowest[26](haLow)) / 2 //media LENTA
SpanA = (tenkansen[26] + kijunsen[26]) / 2
SpanB = (highest[52](haHigh[26]) + lowest[52](haLow[26])) / 2
//Chikou = haClose[26]
//
// Condizioni per entrare su posizioni long
indicator1 = SpanA
c1 = (haclose > indicator1)
c2 = (summation[NumeroBarre](haclose >= haopen) = NumeroBarre)
indicator2 = SpanA
indicator3 = SpanB
c3 = (indicator2 CROSSES OVER indicator3)
IF c1 AND c2 AND c3 THEN
BUY 1 SHARES AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
c4 = (haclose < haopen)
IF c4 THEN
SELL AT MARKET
ENDIF
quindi ho solo aggiunto la riga 3 ed ho modificato la riga 24 (prima era la 23).
Grazie ancora Roberto, domani lo carico su.
Buona serata
Ciao Roberto,
sto testando la strategia da alcune settimane, con discreto successo. Vorrei integrare un’ antimartingala come money managment. L’antimartingala funziona in questo modo : all’apertura del segnale di entrata a mercato, vengono fatti successivi tre ingressi a distanza fissa tra loro (in pratica la differenza tra segnale di ingresso e segnale di uscita viene divisa in 4 entrate). Gli stop loss sono effettuati nel seguente modo : lo stop loss del primo ingresso ha un R/R pari a 1:1, così come per tutti gli altri tre ingressi.
Pensi sia possibile inserire questi parametri all’interno del codice ?
Come sempre ti ringrazio per la pazienza.
Purtroppo non si possono fare chiusure parziali e può esserci un solo stop loss che sarà calcolato dal prezzo medio tra i vari prezzi d’ingresso.
Grazie Roberto per la risposta.
Pensi ci possa essere qualcuno che possa fare un EA (ovviamente pagando), per raggiungere questo obiettivo ?
Per i servizi a pagamento puoi visitare questa pagine e compilare la richiesta https://www.prorealcode.com/trading-programming-services/.
Però IG non consente la chiusura parziale delle posizioni aperte (almeno quelle in automatico), anche se stanno lavorando per fare in modo che in un futuro si possa, magari entro fine anno. Quindi quando fai la richiesta riformula la domanda, perché così com’è conosci già la risposta: c’è un solo stop loss per tutte le posizioni aperte.