Weekly Forex Gaps

L’autore di questo post  è il dott. Mario Cesolini, trader indipendente e titolare dei siti burningshares.com, dedicato allo sviluppo di trading systems e ad una newsletter sugli investimenti azionari, e tradingdivolatilita.com, dedicato a strategie di trading sulla volatilità. Il dott. Cesolini studia i mercati finanziari dal 1999, è socio ordinario della SIAT ed è un insegnante appassionato di trading.  Gli abbiamo chiesto di condividere con i nostri lettori la ricerca con cui nel 2015 ha vinto il SIAT AWARD, categoria Forex.

Il Forex è sicuramente il mercato più amato dai Broker che, spinti dagli ampi margini di profitto, negli anni li hanno pubblicizzati nella comunità dei trader con massicce campagne di marketing. Tuttavia, nonostante la popolarità raggiunta, tali mercati sono tra i più difficili sui quali operare. Leggendo  le  statistiche  che  alcuni  broker  statunitensi mettono  a  disposizione  dei  propri  clienti emerge  che  oltre  il  70%  dei  trader  ha  abbandonato  l’operatività  sul  Forex  nei  primi  6 mesi  di attività.

L’approccio  oggetto  della  ricerca  nasce  dall’obbiettivo  di  individuare  una metodologia robusta da poter essere utilizzata con profitto su tutti i mercati Forex.  Non importa se il singolo mercato risponda meglio a logiche trend follower (es. EURJPY) o mean revearting (es. USDCHF) oppure che sia in una fase di Up o di Down trend, la tecnica dovrà essere capace di generare profitti su tutti i mercati valutari.  L’operatività oggetto del presente studio è nata studiando uno dei pattern più conosciuti: il Gap. I successivi  sviluppi  sono  stati  guidati  dai  risultati  dei  backtest  effettuati.

Forze relative Forex

I Price Gaps sono dei “buchi nel bar chart, dove non si è verificato nessuno scambio” (John J. Murphy, Analisi tecnica dei mercati finanziari, pp. 87).

Gli operatori più attenti del Forex sanno che raramente si verificano sbalzi di prezzo durante l’orario di contrattazione. Tuttavia anche questi mercati conoscono i Gap. Questi si verificano la domenica sera all’apertura di una nuova settimana di contrattazioni (l’orario di apertura può cambiare da Broker a Broker, per gli studi del presente approfondimento mi sono servito dei dati forniti da Tradestation).

Studiando le relazioni tra i prezzi (massimi, minimi e chiusura) del venerdì e l’apertura della settimana seguente mi sono reso conto che quando si presentano dei Gap, meglio ancora se di una certa entità, spesso il prezzo torna sui suoi passi per poi continuare in questa direzione per tutta la seduta.

La classica operatività con i Weekly Reversal Gap si pone in essere aprendo una posizione contraria alla direzione del Gap per poi chiuderla quando quest’ultimo viene ricoperto dai prezzi.

Operativita_classica_con_gap

NUOVE REGOLE OPERATIVE

APERTURA DI UNA POSIZIONE LONG(SHORT):  la domenica sera attendo che si concluda la prima candela oraria di contrattazione della nuova settimana (ore 0.00 italiane) e confronto il suo prezzo di chiusura con la chiusura del venerdì. Se c’è un Gap rialzista (ribassista) di una certa entità (ho utilizzato delle variazioni percentuali del prezzo rispetto alla chiusura del venerdì), apro una posizione Short (Long).

CHIUSURA DELLE POSIZIONI: Le posizioni vengono chiuse alla fine della giornata oppure in stop loss.

Nuova_operativita_con_gap

Equity_lines

EURUSD: confronto tra le equity line delle due operatività

Al fine di verificare la solidità del sistema, intesa come capacità di adattarsi a fasi di mercati differenti, tali regole sono state applicate a 16 mercati Forex. Le uniche variabili che ho utilizzato sono state la percentuale di ampiezza del Gap e lo Stop Loss (ne ho utilizzato uno monetario). Queste 2 grandezze variano per ognuno dei mercati studiati e sono stare individuate mediante ottimizzazione.

Di seguito i principali ratio del trading system applicato a 16 mercati Forex e le relative equity line.

Tabella_ratios

Equities_per_cross_01

Equities_per_cross_02

Equities_per_cross_03

Equities_per_cross_04

Tutte le equity line mostrano andamenti positivi, spesso irregolari, ma positivi. Un’altra evidenza è il basso numero di operazioni e l’average trade molto elevato. Di seguito viene mostrato come si è comportato il trading sytem dal 1 giugno 2015 al 25 novembre 2015.

Il periodo out of sample ha confermato quanto di buono aveva mostrato il sistema.

Out-of-sample

Mario Cesolini

mario.cesolini@gmail.com

Novità sul blog

Salve a tutti

Dopo tanti mesi di attesa, finalmente riprendo questo blog.

