chiusure frazionate formula gozzi per 2 contratti
Forums › ProRealTime forum Italiano › Supporto ProOrder › chiusure frazionate formula gozzi per 2 contratti
- This topic has 12 replies, 2 voices, and was last updated 2 years ago by romanelli4.
-
-
08/10/2022 at 12:01 PM #198871
buongiorno,
ho un ts che entra con 3 contratti e gli chiedo di uscire un contratto alla volta
1 contratto a 60 punti di gain, 1 a 90 ed l’ultimo a 130.
dopo aver chiuso il primo metto lo stop in pari.
ho usato delle stringhe di Roberto programmate per 2 contratti e non mi riesce farle funzionare per 3 contratti.
il primo lo chiude correttamente, il secondo lo salta proprio ed il terzo lo chiude correttamente.
mi chiude poi in pari il contratto rimasto aperto.
allego foto
grazie per l’aiuto
Max
formula nata per 2 contratti che con 3 non funziona1234567891011121314151617181920If not OnMarket thenPareggio = 0EndifIf ((TradePrice-close) >= 60* pipsize) and Pareggio = 0 then//60exitshort 1 contracts at MarketPareggio = 1EndifIf Pareggio = 1 thenexitshort at (TradePrice(3)-1*pipsize) StopEndif//If shortOnMarket AND (tradeprice-close)>=60*pipsize THEN//90//exitshort 1 contract AT MARKET//ENDIFIf shortOnMarket AND (tradeprice-close)>=90*pipsize THEN//90exitshort 1 contract AT MARKETENDIFIf shortOnMarket AND (tradeprice-close)>=130*pipsize THEN//130exitshort 1 contract AT MARKETENDIF08/10/2022 at 2:07 PM #198883Perché scrivi TradePrice(3)?
TradePrice(1) dovrebbe, in teoria, essere la chiusura appena fatta di una posizione, in realtà credo che fino alla chiusura della barra non sia così, in quanto solo allora si saprà se l’ordine di uscita è andato a buon fine o no, quindi è il prezzo di ENTRATA.
TradePrice(2) dovrebbe essere, quando funzionerà correttamente, il prezzo di uscita dell’ultima posizione dell’operazione precedente.
TradePrice(3) dovrebbe essere, quando funzionerà correttamente, il prezzo di uscita della penultima posizione dell’operazione precedente.
Aggiungi alla fine tuo codice le seguenti righe per osservare che prezzi ti vengono indicati:
123GraphOnPrice TradePrice(1) coloured(255,0,0,255) //RossoGraphOnPrice TradePrice(2) coloured(0,128,0,155) //VerdeGraphOnPrice TradePrice(2) coloured(0,0,255,255) //Blù08/10/2022 at 5:35 PM #198899grazie Roberto,
ecco cosa fa:
il tradeprice(1) fa si che chiuda correttamente il contratto 1 a 60pt di gain
ma poi il contratto 2 da 90pt lo calcola non dal prezzo di entrata ma dalla chiusura a 60 pt per cui lo chiude a 60+90=150pt .
mette anche lo stop a pareggio alla chiusura del contratto 1 a 60pt e non sulla apertura della posizione
come si può risolvere?
Max
08/10/2022 at 7:51 PM #198913Se acquisti 3 contratti in un’unica volta puoi usare TradePrice(1), o solo TradePrice.
Se, invece, accumuli 3 posizioni la cosa si complica. Non puoi scegliere te quale contratto chiudere, ma ProOrder usa la regola FIFO, chiudendo sempre quello aperto per primo (il più vecchio), penso che sia quello che vuoi. Però devi tenere conto che dopo la prima chiusura parziale, scalano tutti di una posizione, perché TRADEPRICE è il prezzo dell’ultima operazione, che sia un’apertura o una chiusura.
08/10/2022 at 9:27 PM #198924salve grazie Roberto
ne vendo 3 tutti insieme
ma non fa lo stesso
vorrei
vendere tre contratti ad x tutti insieme
a 60 di gain ne chiude 1 e mette stop a pareggio su x
a 90 di gain da x ne chiude un’altro e mantiene lo stop a pareggio su x
a 130 di gain da x chiude l’utimo.
vorrei riuscire a fare questo
ma al momento non ci sono riuscito
Un Saluto
Max
08/10/2022 at 10:27 PM #198928Non li vendi insieme, dal momento che vuoi effettuare 3 uscite.
Comunque interessa più se li acquisti insieme oppure no.
08/11/2022 at 9:21 AM #198939ho provato cosi12345678910111213141516171819202122232425262728293031323334353637383940if not shortonmarket and myResistenza and c1 and orario and c2 thenmystop=highmyprofit=open-50ENDIF// Condizioni per uscire da posizioni shortIf shortOnMarket AND close> mystop THENexitshort AT MARKETENDIFif myprofit thenexitshort 1 contract at marketendif///---------------contratto 2--------------------------------if not shortonmarket and myResistenza and c1 and orario and c2 thenmystop2=highmyprofit2=open-70sellshort 1 CONTRACTS AT low[1]-1.4 limitendif// Condizioni per uscire da posizioni longIf shortOnMarket AND close> mystop2 THENexitshort AT MARKETENDIFif myprofit2 thenexitshort 1 contract at marketENDIF//---------------contratto 3----------------------------------if not shortonmarket and myResistenza and c1 and orario and c2 thenmystop3=highmyprofit3=open-90sellshort 1 CONTRACTS AT low[1]-1.4 limitendif// Condizioni per uscire da posizioniIf shortOnMarket AND close> mystop3 THENexitshort AT MARKETENDIFif myprofit3 thenexitshort 1 contract at marketENDIFho provato a venderli separati per chiuderli separati
ma non funziona
08/11/2022 at 11:28 AM #198952mancava una riga ma il risultato è il solito
123456789101112131415161718192021222324252627282930313233343536373839if not shortonmarket and myResistenza and c1 and orario and c2 thenmystop=highmyprofit=open-50sellshort 1 CONTRACTS AT low[1]-1.4 limitENDIF// Condizioni per uscire da posizioni longIf shortOnMarket AND close> mystop THENexitshort AT MARKETENDIFif myprofit thenexitshort 1 contract at marketendif///---------------contratto 2--------------------------------if not shortonmarket and myResistenza and c1 and orario and c2 thenmystop2=highmyprofit2=open-70sellshort 1 CONTRACTS AT low[1]-1.4 limitendif// Condizioni per uscire da posizioni longIf shortOnMarket AND close> mystop2 THENexitshort AT MARKETENDIFif myprofit2 thenexitshort 1 contract at marketENDIF//---------------contratto 3----------------------------------if not shortonmarket and myResistenza and c1 and orario and c2 thenmystop3=highmyprofit3=open-90sellshort 1 CONTRACTS AT low[1]-1.4 limitendif// Condizioni per uscire da posizioni longIf shortOnMarket AND close> mystop3 THENexitshort AT MARKETENDIFif myprofit3 thenexitshort 1 contract at marketENDIF08/11/2022 at 12:01 PM #198953Il tuo esempio non posso provarlo, inoltre non capisco bene l’entrate separate e non so se c’è un TP ad uno SL.
Questo esempio funziona con i valori di profitto indicati nel tuo primo post:
1234567891011121314151617IF close CROSSES UNDER average[200,0](close) AND Not OnMarket THENSELLSHORT 3 contracts at Marketset stop pLoss 100set target pProfit 500ENDIFPips = PositionPrice * PositionPerf / PipSizeIF OnMarket THENIF Pips >= 130 THEN //Oltre 130 punti esci completamenteExitShort at MarketELSIF Pips >= 90 AND abs(CountOfPosition) = 2 THEN //Oltre i 90 punti esci una posizione (se era già uscito precedentemente di una)ExitShort 1 contract at MarketELSIF Pips >= 60 AND abs(CountOfPosition) = 3 THEN //Oltre i 30 punti chiudi una posizione (se ci sono sempre 3 contratti a mercato)ExitShort 1 contract at MarketENDIFENDIF//graph Pips08/11/2022 at 12:55 PM #198961grazie innanzi tutto!
ma non funziona
ho cambiato i punti di gain in 30 60 80 per vedere bene il problema graficamente
allego foto
08/11/2022 at 1:19 PM #198964Il mio sistema con 3 contratti insieme funziona.
08/11/2022 at 4:37 PM #198971Il tuo codice è un pò macchinoso e con alcune pecche logiche:
- sellshort 3 CONTRACTS AT low[1]-1.4 limit usa un ordine LIMIT, ma non è detto che il prezzo corrente sia per forza minore del minimo precedente, per cui dovresti verificare i due prezzi e usare LIMIT o STOP secondo il caso (se usi un tipo errato il broker fa entrate a mercato, oppure può rifiutare l’ordine ed interrompere la strategia)
- myprofit = open – 50 (come pure gli altri due calcoli) utilizzano OPEN, invece del prezzo corrente (CLOSE), ma se c’è stato un forte spike la candela potrebbe anche avere fatto più di 50 punti che in realtà si può trovare SOPRA il prezzo d’entrata ed avresti un profitto in negativo
- quando usi valori numerici da usare in espressioni dove ci sono dei prezzi (come nel caso di 1.4), converti i numeri in prezzo moltiplicandoli per PIPSIZE, quindi è logicamente corretto scrivere low[1] – 1.4 * pipsize; con indici come il DAX può risultare ininfluente, ma se provi la stessa strategia su EUR/USD ottieni prezzi negativi (1.03 – 1.4)
- la riga 10, if myprofit then, è sempre vera, perché contiene un prezzo (qualunque esso sia) ed è quindi SEMPRE <> 0, quindi ha un valore logico vero, per cui appena entra a mercato esce.
Macchinoso perché puoi acuistare 3 contratti insieme, invece di fare 3 acquisti separatamente (che in ogni caso vengono raggruppati, perché gli ordini NON vengono eseguiti all’istante, ma solo alla fine del codice, quindi ProOrder li aggrega).
Io ho provato a riscriverlo cercando di seguire quanto più possibile le tue impostazioni e adattando i parametri al DAX, 15 minuti, con 15K unità sul grafico:
1234567891011121314151617181920212223242526272829303132333435ONCE c1 = 0myResistenza = 1c2 = 1Orario = 1IF close CROSSES UNDER average[200,0](close) AND Not ShortOnMarket THENc1 = 1ENDIF//if not shortonmarket and myResistenza and c1 and orario and c2 thenEntrata = min(low,low[1]) - 20.0 * PipSizemystop = max(high,high[1])myprofit = max(open,close) - 30 * PipSizemyprofit2 = max(open,close) - 60 * PipSizemyprofit3 = max(open,close) - 180 * PipSizeIF close > Entrata THENsellshort 3 CONTRACTS AT Entrata stopELSIF close < Entrata THENsellshort 3 CONTRACTS AT Entrata limitENDIFENDIF// Uscita in StopIf ShortOnMarket AND close >= mystop THENexitshort AT MARKETENDIF// Condizioni per uscire da posizioni shortIF ShortOnMarket THENc1 = 0IF close <= myprofit3 THENExitShort at MarketELSIF close <= myprofit2 AND abs(CountOfPosition) = 2 THENExitShort 1 contract at MarketELSIF close <= myprofit AND abs(CountOfPosition) = 3 THENExitShort 1 contract at MarketENDIFENDIF1 user thanked author for this post.
08/11/2022 at 8:46 PM #198974Roberto grazie mille davvero,
ci lavoro con calma
intanto buon ferragosto!!!!
Max
1 user thanked author for this post.
-
AuthorPosts