Programmazione Amibroker Strategie market neutral con basket di titoli (1 Viewer)

Pek

Forumer storico
La tua strategia è controproducente per un retail, visto che i costi di transazione non giustificano eventuali problemi di liquidità del mercato.
Pek ha scritto:
Non ho capito come entra in gioco la liquidità

Capito,avevo interpretato male il primo messaggio della discusione


Reef,in effetti se intendi ad esempio comprare l'indice meno i bancari
e coprire con l'indice perchè hai un segnale sell in questo periodo,tanto vale
vendere direttamente indice o i bancari in quantità ridotta.


Volendo abusare dei soliti termini una MN si nutre di alfa non di beta,anzi di solito si cercano portafogli beta neutral
 
Ultima modifica:

reef

...
Allora, un banale esempio di ciò che ho (ehm... sarebbe più corretto dire "abbiamo") in mente, testato sul FTSEMIB nel mese di gennaio per dati EOD.
Per semplicità sia i trade, sia l'indice vengono transati a lotti di 10000 euro (anzichè 14000 per il MiniFIB).
L'acquisto sul titolo scatta con un RSI(3)<10 e la vendita >90
Qui le statistiche standard di Amibroker.

1334177269ami01.png


L'aspetto interessante è che ogni giorno viene effettuato un ranking dei "migliori" e vengono eseguiti i primi della lista entro il limite massimo consentito di posizioni simultanee (parametrizzato, qui = 5).
L'indice viene eseguito esattamente in quantità e timing tali da controbilanciare l'acquisto dei titoli.

E' solo l'inizio e sono pure abbastanza confuso (e scettico, visto che non credo nell'AT), ma mi affascina l'idea di strapazzare un SW intelligente come Amibroker... :)

PS Attenzione, non sto ignorando le competenti precisazioni che avete fatto, ma il tempo è quel che è e, per ora, continuo per la mia strada... Più avanti spero di integrare tutte le vostre osservazioni nelle N strategie che, spero, usciranno in futuro.
 
Ultima modifica:

reef

...
Stessa elaborazione, ma con 10 posizioni max e dal 1/4/2011

1334178492ami02.png


In decisa perdita, ma per ora questo non è importante, visto che l'indice di selezione è poco più che casuale.

Qui tutto il report
 
Ultima modifica:

ender85

Forumer attivo
Reef non puoi usare una strategia che compra quello che cade senza avere un database survivorship bias free. Dai miei test invece se compri quello che sale l'influenza del bias è trascurabile. Cmq ottima iniziativa, anche se fosse solo un esercizio di programmazione in Amibroker vai avanti senza indugi :up:
Malnati a Mechanica l'anno scorso aveva mostrato il suo modello di ranking, nn era market neutral ma iniziava con una media mobile a 200 periodi sull'indice e sulle singole azioni. Correlazione tra indice e singola azione, break dei massimi di periodo ecc ecc. Era il sistema che usava per far girare il fondo asiatico, nulla di eccezionale solo buon senso.
Occhio solo ad evitare l'overfitting ragioniamo prima di lanciare i backtester.
 

reef

...
Reef non puoi usare una strategia che compra quello che cade senza avere un database survivorship bias free. Dai miei test invece se compri quello che sale l'influenza del bias è trascurabile. Cmq ottima iniziativa, anche se fosse solo un esercizio di programmazione in Amibroker vai avanti senza indugi :up:
Malnati a Mechanica l'anno scorso aveva mostrato il suo modello di ranking, nn era market neutral ma iniziava con una media mobile a 200 periodi sull'indice e sulle singole azioni. Correlazione tra indice e singola azione, break dei massimi di periodo ecc ecc. Era il sistema che usava per far girare il fondo asiatico, nulla di eccezionale solo buon senso.
Occhio solo ad evitare l'overfitting ragioniamo prima di lanciare i backtester.

:bow: Tutto vero. In effetti per me è ancora un esercizio di programmazione, ma speriamo di tirarci fuori qualcosa di buono. A fini di esercizio, usando un mean reverting, potrebbe non essere necessario il DB survivor bias free. Invece usando la SMA200 temo che sia indispensabile.

Se matura qualcosa, magari si potrebbe utilizzare un DB di riferimento su Dropbox... ;)
 

reef

...
Codice didattico Amibroker, sono due AFL.

Il primo genera la posizioni long da un basket in WatchList (qui sarebbe quello dei titoli FTSEMIB40) e memorizza le transazioni in un AddToComposite
Deve girare in BackTest->Filter->WatchList

Codice:
//SetOption("CommissionMode",2);
//SetOption("CommissionAmount",5);
SetBacktestMode(backtestRegularRaw);
SetOption("InitialEquity", 200000); // Capitale iniziale
SetOption("MaxOpenPositions", 5); // Ma operazioni aperte simultanee
SetPositionSize( 10000, spsValue ); // Importo per ogni posizione
SetTradeDelays( 0, 0, 0, 0 ); // Compro e Vendo in chiusura contestualmente al calcolo dell'indicatore

soglia = Optimize("Soglia", 15, 5, 30, 5); //eventuale ottimizzazione (overfitting)
periodo = Optimize("Periodo", 3, 3, 30, 3);  //eventuale ottimizzazione (overfitting)