Ci sono stati moltissimi cambiamenti che influenzeranno anche i contenuti di questo blog.

Il primo cambiamento riguarda l’ambiente di calcolo. Per motivi di lavoro sono dovuto passare da R a MatLab. E questo porta ad un cambio nei contenuti del blog che non saranno più codificati solo in R, ma anche in MatLab.

Un altro cambiamento sarà che il tempo dedicato alle strategie sarà condiviso con quello dedicato a gestione del portafoglio, alle opzioni e alle obbligazioni. Questo significa che avremo più argomenti su cui parlare, ma purtroppo il tempo disponibile sarà sempre lo stesso.

Per finire una “New Entry”!!! Poiché ci sono in ballo progetti piuttosto ambiziosi a cui parteciperò, mi è necessario ampliare le mie conoscenze a un framework di utilizzo più ampio e generale, del tipo .NET/Mono o Java (in effetti non ce ne sono molti altri all’altezza…).

La scelta è caduta sul framework .NET perché, nella mia esperienza, è quello in assoluto più utilizzato nel mondo della finanza e del trading. Ad esempio, è possibile estendere funzionalità di determinate piattaforme professionali utilizzate dagli operatori solo tramite .NET. Ho fatto esperimenti col mondo Linux, ma la mancanza di compatibilità rende l’interscambio di dati e funzioni piuttosto laborioso, tempo che non posso più permettermi.

Il linguaggio che ho deciso di usare, comunque, sarà F#, che ha un approccio simile al MatLab e, dovendo impararne uno, ho preferito questo. Oltretutto ho notato che è molto utilizzato proprio in campo finanziario.

Spero che i cambiamenti non siano troppo “traumatici”, e ci vediamo al prossimo aggiornamento.

Misurare le performance di una strategia – Parte 1

Una domanda molto importante da porsi nella creazione di un Trading System è quella della misura delle performance della strategia che si sta costruendo. Di solito questa misura viene valutata guardando l’Equity Line, e di solito è una valutazione che ha un certo margine di soggettività.

Nel Trading Algoritmico, avendo a che fare con algoritmi e calcoli, si cerca sempre di diminuire o al limite eliminare la componente soggettiva.

La valutazione delle performance viene dunque ottenuta dai vari reports forniti da tutte le piattaforme che effettuano backtesting, e si utilizzano opportuni indicatori in modo da avere un’indicazione rapida e il più possibile completa del raggiungimento delle prestazioni desiderate.

In più, se si sta creando un Trading System automatico, e si fanno un certo numero di backtest per trovare i migliori parametri della strategia, occorre avere un risultato quantitativo, cioè un numero, tale da poter poter prendere la migliore decisione, magari farla prendere direttamente al computer.

Nella mia ricerca ho trovato vari modi per raggiungere questo scopo. Ne elencherò alcuni, presentando pro e contro, dando, alla fine, il codice in R per calcolare quello che attualmente ritengo sia l’indicatore più affidabile.

Cominciamo!!!

L’indicatore più intuitivo, e anche ingenuo, è quello dato dal Net Profit, cioè il rendimento finale. In pratica, da una serie di test si sceglie quello che, riferito all’ultima data, abbia dato il valore della equity più alto degli altri.

Un altro indicatore, altrettanto ingenuo e anche più pericoloso, è quello del Max Profit, cioè il rendimento massimo ottenuto nel periodo. Questo indicatore si basa sul massimo della equity, ottenuto in qualsiasi data, quindi non necessariamente ngli ultimi tempi.

Che cosa rende questi due indicatori così poco raccomandabili?

La prima cosa di cui questi indicatori non tengono conto sono le perdite che si potrebbero avere. Potrebbero essere così elevate che il capitale potrebbe non bastare, oppure, cosa che capita molto più spesso di quanto non si sospetti, come ho detto in un mio precedente post, potrebbero essere così elevate da non essere sopportate psicologicamente, facendo saltare tutta la strategia o, nel migliore dei casi, facendo attraversare periodi di forte sofferenza.

Oltretutto, non ci danno nessuna informazione sulla regolarità della equity.

Inoltre, il secondo indicatore può essere fuorviante per un altro motivo: il fatto che si sia raggiunto un determinato rendimento non vuol dire che lo si raggiunga di nuovo in futuro. Quindi, il fatto che l’ultimo rendimento sia più basso di quello massimo raggiunto in precedenza, potrebbe voler significare anche che la strategia non sia più efficace già adesso.

Un indicatore appena migliore può essere quello del massimo Drowdown. Ad esempio, in una serie di backtest si seleziona il test che dia la più bassa perdita massima.

Sebbene questo indicatore sia più protettivo dei precedenti nei confronti del capitale, presenta l’inconveniente di non fornire nessuna informazione su quanto guadagni la strategia. In altre parole, potremmo certamente avere perdite contenute, ma anche guadagni altrettanto contenuti! Cioè ritrovarci alla fine una serie di piccole perdite e piccoli guadagni e quindi aver perso solo tempo nel tradare. Ricordiamo che lo scopo del trading non è solo non perdere, ma anche guadagnare ragionevomente bene.

