CodiciLibri

Inserisci qui il tuo testo...

//Back test BT1 daily a stop loss con entrata casuale: entro long dopo candela verde, short dopo rossa

//codice utilizzato nella piattaforma prorealtime.com

//BACK TEST 1 casuale: long,cioè in acquisto, se candela verde, short, cioè vendendo allo scoperto i titoli senza possederli ma chiedendoli in prestito al broker, se candela rossa. sarebbe da aggiungere ai successivi risultati anche il costo del prestito titoli qui non calcolato

//time frame daily

//codice:

DEFPARAM CumulateOrders=False //evita l'accumulo di più posizioni contemporaneamente CIOE' IMPONE DI ASPETTARE DI USCIRE DAL MERCATO PRIMA DI RIATTIVARE LE CONDIZIONI DI ENTRATA con un successivo acquisto o una successiva vendita allo scoperto

c1 = (close > open) //condizione di entrata long cioe' in acquisto. unica condizione per entrare: che ultima candela sia verde cioè in crescita. NATURALMENTE POI FINCHE' SI È A MERCATO NON SI GUARDA PIÙ A QUESTA CONDIZIONE CHE RITORNA VALIDA SOLO DOPO L'USCITA dalla posizione

c2 = (close < open) //condizione di entrata short cioe' vendendo allo scoperto se ULTIMA CANDELA ROSSA IN CALO

IF NOT LongOnMarket THEN

IF NOT ShortOnMarket AND c1 THEN //cioè se non sono già a mercato long o short e l'ultima candela era verde

BUY 2000/close SHARES AT MARKET // vado long per circa 2000 euro approssimati secondo il valore delle azioni in quel momento quindi solitamente diventa una cifra inferiore

ENDIF

ENDIF

IF NOT LongOnMarket THEN

IF NOT ShortOnMarket AND c2 THEN //cioè se non sono già a mercato long o short e l'ultima candela era rossa

SELLSHORT 2000/close SHARES AT MARKET // vado short per circa 2000 euro approssimati secondo il valore delle azioni in quel momento

ENDIF

ENDIF

SET TARGET %PROFIT 6 //percentuale del take profit

set stop %loss 6 //percentuale dello stop loss

//COMMISSIONI da retail 9 EURO PER ORDINE

// CAPITALE iniziale 10.000

Back test BT1 daily a stop loss con entrata casuale: entro long dopo candela verde, short dopo rossa

//BACK TEST BT2 tecnico: long se Macd incrocia da sotto linea del segnale e Rsi sotto 70, short se Macd incrocia da sopra linea del segnale e Rsi > 70

//time frame daily

DEFPARAM CumulateOrders=False //evita l'accumulo di più posizioni contemporaneamente CIOE' IMPONE DI ASPETTARE DI USCIRE DAL MERCATO PRIMA DI RIATTIVARE LE CONDIZIONI per una nuova ENTRATA

MyMACD = ExponentialAverage [12](close) - ExponentialAverage [26](close)

MySignalLine = ExponentialAverage [9](MyMACD)

Up = MyMACD CROSSES OVER MySignalLine //prima condizione long

Dn = MyMACD CROSSES UNDER MySignalLine //prima condizione short

Rsi1H = Rsi [14](close)

c3 = Rsi1H<70 //seconda condizione long contemporanea

c4 = Rsi1H>70 //seconda condizione short alternativa

IF NOT LongOnMarket THEN

IF NOT ShortOnMarket AND up and c3 THEN //cioè se non sono già a mercato long o short e si verificano tutte le condizioni long

BUY 2000/close SHARES AT MARKET // vado long per circa 2000 euro approssimati per difetto secondo il valore delle azioni in quel momento

ENDIF

ENDIF

IF NOT LongOnMarket THEN

IF NOT ShortOnMarket AND dn or c4 THEN //cioè se non sono già a mercato long o short e si verifica una delle due condizioni short

SELLSHORT 2000/close SHARES AT MARKET // vado short per circa 2000 euro approssimati per difetto secondo il valore delle azioni in quel momento

