Buongiorno,
sto provando a predisporre il codice per una strategia mean reverting piuttosto semplice, ma sono in difficoltà con l’immissione degli ordini frazionati. Io infatti vorrei entrare a mercato long se il prezzo è maggiore della media mobile a 200 periodi e contemporaneamente l’RSI a 2 periodi è inferiore di 10 utilizzando al massimo 4 ingressi frazionati (40%-30%-20%-10%) nel caso i parametri fossero rispettati. In pratica prima entrerei col 40% della posizione, poi se il giorno successivo le condizioni sono ancora verificate entrerei con un altro 30% e così via fino al 100% della posizione. Ovviamente non riesco ad inserire questi ordini frazionati. Nel codice ho utilizzato per semplicità una posizione totale di 10.000 euro così da entrare prima con 4.000 euro e poi eventualmente con i rimanenti 3.000-2.000 e 1.000 euro. Il problema è che la prima entrata è corretta, mentre poi le rimanenti sono errate e continua ad entrare a mercato superando la quota totale di 10.000 euro, che in effetti non saprei come indicare.
Ecco il codice:
mm200 = average[200] (close)
myrsi = RSI[2] (close)
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND close>mm200 and myrsi<10 THEN
BUY 4000 CASH AT MARKET
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 THEN
BUY 3000 CASH AT MARKET
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 THEN
BUY 2000 CASH AT MARKET
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 THEN
BUY 1000 CASH AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket AND myrsi>70 THEN
SELL AT MARKET
ENDIF
SET STOP %LOSS 10
Riuscireste cortesemente ad indicarmi dove sbaglio?
Grazie mille!
Devi mettere una variabile che funga fa segnale, che inizi da 0 quando non sei a mercato e poi dovrai mettetla dopo ogni BUY incrementandone (1,2,3) il valore.
Alle condizioni BUY dovrai aggiungere AND Segnale=0 (per il primo BUY, 1 per il secondo ecc…).
Ciao,
ho provato a correggere in questo modo, ma stavolta mi fa sempre e solo la prima entrata e mai quelle successive.
mm200 = average[200] (close)
myrsi = RSI[2] (close)
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND close>mm200 and myrsi<10 AND COUNTOFPOSITION=0 THEN
BUY 4000 CASH AT MARKET
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 AND COUNTOFPOSITION=1 THEN
BUY 3000 CASH AT MARKET
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 AND COUNTOFPOSITION=2 THEN
BUY 2000 CASH AT MARKET
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 AND COUNTOFPOSITION=3 THEN
BUY 1000 CASH AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket AND myrsi>70 THEN
SELL AT MARKET
ENDIF
SET STOP %LOSS 10
Non Funziona perché COUNTOFPOSITION dopo il primo BUY conterrà 4000, non 1!
Io ho usato una variabile per contare le operazioni fatte, indipendentemte dai lotti tradati (provalo, io non l’ho testato):
IF NotOnMarket THEN
Segnale = 0
ENDIF
mm200 = average[200] (close)
myrsi = RSI[2] (close)
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND close>mm200 and myrsi<10 AND Segnale=0 THEN
BUY 4000 CASH AT MARKET
Segnale = 1
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 AND Segnale=1 THEN
BUY 3000 CASH AT MARKET
Segnale = 2
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 AND Segnale=2 THEN
BUY 2000 CASH AT MARKET
Segnale = 3
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 AND Segnale=3 THEN
BUY 1000 CASH AT MARKET
Segnale = 4
ENDIF
// Condizioni per uscire da posizioni long
IF LongOnMarket AND myrsi>70 THEN
SELL AT MARKET
ENDIF
SET STOP %LOSS 10
Scusami, l’ho modificato perché ho notato una mia svista, questo è quello corretto:
IF NotOnMarket THEN
Segnale = 0
ENDIF
mm200 = average[200] (close)
myrsi = RSI[2] (close)
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND close>mm200 and myrsi<10 AND Segnale=0 THEN
BUY 4000 CASH AT MARKET
Segnale = 1
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 AND Segnale[1]=1 THEN
BUY 3000 CASH AT MARKET
Segnale = 2
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 AND Segnale[1]=2 THEN
BUY 2000 CASH AT MARKET
Segnale = 2
ENDIF
// Condizioni per entrare su posizioni long
IF LongOnMarket AND close>mm200 and myrsi<10 AND Segnale[1]=3 THEN
BUY 1000 CASH AT MARKET
Segnale = 4
ENDIF
// Condizioni per uscire da posizioni long
IF LongOnMarket AND myrsi>70 THEN
SELL AT MARKET
ENDIF
SET STOP %LOSS 10
Funziona alla grande!
Grazie mille per l’aiuto!