Inoltre non abbiamo ancora indicazioni sulla regolarità della equity line.

I reports di “blotter” riportano un indicatore che mette insieme i punti di forza di questi due tipi di indicatori: il rapporto Net Profit / Max Drowdown. Questo indicatore ci dà una misura sia di quanto si guadagni alla fine, sia fino a quanto si sia ridotto il capitale nel periodo preso in considerazione. E’ un indicatore molto migliore dei precedenti, tuttavia ancora non tiene abbastanza conto della regolarità della equity.

Un altro indicatore utile lo si ottiene dai reports delle varie piattaforme di Trading Algoritmico (tipo Trader Station Metastock, NinjaTrader, ecc., e anche “blotter”): il Profit Factor, che è, per chi è nuovo dell’ambiente, il rapporto tra i profitti totali e le perdite totali. Questo è un indicatore molto utilizzato, infatti riesce a tener conto di tutte le perdite e di tutti i profitti, quindi, in qualche modo, riesce in una certa misura a tener conto dell’andamento dell’equity.

In tanti Trading System questo indicatore può essere più che sufficiente per misurare le performance di una strategia. Tuttavia ancora dà indicazioni non sempre sufficienti su quanto possa essere irregolare l’equity line. In certi casi (piuttosto rari in verità) potrebbe non essere possibile automatizzare completamente la scelta e occorre guardare manualmente l’equity.

Per quanto riguarda l’ultimo indicatore che voglio presentare, occorre fare una premessa. Per non allungare troppo la lettura, preferisco riportare il tutto nella prossima parte, dove fornirò anche il codice R per calcolarlo.

Alla prossima!!!

Conoscenze utili

Questo post è poco tecnico, tuttavia, dalla mia esperienza, credo che valga la pena tenerlo in considerazione, altrimenti si rischia di vanificare del lavoro ben fatto. Teniamo presente che, anche se facciamo gestire il trading a un computer, alla fine è sempre l’essere umano a trarne perdita o profitto, e dipende da come esso si comporta a raggiungere l’una o l’altra.
E’ noto che nel Trading Algoritmico occorre avere conoscenze di vario genere, e possiamo suddividere tali conoscenze in due grandi categorie:

  1. Competenze tecniche
  2. Competenze personali

La prima categoria comprende principalmente le seguenti discipline:

  • Analisi Tecnica
  • Programmazione
  • Statistica
  • Matematica

In una certa misura, anche l’Analisi Fondamentale e la Gestione del Portafoglio possono essere utili in varie circostanze.
E’ abbastanza immediato capire perchè le discipline messe nell’elenco sono importanti per costruire strategie: l’Analisi Tecnica ci porta la conoscenza del mercato, vari indicatori su come potrebbe reagire o meno, insomma è la base da cui si parte per costruire la strategia.
La Programmazione ci serve per implementare le nostre strategie nel computer, poterne testare l’efficacia e la robustezza, renderle anche automatiche.
Statistica e Matematica servono per misurare le prestazioni delle strategie e ci danno gli strumenti per capire se una strategia è quello che cerchiamo o no. Fortunatamente, per quanto riguarda queste ultime discipline, non serve una conoscenza eccessivamente approfondita, ma, com’è intuibile, più si conosce e meglio è.
Non ho messo Analisi Fondamentale e Gestione del Portafoglio tra le discipline importanti per il Trading Algoritmico perchè, parlando con traders che hanno successo, mi hanno detto che non le utilizzano. Certo anche qui vale il discorso di prima: più si conosce e più scelte si hanno nel creare strategie vincenti.
Passiamo ora alle competenze personali, possiamo riassumerle in una sola:

  • Consapevolezza di sè

Può sembrare qualcosa che non c’entri nulla con il discorso del Trading Algoritmico, ma ho visto traders anche famosi ammettere di non aver retto psicologicamente al drow down momentaneo del loro Trading System (peraltro ben al di sotto dei limiti di quello previsto dal Trading System stesso), di aver interrotto il programma ed essere usciti dalla posizione portandosi la perdita. Se avessero avuto fiducia nel loro stesso Trading System avrebbero non solo recuperato il drow down in breve tempo, ma avrebbero anche guadagnato. Questi fatti la dicono lunga sull’importanza di conoscere sè stessi, sapere i propri limiti e quanto si riesce psicologicamente a reggere alla perdita o al guadagno, senza cedere a paura o avidità, perchè entrambe sono cose che si pagano.
Devo dire, comunque, che ammiro l’onestà dei traders in questione per averlo ammesso.
A questo punto la domanda potrebbe essere: come raggiungere una sufficiente consapevolezza di se senza doverlo scoprire sul campo? Qui non c’è una risposta universale, perchè ogni persona è diversa dalle altre. Posso però consigliare di fare simulazioni di perdite di varia entità e confrontarsi con un mentore (che può essere un trader esperto, un coach, un insegnante) per cercare di provare emozioni legate alla perdita nel modo più realistico possibile, e trarne le considerazioni personali. Certo, finchè non si è in reale non sarà mai esattamente la stessa cosa, ma in questo modo si limiterà la perdita anche considerevolmente.
Perchè ho voluto porre l’accento su questi fatti? Perchè non accada che, dopo aver investito tempo e lavoro, si butti tutto via per un disagio psicologico.
Bisogna che sia chiaro che, se si crea un Trading System, lo si sia collaudato e se ne sia verificata la robustezza, bisogna AVERE FIDUCIA che funzioni, anche se ci si trovi in un periodo di forte perdita.
Per questo mese finiamo qui, ci vediamo alla prossima volta.