ENDIF

ENDIF

SET TARGET %PROFIT 6 //percentuale del take profit

set stop %loss 6 //percentuale dello stop loss

//COMMISSIONI retail 9 EURO PER ORDINE

// CAPITALE iniziale 10.000

//BACK TEST BT3 analisi tecnica con utilizzo di ema e rsi: LONG SE EMA8 INCROCIA DA SOTTO EMA20>EMA30 E RSI<70

//time frame daily

DEFPARAM CUMULATEORDERS=FALSE //EVITA L'ACCUMULO DI PIÙ POSIZIONI CONTEMPORANEAMENTE CIOE' IMPONE DI ASPETTARE DI USCIRE DAL MERCATO PRIMA DI RIATTIVARE LE CONDIZIONI DI ENTRATA

//qui sotto definisco le 3 ema utilizzate

m1 = EXPONENTIALAVERAGE [8](CLOSE)

m2 = EXPONENTIALAVERAGE [20](CLOSE)

m3 = EXPONENTIALAVERAGE [30](CLOSE)

UP = m2 >m3 and m1 CROSSES OVER m2 //prima CONDIZIONE LONG

//qui sotto definisco l'rsi utilizzato

RSI1H = RSI [14](CLOSE)

C3 = RSI1H<70 //seconda CONDIZIONE LONG

IF NOT LONGONMARKET THEN

IF NOT SHORTONMARKET AND UP AND C3 THEN //CIOÈ SE NON SONO GIÀ A MERCATO LONG O SHORT E SI VERIFICANO TUTTE LE CONDIZIONI LONG

BUY 2000/CLOSE SHARES AT MARKET // VADO LONG PER CIRCA 2000 EURO APPROSSIMATI PER DIFETTO SECONDO IL VALORE DELLE AZIONI IN QUEL MOMENTO

ENDIF

ENDIF

//SETTAGGIO DI STOP E PROFIT:

SET TARGET %PROFIT 10 //PERCENTUALE DEL TAKE PROFIT DEL PRIMO GRAFICO DI UN TITOLO; percentuale CHE DIVENTA IL 20% NEL SECONDO GRAFICO DELLO STESSO TITOLO in questo test

SET STOP %LOSS 16 //PERCENTUALE DELLO STOP LOSS

//COMMISSIONI DA RETAIL 9 EURO PER ORDINE

// CAPITALE INIZIALE 10.000

//BT1M: long se candela verde, short se candela rossa

DEFPARAM CumulateOrders=False //evita l'accumulo di più posizioni contemporaneamente CIOE' IMPONE DI ASPETTARE DI USCIRE DAL MERCATO PRIMA DI RIATTIVARE LE CONDIZIONI DI ENTRATA

//time frame daily

c1 = (close > open) //unica condizione per entrare long: ultima candela sia verde cioè in crescita. NATURALMENTE POI FINCHE' SI E' A MERCATO NON SI GUARDA PIÙ A QUESTA CONDIZIONE CHE RITORNA VALIDA SOLO DOPO L'USCITA DAL MERCATO

c2 = (close < open) //unica condizione per entrare short: ultima candela sia rossa cioè in calo

IF NOT LongOnMarket THEN

IF NOT ShortOnMarket AND c1 THEN //cioè se non sono già a mercato long o short e l'ultima candela era verde

BUY 2000/close SHARES AT MARKET // vado long per circa 2000 euro approssimati per difetto secondo il valore delle azioni in quel momento

ENDIF

ENDIF

IF NOT LongOnMarket THEN

IF NOT ShortOnMarket AND c2 THEN //cioè se non sono già a mercato long o short e l'ultima candela era rossa

SELLSHORT 2000/close SHARES AT MARKET // vado short per circa 2000 euro approssimati per difetto secondo il valore delle azioni in quel momento

ENDIF

ENDIF

SET TARGET %PROFIT 6 //percentuale del take profit // %take profit

