Salve a tutti, sono un neofita sui trading system e sulla programmazione, ho un’idea che ho backtestato manualmente su eurjpy portando degli ottimi risultati, volevo chiedervi se potevate aiutarmi a tradurre la mia idea in codice.
Il sistema dovrebbe piazzare ogni giorno 2 ordini pendenti uno long e l’altro short dopo la candela delle 9:55 time frame 5 min su eurjpy. I 2 ordini dovranno essere distanti tra di loro di 15 pip, i target price e stop loss di entrambi gli ordini dovranno essere di 15 pip. Se uno dei 2 ordini dovesse raggiungere il target price l’altro pendente dovrebbe cancellarsi, se invece dovesse prendere lo stop la posizione si lascerà correre, magari raggiungendo l’altro target price dell altro ordine.
i 2 pendenti dovrebbero piazzarsi in maniera equidistante dalla candela dell 9:55, in poche parole la candela dovrebbe sempre trovarsi perfettamente in mezzo ai 2 pendenti, che a loro volta sono distanziati tra di loro da 15 pip.
Allego un’immagine per essere più chiaro.
>> Inserite il segno di spunta all’interno della casella sul vostro profilo, per aggiornare il vostro paese. <<
Sorry, mr Nicolas, i updated my profile selecting my country.
Sul forum italiano parla italiano, per favore. Grazie.
Ho già scritto qualcosa, però l’ostacolo principale sono quei trade dove si apre e si chiude nella stessa barra, in tal caso ProOrder non lo rileva ed occorre trovare delle alternative. Faccio ancora delle prove e ti faccio sapere.
Grazie mille per l’aiuto Roberto.
Ho preparato questo, l’ho provato sommariamente. Io ho indicato che deve operare (vedi i DEFPARAM all’inizio) tra le 09:55 e le 22:50, tu puoi variare gli orari, ma occorre mettere un limite prima della fine della giornata di trading, al fine di potere ricalcolare il risultato complessivo della strategia per il giorno dopo:
DEFPARAM CumulateOrders = FALSE
DEFPARAM FlatBefore = 095500
DEFPARAM FlatAfter = 225000
ONCE DistanzaPips = 15 * pipsize
ONCE Tradare = 1
ONCE OrarioCandela = 095500
ONCE PrezzoLong = 0
ONCE PrezzoShort = 0
ONCE MioProfitto = 0
IF IntraDayBarIndex = 0 THEN //azzerare tutte le variabili ad inizio giornata
Tradare = 1
PrezzoLong = 0
PrezzoShort = 0
MioProfitto = STRATEGYPROFIT //aggiornare il profitto complessivo
ENDIF
IF MioProfitto < STRATEGYPROFIT THEN //fermare il Trading dopo un profitto
Tradare = 0
ENDIF
IF OpenTime = OrarioCandela AND Not OnMarket THEN
IF range <= DistanzaPips THEN //operare solo se candela > 15 pips
MetaDistanza = (DistanzaPips - range) / 2
PrezzoLong = high + MetaDistanza
PrezzoShort = low - MetaDistanza
ELSE
PrezzoLong = 0
PrezzoShort = 0
ENDIF
ENDIF
IF Tradare AND Not LongOnMarket THEN
BUY 1 CONTRACT AT PrezzoLong STOP
ENDIF
IF Tradare AND Not ShortOnMarket THEN
SELLSHORT 1 CONTRACT AT PrezzoShort STOP
ENDIF
SET TARGET PROFIT DistanzaPips
SET STOP LOSS DistanzaPips
Ciao Roberto, innanzitutto grazie infinitamente per l’aiuto. Il sistema è perfetto sul piazzamento dei pendenti ed il calcolo dei stop e target. L’unica cosa che dovremmo modificare è il fatto che il sistema continua a girare finché non è in profitto. Il sistema dovrebbe avere 3 scenari possibili:
1 Aprire il trade arrivare a target chiudere la posizione ed eliminare l’altro pendente(ho verificato che il sistema effettivamente fa tutto questo quindi è ok)
2 Esegue il primo ordine va in stop apre il secondo ordine che arriva al suo target e si chiude, senza però riaprire un’altra posizione finché non arriva in profitto(che è come è impostato in questo momento il sistema), in questo modo avrei una giornata pari con uno stop ed un target.
3 esegue il primo ordine va in stop apre il secondo e va pure in stop, in questo modo il sistema dovrebbe fermarsi e non aprire altre posizioni.
Se riesci a modificare questa cosa il sistema sarebbe esattamente per come l’avevo immaginato, ti ringrazio ancora una volta per la tua disponibilità.
Ti allego uno screen per essere più chiaro.
2 Esegue il primo ordine va in stop apre il secondo ordine che arriva al suo target e si chiude, senza però riaprire un’altra posizione finché non arriva in profitto(che è come è impostato in questo momento il sistema), in questo modo avrei una giornata pari con uno stop ed un target.
Il PRIMO ordine va in stop, il SECONDO arriva a target e si deve fermare? Come fa, se non è già in profitto, ad arrivare al profitto se non deve aprire più posizioni?
Scusami Roberto mi sono spiegato male. Intendevo dire che dopo che la seconda posizione arriva a target non voglio che si aprano altre posizioni per portarmi per forza la giornata in profitto. In quel caso avrei un pari, uno stop preso sulla prima posizione ed un profit nella seconda 1 a 1, in quelle giornate che si verifica questa condizione io voglio finire in pari. Il sistema che mi hai scritto invece continua ad aprire posizioni finché non arriva il profitto.
Un altro chiarimento, dopo il primo stop deve proseguire sia LONG che SHORT, oppure solo nella direzione opposta a quella dove ha preso lo stop?
Se ha preso lo stop su un LONG, deve continuare solo su eventuali SHORT oppure anche nuovamente LONG?
Soltanto nella direzione opposta a quella che ha preso lo stop, prende lo stop, apre l’altro pendente nella direzione opposta se va a target bene se no potrebbe andare tranquillamente anche in stop.
Quindi prendendo lo stop su un LONG contemporaneamente apre lo SHORT sempre con il target a 15 pips e stop a 15 pips.
Questo dovrebbe funzionare correttamente, tranne quando vi è un’uscita ed un’entrata contemporaneamente sulla stessa barra (questo si può risolvere solo usando il supporto MTF con un TF più piccolo dei 5 minuti, 1 minuto, oppure ancora inferiore):
DEFPARAM CumulateOrders = FALSE
DEFPARAM FlatBefore = 095500
DEFPARAM FlatAfter = 225000
ONCE DistanzaPips = 15 * pipsize
ONCE TradareLong = 1
ONCE TradareShort = 1
ONCE OrarioCandela = 095500
ONCE PrezzoLong = 0
ONCE PrezzoShort = 0
ONCE MioProfitto = 0
IF IntraDayBarIndex = 0 THEN //azzerare tutte le variabili ad inizio giornata
TradareLong = 1
TradareShort = 1
PrezzoLong = 0
PrezzoShort = 0
MioProfitto = STRATEGYPROFIT //aggiornare il profitto complessivo
ENDIF
IF STRATEGYPROFIT > MioProfitto THEN //fermare il Trading dopo un profitto
TradareLong = 0
TradareShort = 0
PrezzoLong = 0
PrezzoShort = 0
ENDIF
IF STRATEGYPROFIT < MioProfitto AND Not OnMarket THEN
IF LongOnMarket[1] THEN
TradareLong = 0
PrezzoLong = 0
MioProfitto = STRATEGYPROFIT //aggiornare il profitto complessivo
ELSIF ShortOnMarket[1] THEN
TradareShort = 0
PrezzoShort = 0
MioProfitto = STRATEGYPROFIT //aggiornare il profitto complessivo
ENDIF
ENDIF
IF OpenTime = OrarioCandela AND Not OnMarket THEN
IF range <= DistanzaPips THEN //operare solo se candela > 15 pips
MetaDistanza = (DistanzaPips - range) / 2
PrezzoLong = high + MetaDistanza
PrezzoShort = low - MetaDistanza
ELSE
PrezzoLong = 0
PrezzoShort = 0
ENDIF
ENDIF
IF TradareLong AND PrezzoLong AND Not LongOnMarket THEN
BUY 1 CONTRACT AT PrezzoLong STOP
ENDIF
IF TradareShort AND PrezzoShort AND Not ShortOnMarket THEN
SELLSHORT 1 CONTRACT AT PrezzoShort STOP
ENDIF
SET TARGET PROFIT DistanzaPips
SET STOP LOSS DistanzaPips
Ciao Roberto, in realtà il sistema continua ad aprire ordini che non dovrebbero essere aperti, invio uno screen per mostrarti nel dettaglio.
Come ti ho detto, quando apertura/chiusura, o viceversa, sono sulla stessa barra il problema NON si può risolvere se non utilizzando TF inferiori mediante il supporto MTF (che è in fase di beta test ed è disponibile sui conti demo e, a richiesta, anche su quelli reali).
Ciao Roberto, grazie ancora per l’aiuto nell aver creato il codice. Il trading system è perfetto, ho capito che la chiusura e contemporanea apertura sulla stessa candela non si può fare. Volevo chiederti invece se si potrebbe all’apertura di uno dei due pendenti cancellare automaticamente l’altro pendente, così da lasciar andare il trade a target o in stop senza aprire altre posizioni. Grazie ancora per la tua disponibilità