Ciao!
Vorrei gentilmente capire una cosa, cosa significa questa dicitura nel codice:
c1 = (close +2 > open)
c2 = (close -2 < open
Lo chiedo perchè ho notato che su backtest, così mi da un risultato 10 volte superiore rispetto a:
c1 = (close > open)
c2 = (close < open
Immagino che
(close +2 > open) //o -2
significhi, per chi l’ha scritto, 2 pips sopra/sotto il prezzo di chiusura.
E’ comunque scritto in modo logicamente scorretto, può andare bene col Dax o SP500 o simili indici o azioni, ma NON funzionerebbe con le coppie valutarie.
Se si somma/sottrae 2 al DAX si ottiene un risultato corretto perché non c’è bisogno di una conversione, ma se si fa con Eur/Usd, ad esempio, sommare 2 al prezzo di chiusura somma 20.000 pips, non 2, in quanto 1.2350 non darebbe 1.2352, ma 3.2350!
Quindi è bene usare PIPSIZE in modo che la conversione, quando necessaria, la faccia il sistema internamente, in modo che il codice funzioni su tutti gli strumenti, quindi la riga di cui sopra dovrebbe essere scritta così:
(close + 2*pipsize > open) //o -2*pipsize
Ok Roberto ti ringrazio, però ho fatto entrambe le prove, con entrambi i codici e ho notato che comunque non apre la posizione a 2 pips di distanza dall’apertura della nuova candela, come mai? Guarda, ti inoltro i due trading system con entrambi i codici che ho usato, riusciresti gentilmente a provarli e a spiegarmi il motivo? Il TF che ho usato è 1 ora e i trading system sono per il DAX LONG.
Grazie mille!
Si prega di inviare il codice completo direttamente nell’argomento, dovrebbe essere più veloce per capire dove si trova il problema nel codice.
Le variabili sono SEMPRE vere, perché CLOSE+2 sarà sempre maggiore (o minore nel caso di -2) di CLOSE da solo! La sola utilità delle due variabili è di stabilire se andare LONG o SHORT, non influiscono sul prezzo.
A parte questo, una volta verificata la suddetta condizione entra al prezzo di MERCATO, come gli hai detto tu, quindi a qualunque prezzo ci sia in quel preciso istante in cui l’ordine viene piazzato.
Se vuoi che apra la posizione a quel prezzo specifico devi mettere un ordine pendente, tipo
BUY size CONTRACTS AT Close + 2 * pipsize STOP
SELLSHORT size CONTRACTS AT Close - 2 * pipsize STOP
A ok ho capito, il fatto è che sul dax lo devi mettere ad almeno 10 pips di distanza dal prezzo attuale altrimenti non te lo piazza.. Va be.. grazie mille Roberto, buona serata!
Scusami Roberto, una domanda.. Ma se io volessi che invece la posizione si chiuda se il prezzo torna allo stesso livello del prezzo di apertura.. Come posso fare (se si può fare)?
Oppure, ancora meglio.. Se quando torna al prezzo d’apertura chiude la posizione e la apre nel verso opposto.. (se non si può fare sul prezzo d’apertura va bene anche che la apre al contrario una volta preso lo stop) Grazie mille!!
Per chiuderla al prezzo d’apertura basta mettere un’ordine STOP pendente, SELL se eri Long oppure EXITSHORT se eri Short, il prezzo d’apertura te lo fornice TRADEPRICE(1):
SELL AT TRADEPRICE(1) STOP //esci dal Long
SELLSHORT AT TRADEPRICE(1) STOP //entra Short per il reverse
//
EXITSHORT AT TRADEPRICE(1) STOP //esci dallo Short
BUY AT TRADEPRICE(1) STOP //entra Long per il reverse
Dovrai mettere tu le condizioni per fare queste operazioni, nell’ordine in cui sono scritte finiresti per uscire in SL dal long, entrare Short, Uscire subito dallo Short e rientrare immediatamente Long (da dove eri uscito in SL). Sono solo esempi di codice, sta a te utilizzarli nel modo più appropriato per te.
Se, invece, non vuoi usare ordini pendenti, puoi fare una verifica alla chiusura della candela:
IF close <= TRADEPRICE(1) THEN
SELL AT MARKET //per i Long
SELLSHORT 1 CONTRACT AT MARKET //Reverse
ENDIF
//
IF close >= TRADEPRICE(1) THEN
EXITSHORT AT MARKET //per gli Short
BUY 1 CONTRACT AT MARKET //Reverse
ENDIF
Ok perfetto! Provo subito un backtest e ti faccio sapere, grazie! 🙂
Ok l’ho provato, ma secondo me.. Non va bene ahah Mi perde tutto nel giro di qualche giorno!
DEFPARAM FLATBEFORE = 090000
DEFPARAM FLATAFTER = 180000
c1 = (close[0] > open[0])
c2 = (close[0] < open[0])
IF c1 AND NOT LONGONMARKET THEN
BUY 1 CONTRACT AT MARKET
ENDIF
IF close <= TRADEPRICE(1) AND LONGONMARKET THEN
SELL AT MARKET
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
IF c2 AND NOT SHORTONMARKET THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
IF close >= TRADEPRICE(1) AND SHORTONMARKET THEN
EXITSHORT AT MARKET
BUY 1 CONTRACT AT MARKET
ENDIF
set stop ploss 10
set target profit 15
Su questo non c’è dubbio!
Il codice è neutro, non fa né guadagnare, né perdere. Dipende da come lo usi.
Nel caso sopra entri long appena una candela chiude Long e viceversa per gli short, ma anche una lunga pin bar di una solo pip di corpo può essere long o short, quindi è molto probabile che tu entri nel verso sbagliato!
Dovrai usare il codice in una tua strategia, è ovvio che un esempio tanto per fare non da risultati positivi.
Guarda ti spiego subito la strategia dell’autotrading che sto testando in demo e che sta dando ottimi risultati, ma vorrei ottimizzarlo.. In pratica entro su ogni candela da un’ora appena aprono, nel verso in cui si muove il prezzo.. però vorrei appunto che se il prezzo torna indietro, me la chiude subito a 0 in modo da pagarci solo lo spread al massimo, e quando chiude vorrei appunto si aprisse al contrario come ti dicevo.. Non so se mi sono spiegato bene 🙂
Il problema è che se metti un ordine pendente subito, ad esempio fai il BUY a mercato e metti subito un pendente SELL al prezzo d’entrata rischi di uscire immediatamente!
Se verifichi il prezzo alla chiusura della candela, rischi, col DAX ad 1 ora, di essere ben oltre lo SL desiderato!
Un’alternativa è quella di usare il pendente SELL sul prezzo d’entrata, ma metterlo alla candela successiva, cioè quando sei già LongOnMarket, sperando che, in quell’ora, il DAX non ti sia andato troppo contro!
Se hai seguito questo recentissimo topic di Nicolas (https://www.prorealcode.com/topic/betatesting-multitimeframe-support-automatic-trading/), oppure lo leggi adesso, vedrai che la versione MTF (Multi Time Frame) è già in beta test agli sviluppatori e Nicolas la sta provando, quindi a breve (forse non troppo breve… speriamo entro fine estate!) il problema sarà risolto, perché tu potrai usare parti di codice Daily, alcune h4, altre h1 ed infine scegliere il TF di default, 1 minuto o magari inferiore, che verrà utilizzato per i controlli da fare nell’immediato!
Wow perfetto, non l’ho letto, faccio subito e seguo gli sviluppi futuri! Grazie mille come sempre!