Test in R: “Faber Portfolio” – Parte 2

Continuiamo la discussione cominciata nella Prima parte.

La sezione seguente

# Adjust prices for splits/dividends (thanks pg)
#IEF = adjustOHLC(IEF)
#SPY = adjustOHLC(SPY)

anche se commentata, utilizza i dati modificati a causa di splits e dividendi. Questa function è da utilizzarsi se si selezionano titoli azionari. Per gli indici, quelli usati nell’esempio, non è necessaria, dato che non subiscono nessuna di queste due operazioni.

Vediamo adesso una function molto utile degli oggetti “xts”

# Convert data to monthly frequency (to.weekly() needs drop.time=FALSE)
IEF = to.monthly(IEF, indexAt=’endof’
SPY = to.monthly(SPY, indexAt=’endof’)

La function “to.monthly()” converte il time-frame dei dati. Nel caso qui presentato i prezzi vengono convertiti da giornalieri a mensili, presentando così, per ogni barra, l’apertura, il max, il min e la chiusura di ogni mese. Nel caso le esigenze lo richiedano, è possibile passare a time-frames diversi, tipo settimanali o annuali. Non è possibile, ovviamente, scendere da periodi più lunghi a quelli più brevi (ad esempio da mesi a giorni).

Nella sezione seguente vedremo l’uso di indicatori tecnici, contenuti nel package “TTR”

# Set up indicators with TTR
print(“Setting up indicators”)
IEF$SMA = SMA(Cl(IEF), 10)
SPY$SMA = SMA(Cl(SPY), 10)

In pratica, abbiamo calcolato le medie mobili a 10 periodi dei prezzi di chiusura dei due titoli.

Vediamo qui anche un’altra caratteristica delle strutture dati di R. Il comando:

SPY$SMA = SMA(Cl(SPY), 10)

aggiunge all’oggetto “SPY” un’ulteriore serie di dati, quella calcolata dalla media mobile. Essendo entrambi oggetti “xts”, la corrispondenza tra prezzi e valore della media viene gestita automaticamente tramite il valore delle date.

#Set up a portfolio object and an account object in blotter
initPortf(name=’default’, symbols=symbols, initDate=initDate)
initAcct(name=’default’, portfolios=’default’, initDate=initDate, initEq=initEq)
verbose = TRUE

Qui cominciamo a vedere l’uso di due oggetti di “blotter”. Il primo è
“portfolio”, un oggetto che tiene traccia dei titoli scelti. Portfolio può
tracciare l’andamento di ogni titolo contenuto periodo per periodo.

Il secondo è “account”, che può contenere uno o più oggetti portfolio, e che
tiene traccia di tutti i titoli e i portfolio nel complesso sempre periodo
per periodo.

A questo punto entriamo nel vivo della simulazione.

#Create trades
for( i in 10:NROW(SPY) ) {
  CurrentDate=time(SPY)[i]
equity = getEndEq(Account=’default’, CurrentDate)
for( symbol in symbols ) {
sym = get(symbol)
ClosePrice = as.numeric(Cl(sym[i,]))
Posn = getPosQty(Portfolio=’default’, Symbol=symbol,Date=CurrentDate)
UnitSize = as.numeric(trunc((equity/NROW(symbols))/ClosePrice))
# Position Entry (assume fill at close)
if( Posn == 0 ) {
# No position, so test to initiate Long position
if( Cl(sym[i,]) > sym[i,’SMA’] ) {
# Store trade with blotter
addTxn(‘default’, Symbol=symbol, TxnDate=CurrentDate, TxnPrice=ClosePrice, TxnQty=UnitSize, TxnFees=0, verbose=verbose)
}
} else {
# Have a position, so check exit
if( Cl(sym[i,]) < sym[i,’SMA’] ) {
# Store trade with blotter
addTxn(Portfolio=’default’, Symbol=symbol, TxnDate=CurrentDate, TxnPrice=ClosePrice, TxnQty=-Posn, TxnFees=0, verbose=verbose)
}
}
} # End symbols loop
# Calculate P&L and resulting equity with blotter
updatePortf(Portfolio=’default’, Dates=CurrentDate)
updateAcct(name=’default’, Dates=CurrentDate)
updateEndEq(Account=’default’, Dates=CurrentDate)
} # End dates loop

Qui ci sono due cicli for, il primo effettua il ciclo sul periodo, cioè mese
per mese, il secondo fa una verifica sulle condizioni simbolo per simbolo e,
in caso di verifica, effettua le transazioni. Queste vengono registrate con
la function “addTxn()” nel portfolio. Alla fine, per ogni periodo, vengono
chiamate tre function per aggiornare il portfolio, l’account e l’equity
finale, cioè “updatePortf()”, “updateAcct()” e “updateEndEq()”.

La parte finale:

# Buy and Hold cumulative equity
buyhold = exp(cumsum( ( 0.5*ROC(Cl(IEF)) + 0.5*ROC(Cl(SPY)) )[-1] ))
# Final values
cat(‘Tactical Asset Allocation Return: ‘,(getEndEq(Account=’default’,
Date=CurrentDate)-initEq)/initEq,’\n’)
cat(‘Buy and Hold Return: ‘,tail(buyhold,1)-1,’\n’)
# Plot Strategy Summary
png(filename=”20091118_blotter_strategy.png”, 720, 720)
#charts.PerformanceSummary(ROC(getAccount(‘default’)$TOTAL$End.Eq)[-1],main=”Tactical
Asset Allocation”)
charts.PerformanceSummary(ROC(getAccount(‘default’)$summary$End.Eq)[-1],main=”Tactical
Asset Allocation”)
dev.off()
# Plot Buy and Hold Summary
png(filename=”20091118_blotter_buyhold.png”, 720, 720)
charts.PerformanceSummary(ROC(buyhold)[-1],main=”Buy & Hold”)
dev.off()

