Buongiorno a tutti, sono nuovo ed ho subito da sottoporre un problema:
nel codice che segue fatto girare su PRT in backtest non risponde ai comandi che intendo io.
Semplicemente vorrei che se l’ultima posizione ha perso più dello 0,5 mi aggiungesse un contratto
e che se la strategia nel suo complesso sta perdendo più dell’ 1% all’ultima posizione mi raddoppiasse i contratti.
Qualcuno sa come uscirne?
Grazie 1000
defparam cumulateorders = true
ONCE OrderSize = 1
ONCE ExitIndex = -2
ExitIndex=BarIndex
Mie condizioni
if c1 then
BUY 1 contracts AT MARKET
ExitIndex=BarIndex
endif
if c2 then
SELLSHORT 1 contracts AT MARKET
ExitIndex=BarIndex
endif
IF Barindex=ExitIndex+1 THEN
ExitIndex=0
REM Se l’ultima posizione chiusa ha perso + dello 0,5% aggiungere un contratto
IF positionperf < 0.5 THEN
OrderSize = OrderSize +1
REM Se la strategia sta perdendo più dell'1%, allora raddoppiamo la grandezza della posizione
ELSIF positionperf(1) > 0 THEN
OrderSize = 1
elsif strategyprofit(1) < 1 then
ordersize = ordersize *2
REM Se la strategia guadagna,allora ritorniamo ad una posizione di grandezza 1
ENDIF
ENDIF
È necessario sostituire le linee 9 e 16 con la PositionSize si è precedentemente calcolato per lanciare correttamente la quantità desiderata di contratti sul mercato:
//line 9
BUY OrderSize contracts AT MARKET
//line 16
SELLSHORT OrderSize contracts AT MARKET
grazie mille Nicolas per la tempestività; il codice definitivo è quello che segue tuttavia quando una posizione chiude in perdita, quella successiva rimane sempre con la stessa quantità. Non so proprio cosa fare…
defparam cumulateorders = true
ONCE OrderSize = 1
ONCE ExitIndex = -2
ExitIndex=BarIndex
mie condizioni
if c1 then
BUY ordersize contracts AT MARKET
ExitIndex=BarIndex
endif
if c2 then
SELLSHORT ordersize contracts AT MARKET
ExitIndex=BarIndex
endif
IF Barindex=ExitIndex+1 THEN
ExitIndex=0
IF positionperf(1) < 0 THEN
OrderSize = OrderSize +1
ELSIF positionperf(1) > 0 THEN
OrderSize = 1
ENDIF
ENDIF
buongiorno a tutti, non ho più avuto nessun commento nè suggerimenti per risolvere il mio problema…
qualcuno saprebbe come aiutarmi per favore? grazie
ALEModerator
Master
Ciao Nanniarc
a breve Nicolas ti darà la risposta.
Grazie
Ale
ciao ragazzi avete risolto per caso? perhè io pure ho lo stesso problema, non riesco porprio a trovare la quadra
Puoi spiegare esattamente qual’è il problema che stai avendo?
certo grazie…vorrei semplicemente aumentare la posione di 0.1 dopo ogni trade in gain.
e fermare l’incremento quando la size raggiunge un certo valore e farla ricominciare da capo (ma questo non ho nemmeno provato a scriverlo)
premetto che inizialmente avevo copiato il codice che c’è nel manuale di pro real time alla lettera, che poi è il codice postato dall’utente nel suo post, ma non funziona.
cmq nel mio codice il problema è che esegue l’istruzione sopo un trade vincente, ma poi non incrementa più e si ferma a 0.4, perchè ovviamente il codice viene riletto da capo e rilegge lo 0.3 iniziale.
sono molto neofita ovviamente.
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
//z_normal_tool
//sistema solo long
// Normal_z = normalizzazione della differenza di periodo 1 di una media modbile triangolare
//codice dell'indicatore
//(Tma [1] - Tma [0])/ Dev.standard
//parametri del sistema Tma[20] Dev Std [100]
// Condizioni per entrare su posizioni long
indicator1 = CALL "Normal z"[20, 100]
//a=20
//b=100
c1 = (indicator1 CROSSES OVER 0)
c2 = (indicator1 CROSSES UNDER 0)
//mylot default
mylot=0.3
if positionperf(1)>0 then
mylot=mylot+0.1
endif
IF c1 THEN
BUY mylot CONTRACT AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
IF c2 THEN
SELL AT MARKET
ENDIF