Buongiorno,
sto cercando di creare una strategia (una sorta di martingala) che acquista man mano che il prezzo scende per poi chiudere raggiunto un certo profitto.
La strategia deve acquistare ogni volta che il prezzo scende di “x” rispetto al prezzo di ingrezzo (per il quale ho usato tradeprice) della precedente operazione. La strategia deve chiudere tutte le posizioni quando vi è una chiusura superiore di y punti/pips rispetto al prezzo medio di carico (per il quale ho usato PositionPrice).
Lanciando la strategia, di cui riporto stralcio, non fa nessuna operazione. Ciò che è strano è che la stessa strategia, con le opportune modifiche nelle formule, funziona in caso di short.
Potete darmi una mano?
Grazie
//Condizioni di entrata
miasize = 0.1*i+1
IF i = 0 then
c1 = close[1]-close > 0.7
Elsif i<>0 then
c1 = tradeprice-close > 1
endif
IF c1 AND timeEnterBefore AND timeEnterAfter AND NOT daysForbiddenEntry THEN
Buy miasize contracts at market
i = i+1
endif
//Condizioni di uscita
mioprofit = 0.7
c3 = close – PositionPrice > mioprofit
IF c3 then
Sell AT Market
i = 0
Perché quando non è a mercato PositionPrice è 0, quindi c3 è vera ed esegue SELL subito dopo BUY, quindi l’entrata viene annullata.
Come andrebbe modificata?
Grazie
Prova così. Ma non ho idea di cosa sia 0.7, non possono essere pips, non è accettabile un valore così basso, cosa intendi con quel numero?
Non ho capito come devo provare.
Comunque sono pips, avevo tolto gli zeri per semplificare, quindi 0.7 è 0.0007; 1 è 0.001
Scusami, mi è venuto prova, ma volevo scrivere provo.
Su quale strumento l’utulizzi?
Ad ogni modo occorre usare PIPSIZE per le conversioni, non moltiplicatori propri che non sono portabili tra uno strumento e l’altro.
Te lo farò appena possibile.
Lo sto realizzando su eur/usd con l’intenzione di estenderlo ad altre coppie con le opportune ritarature.
Più tardi allego il TS short che funziona, a meno della prima operazione in cui mette size strane
Il valore della prima entrata “
sembra” strano, in realtà è corretto perché ProOrder carica 2000 barre precedenti alle unità che hai sul grafico. Se hai 1000 unità, ne carica 2000, quindi inizia a fare i calcoli molto prima di quello che pensi.
Basta che metti, tra le righe iniziali (come prima o seconda riga è ininfluente), questa:
DEFPARAM PreloadBars = 0
in modo da NON fargli PRE-caricare le 2000 barre (se vuoi puoi arrivare ad un massimo di 10000 barre precaricate).
Inoltre ho usato * PIPSIZE per fare la conversione da pip a prezzo (o differenze tra prezzi), mentre per la conversione opposta, da prezzo (o differenze tra prezzi) a pip occorre dividere, cioè / PIPSIZE.
Ho anche verificato che non esca se non lo è ancora.
Ecco il codice funzionante, sia Long che Short:
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = true // Posizioni cumulate attivate
DEFPARAM PreloadBars = 0
// Impedisce al sistema di creare nuovi ordini per entrare a mercato o aumentare la taglia della posizione prima dell'orario specificato
noEntryBeforeTime = 010000
timeEnterBefore = time >= noEntryBeforeTime
// Impedisce al sistema di piazzare nuovi ordini per entrare a mercato o aumentare la taglia della posizione dopo l'orario indicato
noEntryAfterTime = 220000
timeEnterAfter = time < noEntryAfterTime
// Impedisce al sistema di tradare in giorni specifici della settimana
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0 OR OpenDayOfWeek = 5 OR OpenDayOfWeek = 1
//Condizioni di entrata SHORT
miasize = 0.02*i+1
IF i = 0 then
c1 = close - close[1] > 5 * PipSize //0.0005
Elsif i <>0 then
c1 = close - tradeprice > 9 * PipSize//0.0009
endif
IF c1 AND timeEnterBefore AND timeEnterAfter AND NOT daysForbiddenEntry and ((not OnMarket) OR ShortOnMarket) THEN
Sellshort miasize contracts at market
i = i+1
endif
//Condizioni di uscita
mioprofit = 6 * PipSize //0.0006
c3 = PositionPrice-close > mioprofit
IF c3 and ShortOnMarket then
Exitshort AT Market
i = 0
endif
// Stop e target
SET STOP $LOSS 0
SET TARGET pPROFIT 0
//Condizioni di entrata LONG
miasize = 0.1*i+1
IF i = 0 then
c1 = close[1]-close > 7 * PipSize //0.0007
Elsif i<>0 then
c1 = tradeprice-close > 10 * PipSize //0.001
endif
IF c1 AND timeEnterBefore AND timeEnterAfter AND NOT daysForbiddenEntry and ((not OnMarket) OR LongOnMarket) THEN
Buy miasize contracts at market
i = i+1
endif
//Condizioni di uscita
mioprofit = 7 * PipSize //0.0007
c3 = close - PositionPrice > mioprofit
IF c3 and LongOnmarket then
Sell AT Market
i = 0
endif
//
//graph miasize
//graph i
Grazie mille.
Davvero non so come ringraziarti, mi ero impantanato.
Ora però temo per te che ti chiederò supporto spesso.
Intanto spero ora di essere in grado di creare il TS opposto, ossia incrementare lo short man mano che il prezzo scende ed incrementare il long quando il prezzo sale.
Ancora grazie
Bene, se si tratta di questioni diverse da queste (anche di poco), è preferibile che tu apra un nuovo argomento con un titolo diverso.
Grazie 🙂