calcola la performance della strategia “buy and hold” e disegna i grafici.
Il disegno dei grafici avviene su immagini png, salvate nella cartella di
lavoro di R.

Bene, siamo alla fine di questa spiegazione. Spero che sia stata utile per
mostrare le grandi potenzialità di R.

A presto.

Test in R: “Faber Portfolio” – Parte 1

Dopo le dovute introduzioni, entriamo nel vivo dell’utilizzo dell’ambiente, e lo faremo in un articolo diviso in più parti.

Partendo da un test relativamente semplice, ne approfitteremo per spiegare i primi elementi di R e dei package per il Trading Algoritmico che utilizzeremo.

Il test utilizzerà un listato preso dal blog “FOSS Trading”, e si basa sulla strategia descritta nell’ articolo: Faber, Mebane T., – “A Quantitative Approach to Tactical Asset Allocation.” – Journal of Risk Management (Spring 2007).

In questo articolo gli autori descrivono una strategia da applicare allo SPY:

  • comprare quando il prezzo di chiusura del titolo supera la SMA a 10 mesi,
  • chiudere e incassare quando la SMA a 10 mesi supera il prezzo di chiusura del titolo.

Le candele sono mensili. In questa strategia si entra solo in long, mai in short.

Tengo a precisare che questa è una strategia che riporto qui solo per spiegare come funziona R, non è consigliabile utilizzarla in reale (almeno senza le opportune verifiche).

Riporto prima il listato e dopo spiegherò le singole parti.

