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
If not OnMarket then
Pareggio = 0
Endif
If ((TradePrice-close) >= 60* pipsize) and Pareggio = 0 then//60
exitshort 1 contracts at Market
Pareggio = 1
Endif
If Pareggio = 1 then
exitshort at (TradePrice(3)-1*pipsize) Stop
Endif
//If shortOnMarket AND (tradeprice-close)>=60*pipsize THEN//90
//exitshort 1 contract AT MARKET
//ENDIF
If shortOnMarket AND (tradeprice-close)>=90*pipsize THEN//90
exitshort 1 contract AT MARKET
ENDIF
If shortOnMarket AND (tradeprice-close)>=130*pipsize THEN//130
exitshort 1 contract AT MARKET
ENDIF
Perché 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:
GraphOnPrice TradePrice(1) coloured(255,0,0,255) //Rosso
GraphOnPrice TradePrice(2) coloured(0,128,0,155) //Verde
GraphOnPrice TradePrice(2) coloured(0,0,255,255) //Blù
grazie 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
Se 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.
salve 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
Non li vendi insieme, dal momento che vuoi effettuare 3 uscite.
Comunque interessa più se li acquisti insieme oppure no.
if not shortonmarket and myResistenza and c1 and orario and c2 then
mystop=high
myprofit=open-50
ENDIF
// Condizioni per uscire da posizioni short
If shortOnMarket AND close> mystop THEN
exitshort AT MARKET
ENDIF
if myprofit then
exitshort 1 contract at market
endif
///---------------contratto 2--------------------------------
if not shortonmarket and myResistenza and c1 and orario and c2 then
mystop2=high
myprofit2=open-70
sellshort 1 CONTRACTS AT low[1]-1.4 limit
endif
// Condizioni per uscire da posizioni long
If shortOnMarket AND close> mystop2 THEN
exitshort AT MARKET
ENDIF
if myprofit2 then
exitshort 1 contract at market
ENDIF
//---------------contratto 3----------------------------------
if not shortonmarket and myResistenza and c1 and orario and c2 then
mystop3=high
myprofit3=open-90
sellshort 1 CONTRACTS AT low[1]-1.4 limit
endif
// Condizioni per uscire da posizioni
If shortOnMarket AND close> mystop3 THEN
exitshort AT MARKET
ENDIF
if myprofit3 then
exitshort 1 contract at market
ENDIF
ho provato a venderli separati per chiuderli separati
ma non funziona
mancava una riga ma il risultato è il solito
if not shortonmarket and myResistenza and c1 and orario and c2 then
mystop=high
myprofit=open-50
sellshort 1 CONTRACTS AT low[1]-1.4 limit
ENDIF
// Condizioni per uscire da posizioni long
If shortOnMarket AND close> mystop THEN
exitshort AT MARKET
ENDIF
if myprofit then
exitshort 1 contract at market
endif
///---------------contratto 2--------------------------------
if not shortonmarket and myResistenza and c1 and orario and c2 then
mystop2=high
myprofit2=open-70
sellshort 1 CONTRACTS AT low[1]-1.4 limit
endif
// Condizioni per uscire da posizioni long
If shortOnMarket AND close> mystop2 THEN
exitshort AT MARKET
ENDIF
if myprofit2 then
exitshort 1 contract at market
ENDIF
//---------------contratto 3----------------------------------
if not shortonmarket and myResistenza and c1 and orario and c2 then
mystop3=high
myprofit3=open-90
sellshort 1 CONTRACTS AT low[1]-1.4 limit
endif
// Condizioni per uscire da posizioni long
If shortOnMarket AND close> mystop3 THEN
exitshort AT MARKET
ENDIF
if myprofit3 then
exitshort 1 contract at market
ENDIF
Il 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:
IF close CROSSES UNDER average[200,0](close) AND Not OnMarket THEN
SELLSHORT 3 contracts at Market
set stop pLoss 100
set target pProfit 500
ENDIF
Pips = PositionPrice * PositionPerf / PipSize
IF OnMarket THEN
IF Pips >= 130 THEN //Oltre 130 punti esci completamente
ExitShort at Market
ELSIF 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 Market
ELSIF 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 Market
ENDIF
ENDIF
//
graph Pips
grazie innanzi tutto!
ma non funziona
ho cambiato i punti di gain in 30 60 80 per vedere bene il problema graficamente
allego foto
Il mio sistema con 3 contratti insieme funziona.
Il 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:
ONCE c1 = 0
myResistenza = 1
c2 = 1
Orario = 1
IF close CROSSES UNDER average[200,0](close) AND Not ShortOnMarket THEN
c1 = 1
ENDIF
//
if not shortonmarket and myResistenza and c1 and orario and c2 then
Entrata = min(low,low[1]) - 20.0 * PipSize
mystop = max(high,high[1])
myprofit = max(open,close) - 30 * PipSize
myprofit2 = max(open,close) - 60 * PipSize
myprofit3 = max(open,close) - 180 * PipSize
IF close > Entrata THEN
sellshort 3 CONTRACTS AT Entrata stop
ELSIF close < Entrata THEN
sellshort 3 CONTRACTS AT Entrata limit
ENDIF
ENDIF
// Uscita in Stop
If ShortOnMarket AND close >= mystop THEN
exitshort AT MARKET
ENDIF
// Condizioni per uscire da posizioni short
IF ShortOnMarket THEN
c1 = 0
IF close <= myprofit3 THEN
ExitShort at Market
ELSIF close <= myprofit2 AND abs(CountOfPosition) = 2 THEN
ExitShort 1 contract at Market
ELSIF close <= myprofit AND abs(CountOfPosition) = 3 THEN
ExitShort 1 contract at Market
ENDIF
ENDIF
Roberto grazie mille davvero,
ci lavoro con calma
intanto buon ferragosto!!!!
Max