//set stop %loss 6 //percentuale dello stop lossELIMINATO LO STOP

//COMMISSIONI retail 9 EURO PER ORDINE

// CAPITALE iniziale 10.000

//BTCSS (ricerca impulsi long su Banda di Bollinger)

//SOLO OPERAZIONI LONG

DEFPARAM CUMULATEORDERS = FALSE //evita l'accumulo di più posizioni contemporaneamente CIOE' IMPONE DI ASPETTARE DI USCIRE DAL MERCATO PRIMA DI RIATTIVARE LE CONDIZIONI DI ENTRATA

//time frame weekly

indicator1 = BollingerUp [20](close) //definisce la fascia alta delle bande di bollinger quella che quando interagisce con la quotazione crea la condizione di base per entrare long sperando in una continuazione del movimento anche se con una possibile reazione iniziale

//per entrare perÒ si richiede che vengano soddisfatte piÙ condizioni nell'ultima candela:

c12= (open > Average [20](close)) //l'apertura dell'ultima candela deve essere maggiore della media mobile a 20 periodi

c11 = (Average [60](close) > Average [60](close) [5]) //la media mobile a 60 periodi deve essere in crescita

c5 = (CLOSE > OPEN*1.02) //l'ultima candela deve segnare una crescita della quotazione di oltre il 2%

c1 = (CLOSE >= indicator1) //l'ultima candela deve chiudere sopra alla linea superiore della banda di bollinger. e' il contrario di quanto viene fatto in vari casi con le bande di bollinger. QUi si pensa che una situazione di questo genere indichi un impulso che poi potrebbe continuare anche se magari dopo una reazione contraria

c2 = (low <= indicator1) //il minimo dell'ultima candela deve essere sotto alla banda di bollinger sueriore

c3 = (indicator1 >= indicator1 [2]) //la banda di bollinger deve almeno iniziare a puntare verso l'alto cioe' deve crescere

c4 = (high [2] < indicator1 [2]) //il massimo della candela indietro di 2 periodi rispetto all'ultima deve essere sotto alla banda di bollinger superiore

//chiaramente sono tutte condizioni che non hanno alcuna valenza scientifica. Derivano da varie prove in tanti back test ma come sempre i buoni o meno buoni risultati accadono senza alcuna sicurezza di continuitÁ temporale non essendo determinati da leggi matematiche. per cui, qualunque rosa di condizioni io scelga di utilizzare, vale sempre e soprattutto la gestione del rischio all'interno della strategia che scelgo di applicare

IF c1 AND c2 AND c3 AND c4 AND c5 and (c11 or c12) THEN //se si verificano le condizioni sopra impostate con questi segni logici allora compra a mercato

p=1000

BUY P CASH ROUNDEDUP AT MARKET

ENDIF

SET TARGET $PROFIT p/9 // circa l'11% - profit testato per cercare miglior risultato con questo metodo e con questo capitale e time frame. CON ALCUNI ETF EUROPa a bassa volatilitÁ sarebbe MEGLIO DIVIDere PER 18 anziche' per 9 per minore volatilitÁ, cosa che perÒ non ho fatto neanche successivamente; dovrei trovare il modo di legare il take profit alla volatilitÁ in modo automatico ma non lo riesco ancora a fare con buoni risultati

IF LONGONMARKET AND (BarIndex - TradeIndex) >= 252 THEN //se non riesco a prendere il take profit entro 252 candele lavorative esco dal mercato; ma questa condizione era fatta per il time frame daily. qui viene in gran parte superata dal fatto che imposto il time frame settimanale PER CUI E' DIFFICILE RESTARE 252 SETTIMANE A MERCATO anche se PUÒ CAPITARE. In sostanza continua a non esserci una limitazione temporale all'operazione ed e' questa la linea che preferisco.

sell AT MARKET

endif

//COMMISSIONI retail 9 EURO PER ORDINE

// CAPITALE iniziale 10.000


//BT1ss-MMP casuale senza stop con mini Martingala