# This code implements the strategy found in:
# Faber, Mebane T., “A Quantitative Approach to Tactical Asset Allocation.”
# Journal of Risk Management (Spring 2007).
# The article implements a simpler version of the 200-day SMA, opting for a
# 10-month SMA because monthly data are more easily available in earlier
# periods and lower granularity should translate to lower transaction costs.
# The rules of the system are relatively simple:
# – Buy when monthly price > 10-month SMA
# – Sell and move to cash when monthly price < 10-month SMA
# 1. All entry and exit prices are on the day of the signal at the close.
# 2. All data series are total return series including dividends, updated monthly.
# NOTE: For the purposes of this demo, we only use price returns.
# 3. Cash returns are estimated with 90-day commercial paper. Margin rates for
# leveraged models are estimated with the broker call rate.
# NOTE: For the purposes of this demo, we ignore interest and leverage.
# 4. Taxes, commissions, and slippage are excluded.
# Data:
# This demo uses monthly data downloaded from Yahoo Finance for two ETFs: SPY and
# IEF. These were chosen to illustrate the classic stock/bond asset portfolio.
# Though longer serires would be preferred, data for IEF begin in mid-2002.
# Load required libraries
library(quantmod)
library(TTR)
library(blotter) # r-forge revision 193
library(PerformanceAnalytics)
# Set initial values
initDate=’2006-07-31′
endDate=’2012-01-31′
initEq=100000
# Set currency and instruments
currency(“USD”)
stock(“IEF”,currency=”USD”,multiplier=1)
stock(“SPY”,currency=”USD”,multiplier=1)
# Load data with quantmod
print(“Loading data”)
symbols = c(“IEF”, “SPY”)
getSymbols(symbols, from=initDate, to=endDate, index.class=c(“POSIXt”,”POSIXct”))
# Adjust prices for splits/dividends (thanks pg)
#IEF = adjustOHLC(IEF)
#SPY = adjustOHLC(SPY)
# Convert data to monthly frequency (to.weekly() needs drop.time=FALSE)
IEF = to.monthly(IEF, indexAt=’endof’)
SPY = to.monthly(SPY, indexAt=’endof’)
# Set up indicators with TTR
print(“Setting up indicators”)
IEF$SMA = SMA(Cl(IEF), 10)
SPY$SMA = SMA(Cl(SPY), 10)
# Set up a portfolio object and an account object in blotter
initPortf(name=’default’, symbols=symbols, initDate=initDate)
initAcct(name=’default’, portfolios=’default’, initDate=initDate, initEq=initEq)
verbose = TRUE
# Create trades
for( i in 10:NROW(SPY) ) {
  CurrentDate=time(SPY)[i]
  equity = getEndEq(Account=’default’, CurrentDate)
  for( symbol in symbols ) {
    sym = get(symbol)
    ClosePrice = as.numeric(Cl(sym[i,]))
    Posn = getPosQty(Portfolio=’default’, Symbol=symbol, Date=CurrentDate)
    UnitSize = as.numeric(trunc((equity/NROW(symbols))/ClosePrice))
    # Position Entry (assume fill at close)
    if( Posn == 0 ) {
    # No position, so test to initiate Long position
      if( Cl(sym[i,]) > sym[i,’SMA’] ) {
        # Store trade with blotter
        addTxn(‘default’, Symbol=symbol, TxnDate=CurrentDate,
          TxnPrice=ClosePrice, TxnQty=UnitSize, TxnFees=0, verbose=verbose)
      }
    } else {
      # Have a position, so check exit
      if( Cl(sym[i,]) < sym[i,’SMA’] ) {
        # Store trade with blotter
        addTxn(Portfolio=’default’, Symbol=symbol, TxnDate=CurrentDate,
          TxnPrice=ClosePrice, TxnQty=-Posn, TxnFees=0, verbose=verbose)
      }
    }
  } # End symbols loop
  # Calculate P&L and resulting equity with blotter
  updatePortf(Portfolio=’default’, Dates=CurrentDate)
  updateAcct(name=’default’, Dates=CurrentDate)
  updateEndEq(Account=’default’, Dates=CurrentDate)
} # End dates loop
# Buy and Hold cumulative equity
buyhold = exp(cumsum( ( 0.5*ROC(Cl(IEF)) + 0.5*ROC(Cl(SPY)) )[-1] ))
# Final values
cat(‘Tactical Asset Allocation Return: ‘,(getEndEq(Account=’default’, Date=CurrentDate)-initEq)/initEq,’\n’)
cat(‘Buy and Hold Return: ‘,tail(buyhold,1)-1,’\n’)
# Plot Strategy Summary
png(filename=”20091118_blotter_strategy.png”, 720, 720)
#charts.PerformanceSummary(ROC(getAccount(‘default’)$TOTAL$End.Eq)[-1],main=”Tactical Asset Allocation”)
charts.PerformanceSummary(ROC(getAccount(‘default’)$summary$End.Eq)[-1],main=”Tactical Asset Allocation”)
dev.off()
# Plot Buy and Hold Summary
png(filename=”20091118_blotter_buyhold.png”, 720, 720)
charts.PerformanceSummary(ROC(buyhold)[-1],main=”Buy & Hold”)
dev.off()

Cominciamo a spiegare passo passo, in modo da mostrare, anche a chi desidera conoscere R un pò più in dettaglio, un assaggio di cosa si può fare con questo ambiente di calcolo sfruttando la potenza dei package di Trading Algoritmico.

Il carattere “#” serve per i commenti. In R esiste solo il commento per la singola riga.

La sezione:

# Load required libraries
library(quantmod)
library(TTR)
library(blotter) # r-forge revision 193
library(PerformanceAnalytics)

carica i packages specializzati per il Trading Algoritmico che utilizzeremo. I packages devono essere installati nell’ambiente. L’installazione avviene in maniera molto semplice utilizzando la function install.packages(), che riesce a installare i packages anche direttamente da internet. Per l’uso basta fare riferimento alla documentazione di R.
La sezione:

# Set initial values
initDate=’2006-07-31′
endDate=’2012-01-31′
initEq=100000

setta i valori che ci servono. I primi due valori sono le date, l’altro è il capitale iniziale. Da notare che le date sono delle stringhe, il formato da utilizzare per l’indicizzazione delle strutture dati “xts”.

La sezione:

# Set currency and instruments
currency(“USD”)
stock(“IEF”,currency=”USD”,multiplier=1)
stock(“SPY”,currency=”USD”,multiplier=1)

setta la moneta da utilizzare e i titoli che saranno utilizzati per il test.

