Buongiorno,
potreste aiutarmi a codificare in probacktest i seguenti indicatori (allego immagine)?
Indicatore “SMA20-SMA50”:
SMA20 = average[20,0](close)
SMA50 = average[50,0](close)
DIFFERENZA = SMA20 – SMA50
RETURN DIFFERENZA,0
Indicatore “EMA20-EMA50”:
EMA20 = average[20,1](close)
EMA50 = average[50,1](close)
DIFFERENZA = EMA20 – EMA50
RETURN DIFFERENZA,0
Come evidenziato dall’immagine allegata vorrei:
entrare Short quando entrambi gli indicatori sono rossi (27 luglio 2020)
uscire Short quando entrambi gli indicatori sono verdi (5 novembre 2020) .
entrare Long quando entrambi gli indicatori sono verdi (nell’immagine allegata entra long il 5 nov 2020)
uscire Long quando entrambi gli indicatori sono rossi (nell’immagine allegata esce long il 14 dic 2020).
Potreste aiutarmi a comprendere la logica utilizzata dal programma per il cambio di colore da rosso a verde di uno dei 2 indicatori?
Grazie.
Per favore usa il forum appropriato, come ben indicato in giallo qui sotto.
Per le strategie è ProOrder quello corretto.
Grazie 🙂
L’ho spostato io.
Una media è verde quando adesso è > rispetto alla candela precedente, altrimenti è rossa.
Appena posso ti creo la strategia.
Scusami, la mia indicazione di VERDE/ROSSO era per una media.
Qui è una differenza di medie, quindi il colore è VERDE quando la media veloce (20 periodi) è maggiore di quella lenta (a 50 periodi), altrimenti è ROSSA.
Ecco la strategia:
DEFPARAM CumulateOrders = false
Sma20 = average[20,0](close)
Sma50 = average[50,0](close)
Ema20 = average[20,1](close)
Ema50 = average[50,1](close)
Verde = ((Sma20 - Sma50) > 0) AND ((Ema20 - Ema50) > 0)
Rosso = ((Sma20 - Sma50) < 0) AND ((Ema20 - Ema50) < 0)
IF Verde AND Not LongOnMarket THEN
BUY 1 Contract AT Market
ENDIF
IF Rosso AND Not ShortOnMarket THEN
SELLSHORT 1 Contract AT Market
ENDIF
Buonasera Roberto,
grazie per la disponibilità. Tuttavia il programma non esegue le condizioni di entrata e uscita che ho individuato manualmente sul grafico allegato. Per esempio lunedi 04/02/2019 vorrei entrare short all’apertura dopo che entrambi gli indicatori siano diventati negativi (rossi) alla chiusura di venerdi 01/02/2019; chiudere la posizione short in data 13/02/2019 dopo che entrambi gli indicatori siano diventati positivi (verdi) alla chiusura della giornata precedente. Come puoi rilevare dal grafico, il colore degli indicatori passa da verde a rosso anche se continua a essere al di sopra della linea dello zero e viceversa… forse “l’anomalia” è proprio qui… Il programma invece entra long quando entrambi gli indicatori sono positivi (nello screeshot ho evidenziato i valori 0,00028 e 0,01426) – superiori alla linea dello zero, short quando entrambi gli indicatori sono negativi – inferiori alla linea dello zero.
Cosa vuyoi che sia VERDE o ROSSO, ciascuna media o la DIFFERENZA tra le medie?
Buondì Roberto,
ho risolto in questo modo, impostando il programma in modo entrare LONG all’apertura del giorno seguente se (EMA20-EMA50) “differenza tra le medie esponenziali alla chiusura barra in corso” sia > (EMA20-EMA50)[1] “differenza tra le medie esponenziali alla chiusura barra giorno precedente E che (SMA20-SMA50) “differenza tra le medie semplici alla chiusura barra in corso” sia > (SMA20-SMA50)[1] “differenza tra le medie semplici alla chiusura barra giorno precedente. Condizioni inverse per stop and reverse.
Leggevo che per poter richiamare un mio indicatore avrei potuto utilizzare la funzione CALL ma non ne sono venuto a capo.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
EMA20 = Exponentialaverage[20](Close)
EMA50 = Exponentialaverage[50](Close)
SMA20 = average[20](Close)
SMA50 = average[50](Close)
// Condizioni per entrare su posizioni long
indicator1 = (EMA20-EMA50)
indicator2 = (EMA20-EMA50)[1]
c1 = (indicator1 > indicator2)
indicator3 = (SMA20 – SMA50)
indicator4 = (SMA20 – SMA50)[1]
c2 = (indicator3 > indicator4)
IF c1 AND c2 THEN
BUY 1 SHARES AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
c3 = (indicator1 < indicator2)
c4 = (indicator3 < indicator4)
IF c3 AND c4 THEN
SELL AT MARKET
ENDIF
// Condizioni per entrare su posizioni short (sono cdz identiche all’uscita long)
c5 = (indicator1 < indicator2)
c6 = (indicator3 < indicator4)
IF c5 AND c6 THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
// Condizioni per uscire da posizioni short
c7 = (indicator1 > indicator2)
c8 = (indicator3 > indicator4)
IF c7 AND c8 THEN
EXITSHORT AT MARKET
ENDIF
Per favore usa sempre il pulsante “Insert PRT code” quando inserisci il codice nei tuoi post per facilitare la lettura degli altri.
Grazie 🙂
Per richiamare gli indicatori personalizzati si usa CALL, che è spiegata qui https://www.prorealcode.com/documentation/call/. In pratica prima dell’uguale si indicano tutti i parametri che l’indicatore restituisce con RETURN (se qualcuno non interessa occorre scrivere IGNORED e tra parentesi quadre occorre scrivere i valori su cui l’indicatore deve fare i propri calcoli (numero di periodi, ecc…).
Ad ogni modo se t’interessa chiedere qualcosa sugli indicatori apri un novo argomento nel forum di supporto ProBuilder.
Grazie mille Roberto! Buona domenica