R + ib

Valetudo

Nuovo Utente
Registrato
29/5/11
Messaggi
178
Punti reazioni
9
Qualcuno usa il collegamento fra R e le API di Interactive Brokers tramite il package "IBrokers"? ho qualche domanda in proposito.. :wall:

in alternativa anche il collegamento tra Python e IB tramite IbPy andrebbe benissimo

ma prima di fare le domande aspetto di vedere se c'è qualcuno perchè le probabilità sono piu che minime.. :)
 
No, ma piu' che altro hai avuto modo di automatizzare la cosa? Ti andrebbe di condividere il codice R o Python?
 
in pratica io ho fatto una mia libreria in python che lavora sul concetto dell'auto-riconoscimento dei pattern. fatta in modo assolutamente non traducibile nelle piattaforme tipo multicharts o tradestation per via dei loro limiti..

allora devo collegarmi direttamente alle API, quindi al di la del codice del mio programma, il problema è l'implementazione dei programmini di terze parti che fanno da tramite fra r e le API di IB o python e le API di IB, rispettivamente iBrokers e IbPy con cui sono riuscito a connettermi, ma non a gestire i vari tipi di dati che IB ti riversa addosso quando gli chiedi uno stream in tempo reale..

dicevo che anche r va bene tanto la traduzione da python a r è facile visto che tutti e due lavorano allo stesso identico modo coi dataframes
 
devo aggiustarlo perchè non avevo pensato a condividerlo e ci sono molte funzioni di input ed output riferite ai nomi dei dischi e cartelle che ho sulla mia rete comunque si, lo metterò anche io su git ;)
 
Ok, fammi sapere.
Comunque gia che sei li a modificarlo credo che ti convenga piu averlo in R. Anche per compatibilita future
 
oggi sono riuscito a collegare Python a IB, scaricare dati storici ed in tempo reale e a mandare ordini grazie a IbPy che ha un'interfaccia leggermente più umana rispetto alle API ufficiali...

come software di data analisi comunque preferisco python + pandas perchè sono piu abituato e perchè ha performances migliori come velocità di elaborazione.. ma hai ragione sulla compatibilità futura..

comunque ti aggiorno
 
Valetudo, riguardo Python potrebbero interessarti i seguenti:


Using Python, IBPy and the Interactive Brokers API to Automate Trades - QuantStart

https://github.com/quantopian/zipline

Tutorial — PyAlgoTrade 0.14 documentation

https://code.google.com/p/trading-with-python/

Sto personalmente considerando un passaggio da Matlab a Python per l'esecuzione, ma devo ancora approfondire l'argomento. Se ti va magari si potrebbe collaborare e velocizzare il processo per entrambi.

Penserei che l'architettura che ho sviluppato per gestire i dati in tempo reale in Matlab sia facilmente riusabile in Python (gli articoli di quantstart sembrano anche offrire un ottimo punto di partenza)
 
Valetudo, riguardo Python potrebbero interessarti i seguenti:


Using Python, IBPy and the Interactive Brokers API to Automate Trades - QuantStart

https://github.com/quantopian/zipline

Tutorial — PyAlgoTrade 0.14 documentation

https://code.google.com/p/trading-with-python/

Sto personalmente considerando un passaggio da Matlab a Python per l'esecuzione, ma devo ancora approfondire l'argomento. Se ti va magari si potrebbe collaborare e velocizzare il processo per entrambi.

Penserei che l'architettura che ho sviluppato per gestire i dati in tempo reale in Matlab sia facilmente riusabile in Python (gli articoli di quantstart sembrano anche offrire un ottimo punto di partenza)

ciao e grazie per i link! ;)

il tuo passaggio è un po atipico perchè passeresti da un ambiente commerciale e dotato di supporto come matlab immagino con IB-matlab (che per quello che ho visto ha funzioni chiare e ben divise) ad uno free quindi senza supporto, il tutto per la fase piu "delicata" ovvero l'interfacciamento con il broker. Io personalmente avrei forse fatto il contrario :)
comunque ho creato un account con github e dalla prossima settimana inizio a mettere li un po di codice (metto i link su questo post).