Nella sezione seguente si nota qualcosa di molto interessante:

# Load data with quantmod
print(“Loading data”)
symbols = c(“IEF”, “SPY”)
getSymbols(symbols, from=initDate, to=endDate, index.class=c(“POSIXt”,”POSIXct”))

La variabile “symbols” è un vettore di stringhe costruito con la function “c()”. Per i neofiti, questa function è una delle più utilizzate in R, e genera un vettore a partire dai parametri passati in ingresso. Per maggiori dettagli fare riferimento alla documentazione di R.

La function “getSymbols()” è davvero molto potente. Scarica da una sorgente su internet i dati storici dei simboli che gli vengono passati. La sorgente di default è Yahoo. In uscita restituisce tanti oggetti “xts” quanti sono i simboli nel vettore “symbols”. Gli oggetti xts sono una potentissima struttura dati. Si può accedere agli elementi sia con gli indici (in maniera analoga agli array) sia con le date. Le date devono essere passate come stringhe. I dati storici quindi sono memorizzati in questi due oggetti.

Per adesso ci fermiamo qui. Proseguiremo la spiegazione nella prossima parte.

A presto.

L’ambiente di calcolo “R”

Rieccoci di nuovo.

In questo post presenterò brevemente il software principale che utilizzo nei test delle mie strategie di Trading Algoritmico: R.

Ho scelto questo software per un insieme di fattori, non ultimo il fatto che me lo ha consigliato un trader algoritmico con esperienza sul floor.

Ovviamente come ogni software ha i suoi pro e contro.

Contro:

  • E’ Open Source. Si, già posso sentire le critiche dei seguaci di questa filosofia. Tuttavia è innegabile che i software di questo tipo vengono forniti così come sono, senza alcuna garanzia di essere esenti da bug di calcolo. L’utilizzo è quindi a rischio dell’utente e i produttori non si assumono nessuna responsabilità su eventuali errori generati dal software. In più manca un’assistenza ufficiale.
  • Poco user friendly. R usa un’interfaccia utente a caratteri, in cui occorre scrivere il comando da eseguire. Per chi non ha mai utilizzato tali interfacce può essere molto frustrante all’inizio. Tuttavia si trovano su internet delle interfacce grafiche free che “ingentiliscono” l’uso di R. Quelle con cui mi sono trovato bene sono “RStudio” e “StatEt”.
  • Curva d’apprendimento. Occorre imparare a ragionare in maniera un pò particolare rispetto ad altri paradigmi di programmazione, e potrebbero volerci un paio di mesi apprenderlo.

Pro:

  • E’ Open Source. Tenendo conto di quanto detto nei “Contro”, sono innegabili anche i grandi vantaggi di questo tipo di software. Proprio perchè il programma viene utilizzato da tantissimi utenti, i bug hanno un’alta probabilità di essere rilevati, ed è facile comunicarli agli autori per le correzioni, che di solito avvengono in poco tempo.
  • E’ GRATIS! Un software di questa potenza gratis è qualcosa di strepitoso.
  • E’ stabile. Ormai gli utilizzatori sono non solo importanti università ed enti di ricerca, ma anche realtà indistriali. Tutto questo è un serio indizio sulla grande stabilità raggiunta dal software.
  • Ha un grande numero di package specializzati. Questi package, che possiamo immaginare come una specie di plug-in (non me ne vogliano gli esperti) sono molto specializzati e hanno un elevato numero di function adatte agli scopi. Per il mio Trading Algoritmico utilizzo alcuni di questi package scritti  per questo scopo.

Ci sarebbe tanto altro da dire su R, ma non possiamo certo dirle tutto in un articolo. Dalla prossima volta comincerò a scrivere esempi pratici utilizzabili nel software.

Alla prossima.

I ferri del mestiere

Come promesso, eccoci a parlare degli strumenti da utilizzare per fare Trading Algoritmico.

Posso immaginare già i pensieri di molti lettori: “chissà quali mirabolanti marchingegni occorre utilizzare per riuscire ad operare con successo”, oppure: “chissà che studi bisogna fare per capirci qualcosa”.

Tranquilli!!!

Nella realtà le risorse da utilizzare sono meno esotiche (ed esose) di quello che possa sembrare.

In questo post farò un elenco di questi strumenti e un breve commento su di essi. Ci sarà poi l’approfondimento nei post seguenti.

Ovviamente, questo elenco tratta degli strumenti che io preferisco usare. Ognuno è libero di scegliere quelli che preferisce.

Cominciamo quindi con l’elenco.

1. Carta e penna
Non ve l’aspettavate eh? Ebbene si, la cara vecchia carta insieme all’intramontabile penna sono ancora molto attuali. Servono a tanti scopi: dal prendere appunti allo scrivere con chiarezza l’idea della strategia. Qualcuno potrebbe obiettare che le stesse cose si possono fare anche con il computer o lo smartphone, ma volete mettere la praticità e la rapidità di scrivere un’intuizione su un taccuino, magari una sera che siamo al ristorante e stiamo discutendo con un amico? Oppure nella creazione di una mappa mentale bella grande,  in formato A3 ( o addirittura A2)? Senza contare che non rischiano di scaricarsi improvvisamente.

