R05Participant
Veteran
Gent.mi ho visto al segeuente link https://www.prorealcode.com/prorealtime-trading-strategies/renko-automated-trading-with-moving-average-on-candlesticks-chart/ la possibilità di combinare il grafico renko con la media mobile. Per comodità vi allego il codice.
defparam cumulateorders = false
bsize = 20 //renko size in points
mmperiod = 20 //moving average period
orderstime = 300 //minimum seconds between 2 orders
boxsize = bsize*pipsize
once topprice = close
once bottomprice = close - boxsize*pipsize*2
if(close > topprice + boxsize*2) THEN
topprice = close
bottomprice = topprice - boxsize*2
barclose=topprice
ELSIF (close < bottomprice - boxsize*2) THEN
bottomprice = close
topprice = bottomprice + boxsize*2
barclose = bottomprice
ELSE
topprice = topprice
bottomprice = bottomprice
ENDIF
mm = average[mmperiod](barclose)
if barclose=barclose[1] then
mmRENKO = mmRENKO[1]
else
mmRENKO = mm
endif
if barclose crosses over mmRENKO AND ABS(time-lasttime)>orderstime then
BUY 1 SHARES AT MARKET
EXITSHORT AT MARKET
lasttime=time
endif
if barclose crosses under mmRENKO AND ABS(time-lasttime)>orderstime then
SELLSHORT 1 SHARES AT MARKET
SELL AT MARKET
lasttime=time
endif
Si potrebbe usare il grafico renko in combinazione con le bande di bollinger anzichè con la media? Vi allego ciò che vorrei provare a fare.
Non è la stessa domanda che hai fatto qui https://www.prorealcode.com/topic/grafico-renko/#post-95017
?
Non duplicare i post per favore! Grazie.
La media c’è già, intentevi le bande di bollinger?
R05Participant
Veteran
Si scusa Roberto. Ho trovato nel frattempo questo sistema però non riesco a sostituire la media con le bande di bollinger. Si a me interessano le bande di bollinger non le medie.
Questa è la definizione delle Bande di Bollinger, dove ho sotituito CLOSE con la tua variabile BARCLOSE
BBVal = 20 //20 periodi BB
BBdev = 2.0 //2.0 deviazione BB
BBavg = average[BBval](barclose) //BB mean (middle line)
BollUP = BBavg + ((std[BBval](barclose)) * BBdev) //BB Upper Band
BollDN = BBavg - ((std[BBval](barclose)) * BBdev) //BB Lower Band
Usa quella invece della media ed è fatto (non l’ho provata).
R05Participant
Veteran
Grazie Roberto. Ho provato a fare le modifiche e mi è uscito il sistema seguente.
defparam cumulateorders = false
bsize = 5 //renko size in points
orderstime = 300 //minimum seconds between 2 orders
boxsize = bsize*pipsize
once topprice = close
once bottomprice = close - boxsize*pipsize*2
if(close > topprice + boxsize*2) THEN
topprice = close
bottomprice = topprice - boxsize*2
barclose=topprice
ELSIF (close < bottomprice - boxsize*2) THEN
bottomprice = close
topprice = bottomprice + boxsize*2
barclose = bottomprice
ELSE
topprice = topprice
bottomprice = bottomprice
ENDIF
BBVal = 20 //20 periodi BB
BBdev = 2.0 //2.0 deviazione BB
BBavg = average[BBval](barclose) //BB mean (middle line)
BollUP = BBavg + ((std[BBval](barclose)) * BBdev) //BB Upper Band
BollDN = BBavg - ((std[BBval](barclose)) * BBdev) //BB Lower Band
if barclose<bolldn AND ABS(time-lasttime)>orderstime then
mmRENKO = mmRENKO[1]
else
mmRENKO = bollup
endif
if barclose < mmRENKO then
BUY 1 SHARES AT MARKET
EXITSHORT AT MARKET
lasttime=time
endif
if barclose>bollup AND ABS(time-lasttime)>orderstime then
mmRENKO = mmRENKO[1]
else
mmRENKO = bolldn
endif
if barclose < mmRENKO then
SELLSHORT 1 SHARES AT MARKET
SELL AT MARKET
lasttime=time
endif
A funzionare, funziona, nel senso che le operazioni le fa; però non fa quello che vorrei io. Non vorrei aver io sbagliato a inserire bollinger.
Nemmeno io so cosa vuoi fare.
Hai i riferimenti alle bande, quindi dovrai vereificare se i prezzi sono andati fuori, oppure se sono dentro.
R05Participant
Veteran
Si Roberto scusa la confusione. Volevo dire non vorrei aver io inserito bollinger all’interno del codice in modo sbagliato. Comunque con il codice che ho riportato io non fa quello che vorrei: a me servirebbe che il prezzo vada fuori Bollinger (ci sia una chiusura fuori, ad esempio un mattoncino verde abbia la parte superiore fuori bollinger) e poi quando c’è l’inversione (quando diventa rosso) mi entri short (in questo caso, essendo il renko, non c’è bisogno che si sia formato definitivamente il mattoncino rosso; anche se temporaneamente il mattoncino diventa rosso e poi sparisce, perchè non si è formato, non fa niente; l’importante è che entri quando ritorna dentro bollinger).
R05Participant
Veteran
Volevo dire alla fine del discorso nel messaggio di prima, è che l’importante è che apra la posizione quando rientra dentro bollinger.
Non capisco le righe 31-35 e 43-47, che vuoi fare?
Ad ogni modo l’ho modificato così (non riesco a provarlo):
defparam cumulateorders = false
bsize = 5 //renko size in points
orderstime = 300 //minimum seconds between 2 orders
boxsize = bsize*pipsize
once topprice = close
once bottomprice = close - boxsize*pipsize*2
ONCE CrossUP = 0
ONCE CrossDN = 0
if(close > topprice + boxsize*2) THEN
topprice = close
bottomprice = topprice - boxsize*2
barclose=topprice
ELSIF (close < bottomprice - boxsize*2) THEN
bottomprice = close
topprice = bottomprice + boxsize*2
barclose = bottomprice
ELSE
topprice = topprice
bottomprice = bottomprice
ENDIF
BBVal = 20 //20 periodi BB
BBdev = 2.0 //2.0 deviazione BB
BBavg = average[BBval](barclose) //BB mean (middle line)
BollUP = BBavg + ((std[BBval](barclose)) * BBdev) //BB Upper Band
BollDN = BBavg - ((std[BBval](barclose)) * BBdev) //BB Lower Band
IF CrossUP = 0 THEN
CrossUP = barclose > BollUP
CrossDN = 0
ENDIF
IF CrossDN = 0 THEN
CrossDN = barclose > BollUP
CrossUP = 0
ENDIF
IF barclose > BollDN AND CrossDN THEN
CrossDN = 0
BUY 1 SHARES AT MARKET //il BUY chiude automaticamente ogni posizione SHORT aperta
lasttime=time
ENDIF
IF barclose < BollUP AND CrossUP THEN
CrossUP = 0
SELLSHORT 1 SHARES AT MARKET //il SELLSHORT chiude automaticamente ogni posizione LONG aperta
lasttime=time
ENDIF
if barclose<bolldn AND ABS(time-lasttime)>orderstime then
mmRENKO = mmRENKO[1]
else
mmRENKO = bollup
endif
//if barclose < mmRENKO then
//BUY 1 SHARES AT MARKET
//EXITSHORT AT MARKET
//lasttime=time
//endif
if barclose>bollup AND ABS(time-lasttime)>orderstime then
mmRENKO = mmRENKO[1]
else
mmRENKO = bolldn
endif
//
//if barclose < mmRENKO then
//SELLSHORT 1 SHARES AT MARKET
//SELL AT MARKET
//lasttime=time
//endif
R05Participant
Veteran
Si Roberto hai ragione, le righe da 31-35 e 43-47 non sono molto chiare; siccome in quelle righe c’erano le medie allora le ho sostituite con bollinger, ma sicuramente ho sbagliato. Non saprei onestamente, ci ho provato
Comunque ho provato il codice, ma non fa ciò che vorrei. Mi fa aprire una sola operazione dall’8 marzo.
Come ti ha già scritto Nicolas da qualche parte, RENKO non può essere usato su strategie automatizzate.
Puoi cercare di imitarlo, ma non sarà facile, perché ProOrder basa la propria attività sui tempi, non sui ticks, per cui tu puoi costruire tutti i mattoni renko che vuoi nella tua strategia, ma poi la verifica viene fatta alla chiusura di una normale candela giapponese e tutti i tuoi calcoli non possono che ssere sballati.
R05Participant
Veteran
Va bene grazie Roberto della disponibilità. Mi arrendo, cercherò di testare altro.
La strategia che Roberto ha codificato è buona. Il problema è che la serie temporale per costruire un indicatore su scatole renko deve anche essere non dipendente dal tempo e senza matrici di dati è molto difficile farlo. È possibile trovare un codice relativo a una media mobile (con molte altre cose) per le scatole Renko in questo thread: Nuovo sistema Renko Per costruire una banda Bollinger completa, la parte più difficile sarebbe calcolare correttamente la deviazione standard su serie di dati non lineari. .