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)