2. Computer
Beh, questo era ovvio, visto che parliamo di trading sviluppato con il computer. Non occorre un computer stratosferico, l’importante è che faccia girare in scioltezza i programmi da utilizzare.

3. Connessione a internet
Telefonare alla banca o al broker non è proprio automatizzabile: occorre connettersi informaticamente per mandare gli ordini in automatico. Una connessione a internet è dunque necessaria.

4. Software
Mentre le prime tre voci dell’elenco sono abbastanza condivisibili da tutti, sul software da utilizzare si entra nel campo dei gusti e delle esperienze personali. Tuttavia ritengo che le caratteristiche necessarie a un buon software siano la possibilità di programmare facilmente i test che si desiderano provare e lo stile di programmazione implementato.  Io personalmente utilizzo l’ambiente di calcolo “R” come piattaforma di test delle strategie e misura dei risultati. Nello stesso tempo sto approfondendo Ninjatrader da usare con il broker. Ovviamente qualunque software si intenda utilizzare, va imparato al meglio.

Per finire, credo sia importante sottolineare due elementi molto importanti, senza i quali tutto l’elenco fatto è inutile: la formazione e la mente.

Occorre studiare, discutere, imparare per poter poi creare con consapevolezza le proprie strategie.

Allo stesso tempo occorre un buon controllo mentale per reggere gli inevitabili periodi di perdita previsti dalla strategia stessa.

Per oggi abbiamo finito, ci diamo appuntamento alla prossima volta.

Presentiamo il Trading Algoritmico

Iniziamo!!!

Si fa un gran parlare in giro del Trading Algoritmico, ma alla fine che cos’è?

Tanto per cominciare, sfatiamo un pò di miti.

Il Trading Algoritmico non è un videogioco, nè una macchinetta sforna-soldi.

Molti credono che basti far girare un programmino collegato al broker, che invii segnali di comprare e vendere, e così si sfornano tanti soldini senza nessuno sforzo.

Magari!!!

No, disilludetevi dal riuscire a guadagnare in questo modo ingenuo.

Il Trading Algoritmico è un trading che opera seguendo delle regole codificate in un algoritmo. Si può fare a mano, ma nell’era informatica si può utilizzare il computer, con l’innegabile vantaggio di poterlo fare in maniera automatica e senza emotività.

Per un Trading Algoritmico fatto al computer c’è anche il rovescio della medaglia: il computer non si accorge che i mercati cambiano.

Questo vuol dire che anche se troviamo una strategia che funziona, non possiamo lanciarla e dimenticarcene, occorre verificare periodicamente, mediante opportune misure, che sia sempre valida. Arriverà il momento in cui essa farà perdere soldi perchè il mercato è cambiato (nella mia esperienza l’ho visto cambiare letteralmente da un minuto all’altro), e allora occorrerà sostituirla con un’altra, che occorrerà verificare periodicamente, e così via.

Eh, si. Operare con il trading non è un gioco, tanto più il Trading Algoritmico. E’ un lavoro che va fatto con perseveranza e passione, elementi senza i quali è meglio lasciar perdere, come del resto in ogni ambito della vita.

Un altro vantaggio nell’uso del computer nel trading è quello di riuscire a testare in maniera relativamente rapida la bontà o meno di una strategia. Infatti, utilizzando opportunamente i dati a disposizione, è possibile verificare il rendimento di una strategia, e scartare quelle che sicuramente non ci soddisfano, riducendo così il notevolmente il numero di strategie non produttive che si utilizzeranno in reale.

A rigore, anche questo passaggio potrebbe farsi a mano, ma la mole di calcoli che occorre fare è così elevata che ci vorrebbero mesi e mesi per fare quello che il computer riesce a fare in qualche minuto.

L’uso opportuno dei dati a disposizione sarà uno degli argomenti che esplorerò in questo blog.

Ci vediamo al prossimo post: “I ferri del mestiere”.

L’avventura comincia!

Benvenuti!!!

Inizio questo mio blog con un pò di trepidazione, quel sentimento che si prova quando si comincia qualcosa di nuovo.

La mia intenzione è quella di esporre idee per avere un trading sereno e tranquillo, senza la frenesia derivante dall’eccessiva operatività degli scalper, e allo stesso tempo tale che possa dare un buon rendimento mensile.

Darò una forte evidenza al trading algoritmico, scrivendo idee, listati, test e ottimizzazione di strategie.

I commenti costruttivi saranno ben accetti, perchè credo che lo scambio di idee sia indispensabile al miglioramento e al progresso di qualunque cosa. Tali commenti, ovviamente, saranno moderati secondo il mio giudizio.

Ci rivediamo allora al prossimo articolo.