Ti consiglio il pacchetto per l'eleborazione scientifica Canopy di enthought che ha già tutti i pacchetti installati (servono numpy, pandas e matplotlib ) a cui devi solo piu aggiungere -scaricandotelo tu- IbPy di cui la versione piu recente è qui https://github.com/blampe
 
ciao e grazie per i link! ;)

il tuo passaggio è un po atipico perchè passeresti da un ambiente commerciale e dotato di supporto come matlab immagino con IB-matlab (che per quello che ho visto ha funzioni chiare e ben divise) ad uno free quindi senza supporto, il tutto per la fase piu "delicata" ovvero l'interfacciamento con il broker. Io personalmente avrei forse fatto il contrario :)
comunque ho creato un account con github e dalla prossima settimana inizio a mettere li un po di codice (metto i link su questo post).

Ti consiglio il pacchetto per l'eleborazione scientifica Canopy di enthought che ha già tutti i pacchetti installati (servono numpy, pandas e matplotlib ) a cui devi solo piu aggiungere -scaricandotelo tu- IbPy di cui la versione piu recente è qui https://github.com/blampe

Grazie, ma pensavo di usare Anaconda (non che ci sia tutta 'sta differenza a quanto vedo).

Ad ogni modo, le motivazioni dietro il passaggio sono diverse:

1) proprio la commercialita' di Matlab e' per me un problema. E a meno che non ti viene fornito gratis dalla compagnia per cui lavori, o non hai la tua compagnia con una massa critica tale da rendere trascurabile il prezzo (o non hai problemi ad usarlo in altro modo), direi che e' spesso un problema :).

2) Sto usando ib-matlab da quasi 1 anno, e non sono proprio contento (ne parlavo qua: http://www.finanzaonline.com/forum/...1500012-setup-per-algo-trading-matlab-ib.html ). Le nuove versioni di matlab offrono collegamenti con IB (e cqg e TT) nel trading/datafeed toolboxes, ma ovviamente sono a pagamento. E in verita' non sono nemmeno contento di usare IB per il datafeed, il che cancella meta' dei vantaggi di ib-matlab, e una volta che mi devo mettere a smanettare per integrare altri feeds ho pensato che tanto vale fare il passaggio a Python

3) leggo di davvero tante persone (privati e compagnie) che stanno usando Python, il che rende piu' facile il passaggio e puo' anche aprire altre strade in futuro

L'unica cosa che mi lascia perplesso e' che nessuno sembra usare (e tutti sconsigliano) multithreading in Python - da quello che ho letto (solo di sfuggita pero') c'e' chi ha un loop perpetuo e ad ogni giro fa uno snapshot dei prezzi e chi invece semplicemente riceve lo streaming, ma ignora le informazioni che arrivano mentre stai processando l'informazione precedente.
Qual'e' la tua esperienza in merito?

Una cosa ottima di ib-matlab e' che ti puoi collegare agli stream che vuoi e quando ricevi informazioni nuove un thread nuovo parte in parallelo.
 
Un grazie sincero a tutti per le condivisioni su GitHub (presenti e future) :)
 
Sono riuscito anch'io a ricevere dei prezzi in streaming usando Python e ibpy.

Ho notato dei problemi con l'uso di "None" che da Python 2.4 raisa un errore e anche il problema con l'ID duplicato se provi a sconnetterti e riconnetterti.
Per il primo non ho una soluzione ancora (che non sia riscrivere il codice ovunque venga usato o usare una vecchia versione di Python), per il secondo pensavo di aver trovato la soluzione qui:

https://code.google.com/p/ibpy/issues/detail?id=12&can=1&q=id

ma con un breve test non sono riuscito a farlo girare, riprovero' piu' in la'.

Riguardo il multithreading invece ho parlato con una persona che ha gia' usato Python in questo contensto , ed effetivamente quello che fa e' creare un oggetto queue che accumula i nuovi prezzi, e poi decide quali scartare (ad es tieni il piu' recente e il piu' vecchio e scarta gli altri, o quello che vuoi).
A meno che non si fa HFT o simili (comunque impossibile con IB) non dovrebbe essere un problema.
 
Sono riuscito anch'io a ricevere dei prezzi in streaming usando Python e ibpy.