// buy he dip

//time frame weekly

//SOLO OPERAZIONI LONG

if NOT LONGONMARKET THEN

countposition = 0 //se non sono a mercato si azzera il contatore di posizioni aperte

k = close

endif

condperday = countposition < 3 //evita di cadere nel Martingala limitando a 2 le piramidazioni

c1 = (CLOSE > OPEN) //unica condizione per entrare: ultima candela sia verde cioè in crescita.

IF NOT LONGONMARKET THEN

IF NOT SHORTONMARKET AND C1 and CONDPERDAY THEN //SE NON SONO GIÁ A MERCATO E SE NON SUPERO IL LIMITE ANTI MARTINGALA

if countposition =0 then //impedisce di piramidare solo a causa della successiva candela verde

BUY 1000 CASH ROUNDEDUP AT MARKET

countposition=countposition+1 //AUMENTA DI 1 IL CONTATORE della posizione

k = close

endif

ENDIF

endif

if CONDPERDAY and countposition =1 and close < k*0.65 then //SE SONO NEL LIMITE ANTIMARTINGALA E LA QUOTAZIONE È CADUTA DEL 35% O OLTRE (E NATURALMENTE L'ANALISI DEI BILANCI E DELLE NEWS Devono dare ANCORA SPERANZE)

BUY 1000 CASH ROUNDEDUP AT MARKET

countposition=countposition+1

k = close

endif

if CONDPERDAY and countposition =2 and close < k*0.25 then //SE SONO NEL LIMITE ANTIMARTINGALA E LA QUOTAZIONE È CADUTA ANCORA DEL 75% O OLTRE (E NATURALMENTE L'ANALISI DEI BILANCI E DELLE NEWS DANNO ANCORA SPERANZE)

BUY 1000 CASH ROUNDEDUP AT MARKET

countposition=countposition+1

k = close

endif

SET TARGET %PROFIT 25 //CON ALCUNI ETF EUROPE sarebbe MEGLIO DIVIDere PER 2 per minore volatilitÁ ma occorrerebbe poi piÙ tempo per recuperare la perdita

//commissioni 9 euro

// CAPITALE iniziale 10.000


//NOCOND UFFICIALE PERTEST Visual Trader® Impostare nell'apposita casella il time frame settimanale

VAR: X ;

if RangeDate(20190416, 20240731) then

IF X =0 AND POSITIONQTA=0 THEN

buy(This, nextbar, atopen, 1000/C,0,0,"PRIMOBUY");

X=C;

ENDIF;

ENDIF;

//BT1 UFFICIALE PERTEST Visual Trader® Impostare nell'apposita casella il time frame settimanale con variabile BASTA per evitare titoli già crollati in precedenza

Var: C16,X5,BASTA,countposition,condperday;

condperday = countposition < 2;

C16 = CLOSE > OPEN;

if RangeDate(20190416, 20240731) then

IF C16 AND PositionQta = 0 AND BASTA <>7 THEN

// InstalltakeProfit(INperc, 25, "take"); non posso usare questo comando per il profit SBAGLIA CALCOLO se sono in piedi più acquisti prima del profit

BUY(This, nextbar, atopen, 1000/C, 0, 0, "MUYBUY1");

X=CLOSE;

X5 = 1.25; //limite del profit

countposition=1;

ENDIF;

if CONDPERDAY and countposition =1 and PositionQta <> 0 and close <= X * 0.65 AND RangeDate(20190416, 20240731) AND BASTA <>7 then

//InstalltakeProfit(INperc, 2.5, "take"); SBAGLIA CALCOLO non posso usare questo comando per il profit SBAGLIA CALCOLO se sono in piedi più acquisti prima del profit

BUY(This, nextbar, atopen, 1000/C, 0, 0, "MYBUY2");

countposition=countposition+1;

X2 = close ;

X5 = 1.025; //limite del profit dopo il crollo

BASTA = 7; //impedisce di tornare ad acquistare se si riesce ad uscire in profit

endif ;

