R05Participant
Veteran
Gent.mi vorrei costruire un trading system che riesca a vendere il più possibile sui massimi e a comprare il più possibile sui minimi. Per l’individuazione si questi massimi e minimi vorrei partire da questo: cioè vorrei prendere in considerazione solo quei massimi e minimi che si formano dopo degli eccessi (parola un pò vaga effettivamente, perchè come si fa a considerare un eccesso?) e iniziare con quelli che si formano dopo che il sottostante, in questo caso dax, abbia fatto almeno 80 punti a rialzo o al ribasso. Quindi dopo che ha fatto 80 punti posso incominciare a considerare un max e min.
Ho messo giù un sistema ma mi manca questa informazione. E’ una prima bozza.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 173000
// Condizioni per entrare su posizioni long
c1 = dlow(0)
if low = c1 then
BUY 1 CONTRACT AT low[1] stop
ENDIF
// Condizioni per entrare su posizioni short
c2 = dhigh(0)
IF high = c2 THEN
SELLSHORT 1 CONTRACT AT high[1] stop
ENDIF
// Stop e target
SET STOP pLOSS 10
SET TARGET pPROFIT 15
Innanzitutto le tue righe 9 e 16 ben difficilmente saranno vere, perché è quasi impossibile che un prezzo possa essere uguale ad un altro, secondo me dovresti usare <= oppure >=.
Dve avere fatto 80 punti da quando?
R05Participant
Veteran
Si Roberto grazie. Le linee 9 e 16 non me le ha fatte modificare dandomi errore, ma ho modificato le linee 11 e 18 e mi fa entrare sul massimo o minimo della candela precedente alla candela di setup, non male, da approfondire perchè sembra interessante (non avevo intuito questo possibile modo di entrare).
Ecco il codice aggiornato.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 173000
// Condizioni per entrare su posizioni long
c1 = dlow(0)
if low <= c1 then
BUY 1 CONTRACT AT low[1] stop
ENDIF
// Condizioni per entrare su posizioni short
c2 = dhigh(0)
IF high >= c2 THEN
SELLSHORT 1 CONTRACT AT high[1] stop
ENDIF
// Stop e target
SET STOP pLOSS 10
SET TARGET pPROFIT 15
Riguardo la tua domanda lo vorrei fare, tendenzialmente, 80 punti dal prezzo di apertura delle 9:00; anche se poi vorrei fare una prova anche dall’ultimo minimo o massimo registrato perchè, come nell’esempio che allego, il massimo avuto dopo il candelone verde non ha superato di 80 punti il prezzo d’apertura, però rispetto ai minimo di giornata si, e quindi quel movimento lo vorrei comunque considerare in quanto abbastanza grosso, e quindi presumibilmente può essere un eccesso da cui dovrebbe, si spera, rifiatare e stornare un pò.
Hai ragione, erano le righe 11 e 18 da cambiare.
Alla riga 7 inserisci (puoi usare anche OpenTime, invece di Time, ma in questo caso dovrai usare open invece di close):
IF time = 090000 THEN
PrezzoOre9 = close
ENDIF
c3 = abs(close - PrezzoOre9) >= 80 * pipsize
ed alle righe 11 e 18 aggiungi con AND la condizione C3.
R05Participant
Veteran
Grazie Roberto, ho aggiunto il tuo codice per la condizione di apertura se il prezzo fa 80 punti. Funziona perfettamente.
R05Participant
Veteran
Nel fare le prove e quindi nel cercare di migliorare il codice, vorrei provare questa condizione: vorrei mettere lo stop sopra il massimo o sotto il minimo e il sistema deve aprire solo quelle operazioni che non superano un tot di stop: cioè se tra la’apertura long, ad esempio, e il minimo della barra precedente ci sono più di 10 punti non mi deve aprire la posizione. Si può fare?
Di quale Minimo e Massimo stai parlando?
Che cos’è lo Stop di cui hai scritto?
R05Participant
Veteran
Si Roberto ora mi chiarisco meglio. Invece di mettere uno stop fisso, vorrei provare a mettere lo stop sul massimo o minimo più alti: ti allego la schermata di esempio: la candela 1 è il massimo di giornata e supera 80 punti dall’apertura, poi al punto 2 c’è un nuovo massimo torna indietro: l’apertura è sul massimo della candela 1, mentre lo stop loss lo vorrei provare a mettere sul massimo della candela 2 che a quel punto è diventato il massimo di giornata.
Vorrei, a questo punto, però, scartare quei trade la cui differenza tra massimo o minimo e prezzo di apertura sia superiore i 10 punti come stop (se mettessi uno stop loss fisso mi farebbe fare qualsiasi operazione anche se la differenza tra massimo e prezzo di apertura è superiore a 10 punti).
R05Participant
Veteran
Si scusa Roberto. La allego.
R05Participant
Veteran
Ho sbagliato. la foto giusta è questa
Intendi il massimo delle giornata in corso?
Può cambiare più volte, arrivati al massimo della candela 1, cosa deve fare la strategia, entra subito? oppure aspetta che faccia un altro massimo? E se il nuovo massimo non lo fa e va subito giù?
Un conto è osservare un grafico DOPO che i fatti sono accaduti, un altro è cercare di precederli.
Occorre una regola ben definita di quando entrare (e di quando uscire).
R05Participant
Veteran
Si Roberto ora ti dico quello che vorrei fare. Riporto il codice completo aggiornato.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 173000
IF time = 090000 THEN
PrezzoOre9 = close
ENDIF
c3 = abs(close - PrezzoOre9) >= 80 * pipsize
// Condizioni per entrare su posizioni long
c1 = dlow(0)
if low <= c1 and c3 then
BUY 1 CONTRACT AT low[1] stop
ENDIF
// Condizioni per entrare su posizioni short
c2 = dhigh(0)
IF high >= c2 and c3 THEN
SELLSHORT 1 CONTRACT AT high[1] stop
ENDIF
// Stop e target
SET STOP pLOSS 10
SET TARGET pPROFIT 15
Esempio short (immagine allegata, dax time frame 15 minuti): il sistema dopo che il prezzo ha fatto almeno 80 punti, prendo in considerazione un eventuale short, perchè potrebbe essere più probabile uno storno. Però, non viene subito aperta, a prescindere, una posizione short; perchè oltre a questa condizione vorrei che se ne verificassero altre due: la prima è che vorrei entrare se si verifica una candela che contiene il massimo di giornata, a quel momento, e quindi entrare short alla rottura del minimo della candela stessa. Inoltre, come altra condizione, invece che mettere uno stop fisso di 15 punti (che mi farebbe aprire qualsiasi operazione) vorrei mettere lo stop sopra il massimo della candela di setup, però lo stop (massimo della candela – apertura posizione) non deve superare 15 punti (perchè il rischio sarebbe troppo alto; sto valutando quanti punti potrebbe essere meglio): se lo stop supera 15 punti, anche se ci sono le prime due condizioni (gli 80 punti e la rottura del minimo della candela col massimo) non deve aprire nessuna posizione.
Per vedere i Minimi/Massimi di giornata puoi anche mettere sul grafico questo indicatore (l’ho fatto per fare la prova):
DEFPARAM CalculateOnLastBars = 1000
DEFPARAM DrawOnLastBarOnly = true
IF BarIndex = 0 OR IntraDayBarIndex = 0 THEN
Massimo = 0
Minimo = 9999999
ENDIF
Minimo = min(Minimo,low)
Massimo = max(Massimo,high)
DRAWHLINE(Massimo) coloured(0,192,0,255)
DRAWHLINE(Minimo) coloured(0,192,0,255)
RETURN
Prova a verificare se questa versione, modificata, fa l’entrate giuste, poi vederemo lo SL e TP:
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 173000
IF OnMarket THEN
PrezzoShort = 0
PrezzoLong = 0
ENDIF
if PrezzoLong THEN
BUY 1 CONTRACT AT PrezzoLong stop
ENDIF
if PrezzoShort THEN
SELLSHORT 1 CONTRACT AT PrezzoShort stop
ENDIF
IF time = 090000 THEN
PrezzoOre9 = close
ENDIF
c3 = abs(close - PrezzoOre9) >= 80 * pipsize
// Condizioni per entrare su posizioni long
c1 = dlow(0)
if low <= c1 and c3 then
PrezzoLong = high
BUY 1 CONTRACT AT PrezzoLong stop
ENDIF
// Condizioni per entrare su posizioni short
c2 = dhigh(0)
IF high >= c2 and c3 THEN
PrezzoShort = low
SELLSHORT 1 CONTRACT AT PrezzoShort stop
ENDIF
// Stop e target
SET STOP pLOSS 10
SET TARGET pPROFIT 15
graphonprice Dlow(0) coloured(192,0,0,255) AS "Dlow"
graphonprice Dhigh(0) coloured(0,192,0,255) AS "Dhigh"
graphonprice PrezzoOre9 coloured(0,0,255,255) AS "Ore9"
Osserva nella foto le tre linee stampate sul grafico con le ultime 3 righe che ho aggiunto, in tal mode segui i valori in mdodo molto più semplice.