Riscontro un problema nella piattaforma e precisamente : Un mio codice, fatto girare in backtest va bene (almeno sembra), in reale il valore di una variabile viene moltiplicato per 100. Ho contattato l’assistenza, ma non ancora ottengo risposta. Sembra proprio un buco del programma, comunque è la prima volta che mi succede.
Occorre il codice e le informazioni sull0 strumento usato e sul time frame per potere fare delle verifiche precise.
Lo strumento è il Nasdaq tf 1 ora, allego codice.
A me funzionba benissimo (vedi foto), sia sul demo che sul conto reale.
Prova ad aggiungere le seguenti righe per verificare meglio che i settaggi siano gli stessi (stessi periodi e stesso tipo di medie):
graph indicator1
graph indicator2
graph indicator4
graph indicator6
La variabile che non funziona è il trailing stop
Capisco.
L’istruzione SET STOP $TRAILING (con le varianti %TRAILING, pTRAILING e TRAILING) è bene non usarla, non funziona correttamente e nessuno (credo) la usi più.
Va sostituita con un codice specifico per il trailing stop. Qui trovi quello scritto da Nicolas (linee 17-56), già pronto perl’uso senza dovere fare modifiche https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/.
Scusami, ma io non so programmare, se ho capito bene, tolgo il trailling attuale , che è una semplice riga, poi inserisco il tuo codice, i valori di settaggio sono in punti io pero vorrei gli euro e poi vorrei testare i volori stessi.
Grazie
Eccolo, con il valore in EURO (che vengono convertiti in Pip):
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Condizioni per entrare su posizioni long
indicator1 = RSI[14](close)
indicator2 = Average[m](RSI[14](close))
c1 = (indicator1 <= indicator2)
indicator3 = Volume
indicator4 = Average[m1](Volume)
c2 = (indicator3 >= indicator4)
IF c1 AND c2 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
indicator5 = Volume
indicator6 = Average[m2](Volume)
c3 = (indicator5 <= indicator6)
IF c3 THEN
SELL AT MARKET
ENDIF
// Stop e target
//SET STOP $TRAILING t
//************************************************************************
//trailing stop function
trailingstart = t / PipValue
trailingstep = trailingstart
//trailingstart = 20 //trailing will start @trailinstart points profit
//trailingstep = 5 //trailing step to move the "stoploss"
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
//************************************************************************
Grazie, veramente gentile, ultima domanda “in questo modo manca uno stop lose?
Lo Stop Loss lo aggiungi te con SET STOP, a cui devi aggiungere LOSS, pLOSS, $LOSS o %LOSS seguito dal rispettivo valore.
Puoi anche aggiungere SET TARGET PROFIT (o pPROFIT, $PROFIT, %PROFIT).
Lo sto usando, ma ottengo dei risultati peggiori di prima che avevo solo il trailing. Forse quelli di prima erano risultati fasulli?