Ho notato dei problemi con l'uso di "None" che da Python 2.4 raisa un errore ..

io ho seguito questa risposta

'I believe removing None from the
from __builtin__ import float, str, None, True, False
might do the trick'

e ha funzionato. (in pratica ho cancellato l'import di None
 
io ho seguito questa risposta

'I believe removing None from the
from __builtin__ import float, str, None, True, False
might do the trick'

e ha funzionato. (in pratica ho cancellato l'import di None

Si quello l'ho fatto anch'io, grazie. Il punto e' che None viene poi usato in un sacco di punti in un modo non piu' supportato, quindi il dubbio se si comporti effettivamente come dovrebbe. Immagino andro'

Tralasciando il "dettaglio", son riuscito a far girare un po' di cose (risolto il probelma della disconnessione e sono riuscito anche a ricevere quote di diversi strumenti in contemporanea)

Credo mi manchi solo la gestione dei messaggi (e.g. order filled) e poi l'architettura dovrebbe simile a quella che usavo in Matlab (a parte la mancanza di multithreading)
 
visto che parlavamo del sistema di autoriconoscimento pattern io ho fatto questo
in python

in pratica sono due classi sotto la cartella 'GM'
con la prima (Data nel file __init__.py) si possono prelevare dati da yahoo e plottarli come candele

es:obj = Data('SPY', '2013-2-2')
poi per prelevar i dati:
obj.getData()
e per plottare a candele obj.plotCandle()
per plottare in confronto ad atri strumeti:
obj.getData(True, 'DIA','GOOG','GLD','SLV')
------------------------------------------
nella seconda classe PatternRec nel file OOPtools_4.py
si può fare la ricerca di pattern creando un oggetto cosi:
o = PatternRec(tickerSymbol='SPY')

e poi
o.pRec()
o.plotPatterns()



e in o.scan() si vede in un grafico quali esiti hanno dato i pattern di diverse lunghezze (da un minimo di 30 a un max di 90 gg) a seconda della lunghezza della finestra di giorni successivi alla fine del pattern (da 7 a 21)

il criterio di 'somiglianza' dei pattern passati con quello attuale comunque è l'Indice di correlazione di Pearson, mentre per capire se gli esiti dei diversi pattern sono concordi fra loro ho semplicemente imposto che almeno il 65% di essi debba essere positivo, e viceversa. Si ha un'idea abbastanza chiara usando la funzione 'plotPatterns()'
 
Ultima modifica:
Per l'individuazione dei pattern "classici" con R rimando a:
L'idea dietro il codice dovrebbe essere quella di identificare automaticamente i pattern "classici" di analisi tecnica così come codificati in questo paper:Riassumo in sintesi estrema (abbiate pietà per eventuali refusi, lessi solo il blog diverso tempo fa): si prende la serie storica e le si applica un filtro per smorzare il rumore in modo da poter individuare solo i massimi e i minimi locali "importanti" (dove la serie filtrata ha pendenza nulla); dopodiché si prendono i pattern "classici" che fanno uso di determinati rapporti e distanze tra questi minimi e massimi "notevoli" e si lascia che sia la macchina a individuarli.

Questi sono successivamente posti a back test per verificare che abbiano effettivamente esibito l'efficacia predittiva che si attribuisce loro nelle leggende :D

plot-pattern-matching-small.png
plot1-small2.png
plot2-small1.png
 
Ultima modifica:
grazie del link!
a scanso di equivoci, nonostante il titolo, il mio codice cerca nel passato il ripetersi del pattern attuale, non inteso in senso tecnico, ma semplicemente come le ultime tot giornate di quotazione di quello struemento, e calcola, nel passato dopo ciascuno di questi pattern simili cos'era successo.. quindi è 'agnostico' rispetto ai pattern dell'analisi tecnica.

ad esempio
figure_1.png

in questa immagine il pattern corrente è quello piu scuro ('percentCum' ) e ne sono stati trovati 2 che gli somigliano, il loro esito nel passato si vede dopo la linea grigia verticale.
Quindi 'se la storia si ripetesse' mi aspetterei un maggio al rialzo per quello strumento..
 
Ultima modifica:
Indietro