if (Name() != "FTSEMIB.MI") { //nella WatchList, se oltre al basket c'è l'indice di riferimento, questo viene ignorato nell'apertura dei long
	BuyPrice = Sellprice = C;
	B = RSI(periodo)<soglia;
	S = RSI(periodo)>100-soglia;
	Buy = ExRem (B, S);
	Sell = ExRem (S, B);
	Short = Cover = 0;
	AddToComposite(Buy,"RSILong", "Open", atcFlagDefaults|atcFlagEnableInBacktest|atcFlagDeleteValues); //Memorizza i buy long
	AddToComposite(Sell,"RSILong", "Close", atcFlagDefaults|atcFlagEnableInBacktest|atcFlagDeleteValues);  //Memorizza i sell long
}

Il secondo legge la posizioni long dall'AddToComposite e genera i corrispondenti movimenti con i corretti size in short
Deve essere fatto girare in BackTest su un titolo qualsiasi (oppure su un indice opportunamente selezionato, togliendo il riferimento Foreign all'interno del codicce)

Codice:
//SetOption("CommissionMode",2);
//SetOption("CommissionAmount",5);
SetBacktestMode(backtestRegularRaw);
SetOption("InitialEquity", 200000);
SetOption("MaxOpenPositions", 1); 
SetPositionSize( 10000, spsValue ); 
SetTradeDelays( 0, 0, 0, 0 ); 

fixAmt = 10000;

indice = "FTSEMIB.MI";
SetForeign (indice);

ShortPrice = C;
CoverPrice = C;
atcShort = Foreign ("RSILong", "Open");
atcCover = Foreign ("RSILong", "Close");
Buy = Sell = 0;

a = atcShort - atcCover;
PositionSize = fixAmt * abs(a);
Short = IIf(a>0, sigScaleIn, IIf(a<0, sigScaleOut, 0));

Questo codice viene riportato esclusivamente a scopo didattico (forse c'è anche qualche imprecisione), che non vi salti in mente di usarlo a mercato... :lol:
Lo scopo è stimolare gli utenti che vogliono avventurarsi :)
 
Ultima modifica:

all in

Nuovo forumer
L'acquisto sul titolo scatta con un RSI(3)<10 e la vendita >90

E' solo l'inizio e sono pure abbastanza confuso (e scettico, visto che non credo nell'AT), .


sono un profano di TS ma provo egualmente a dare un suggerimento:
visto che non credi nell' AT, se nel calcolo usassi i rendimenti percentuali anziché le differenze di prezzo, otterresti un risultato analogo ma potresti dire che non stai utilizzandoun RiSIbile Indicatore bensì un “Omega” normalizzato tra zero e 100 ( oppure tra zero e 1 )
 

marc56

Forumer attivo
L'argomento, per chi progetta TS, è affascinante dal punto di vista della programmazione.
Prendo un basket di centinaia si titoli e scelgo un indice sottostante, disponibile sul mercato, che ne replichi l'andamento medio. Poi cerco criteri per selezionare quei (pochi) titoli che, in certi momenti, mostrano andamenti che si scostano sensibilmente dall'indice. In questi momenti compro i titoli e bilancio la posizione vendendo l'indice, o viceversa.
In caso di catastrofi (come oggi, -5% sul FTSEMIB) la posizione complessiva resta comunque neutrale.

Programmare questa strategia in automatico non è banale, specie se si vuole effettuare un backtest sugli algoritmi da verificare.

Sarebbe interessante sapere se qualcuno ha esperienza, e quali, si ritiene, siano gli strumenti e le modalità più interessanti per sviluppare una simile strategia.

Se ne uscirà una discussione produttiva, alla fine pubblicherò un semplice codice scritto in Amibroker.

Spero che si faccia sotto chi ha argomenti, ma anche chi ha voglia di imparare e sperimentare (come il sottoscritto)... ;)




Ciao,ottima l'idea di creare un qualcosa di vincente in ogni condizione:)
Una domanda,perche' non ti sposti sul forex per coltivare la tua idea?
Io e' da circa un anno che mi sono spostato in quel mondo,non riesco piu' a tornare su azioni o simili,tanto e' vasto il campo di azione e di studio... da qualche mese ormai studio solo questo...credimi,ti si apriranno nuovi orizzonti;)
 

reef

...
Piccolo aggiornamento.
Per testare efficacemente movimenti su un basket di titoli, mi sono trovato costretto ad entrare nella logica della "Custom Backtest Interface" (CBI) di Amibroker.
La curva di apprendimento è ripida, ma i risultati possono essere davvero interessanti.

In pratica, avviene che nella fase 1 tutti i segnali sul portafoglio vengono processati sulla base dei parametri impostati, ovvero in presenza di N segnali vengono tradati solo i "primi" che soddisfano le condizioni fino ad esaurire il capitale disponibile. Si può definire un criterio di ranking attraverso il PositionScore, che è un potentissimo vettore collegato al ticker, il cui valore è programmabile a livello di candela.

Per utilizzare TS in cui, in opposizione ai titoli, si vuole tradare un indice con il PositionSize dipendente dal numero di titoli effettivamente tradati, bisogna "leggere i segnali" nel backtest e eseguire solo quelli che verificano le condizioni nella trade list.

Approfondiremo ancora... Ricordo che sto parlando di tecniche di programmazione (con Amibroker) e non di "TS vincenti" (almeno per ora...).
I concetti della CBI sono presentati qui http://www.amibroker.com/devlog/2006/03/07/houston-presentations/
:)

PS Sono curioso di sapere quali altri SW permettono una gestione così evoluta di TS con interdipendenze complesse tra i titoli in portafoglio.
 
Ultima modifica:

Users who are viewing this thread

Alto