if (C>= PositionMedianPrice*X5 AND X<>0) then

sell(This, nextbar, atopen, PositionQta, 0, 0, "TAKEO");

endif;

ENDIF;

if RangeDate(20240715, 20240731) then //per fare una vendita di uscita nel periodo finale dato che sto scrivendo in luglio 2024

sell(This, nextbar, atopen, PositionQta, 0, 0, "TUTTO");

endif;

////////BTC WEEKLY UFFICIALE PERTEST Visual Trader® Impostare nell'apposita casella il time frame settimanale

Var: C1,C22, C3,C4,C5,C12, C11,P,X;

// Condizioni per l'entrata

C12 = O > Mov(C, 20,S) ;

//modifica: C11 = (Mov(C, 60,S) > ref(Mov(C, 60,S), 5)) ; //IN VT NON FA L'OPERAZIONE SE LA MEDIA A 60 NON è CALCOLABILE ANCHE SE è SOLO UNA CONDIZIONE OR !!

C5 = (C > O * 1.02) ;

C1 = (C >= BBandUpper(C, 20, 2,0)) ;

C22 = (low <= BBandUpper(C, 20, 2,0)) ;

C3 = (BBandUpper(C, 20, 2,0) >= ref(BBandUpper(C, 20, 2,0), 2)) ;

C4 = (ref(H, 2) < ref(BBandUpper(C, 20, 2,0), 2)) ;

if RangeDate(20190416, 20240731) then

////// //Verifica delle condizioni per l'acquisto

if C1 and C22 and C3 and C4 and C5 and (C12) AND PositionQta=0 then

P = 1000 ;

buy(This, nextbar, atopen, P/c, 0, 0, "MYBUY");

X=C ;

ENDIF;

ENDIF;

if (C>=X*(1+1/9)) then

sell(This, nextbar, atopen, PositionQta, 0, 0, "TAKE");

endif;

IF RANGEDATE(20240715, 20240731) THEN //aggiornare il periodo finale dove vendere per fine test

sell(This, nextbar, atopen, PositionQta, 0, 0, "TUTTO");

endif;

//NOCOND UFFICIALE PERTEST Visual Trader Impostare nell'apposita casella il time frame settimanale

VAR: X ;

if RangeDate(20200416, 20240731) then

IF X =0 AND POSITIONQTA=0 THEN

buy(This, nextbar, atopen, 1000/C,0,0,"PRIMOBUY");

X=C;

ENDIF;

ENDIF;

////BACK TEST BT3 ANALISI TECNICA CON UTILIZZO DI EMA E RSI: LONG SE EMA8 INCROCIA DA SOTTO EMA20>EMA30 E RSI<70

////TIME FRAME DAILY

VAR: M1,M2,M3,RSI1H,C3;

INSTALLTAKEPROFIT(INPERC, 20, "TAKE");

INSTALLSTOPLOSS(INPERC, 16, "STOP");

M3=MOV(C,30,E);

M2=MOV(C,20,E);

M1=MOV(C,8,E);

//QUI SOTTO DEFINISCO L'RSI UTILIZZATO

RSI1H = RSI(C,14,S);

IF M2 >M3 AND CROSSOVER(M1,M2) AND RSI1H<70 AND RANGEDATE(20190416, 20240731) AND PositionQta=0 THEN

// INSTALLTAKEPROFIT(INPERC, 25, "TAKE"); SBAGLIA CALCOLO

BUY(THIS, NEXTBAR, ATOPEN, 1000/C, 0, 0, "MUYBUY1");

ENDIF;

IF RANGEDATE(20240715, 20240731) THEN //AGGIORNARE IL PERIODO FINALE DOVE VENDERE PER FINE TEST

SELL(THIS, NEXTBAR, ATOPEN, POSITIONQTA, 0, 0, "TUTTO");

ENDIF;

////////COMMISSIONI E CAPITALE INIZIALE

//////COMMISSIONE_ORDINE(9) CAPITALE_INIZIALE(10000)