2010-02-19 35 views
15

Attualmente sto lavorando a un componente di un prodotto di trading che consentirà a uno sviluppatore di strategia o di strategia di scrivere le proprie strategie personalizzate. Ovviamente non posso farli scrivere queste strategie in linguaggi compilati in modo nativo (o persino in un linguaggio che compila su un bytecode per funzionare su un VM) poiché i loro cicli di sviluppo/test devono essere dell'ordine di minuti.Linguaggio di scripting per lo sviluppo della strategia di trading

Ho guardato lua, pitone, rubino finora e mi sono davvero divertito fino ad ora, ma li ho trovati ancora un po '"di basso livello" per i miei utenti target. Avrei bisogno di scrivere in qualche modo il mio parser + interprete per supportare una lingua con un minimo di supporto per il ciclo, la semplice valutazione di espressioni logiche, aritmetiche, o c'è qualche altra raccomandazione che qualcuno di voi potrebbe avere? Grazie in anticipo.

+1

La tua lingua deve essere completa oppure devi sapere che si fermerà? – Earlz

risposta

10

Mark-Jason Dominus, l'autore del modulo di Perl Text::Template, ha alcune intuizioni che potrebbero essere rilevanti:

Quando le persone fanno un modulo modello come questo, che quasi sempre inizio inventando una speciale sintassi per le sostituzioni. Ad esempio, lo lo costruisce in modo che una stringa come %% VAR %% venga sostituita con il valore di $ VAR. Poi si rendono conto della necessità della formattazione aggiuntiva , quindi inseriscono alcune sintassi speciali per la formattazione. Quindi hanno bisogno di un ciclo, quindi inventano una sintassi del ciclo . Molto presto hanno un nuovo linguaggio modello .

Questo approccio ha due problemi: in primo luogo, la loro lingua è ridotta. Se devi fare qualcosa all'autore non hai pensato, perdi. Secondo: Chi vuole imparare un'altra lingua?

Se si scrive il proprio mini-linguaggio, si potrebbe finire nella stessa situazione - mantenendo una grammatica e un parser per uno strumento che è danneggiato dalla progettazione.

Se un linguaggio di programmazione reale sembra un po 'troppo basso, la soluzione potrebbe non essere quella di abbandonare la lingua, ma piuttosto di fornire agli utenti finali funzioni di utilità di livello superiore, in modo che possano operare con concetti familiari senza ottenere impantanato nelle erbacce del linguaggio sottostante.

Ciò consente agli utenti principianti di operare a un livello elevato; tuttavia, tu e gli altri utenti finali con un talento per questo - i tuoi super-utenti - puoi ancora sfruttare tutta la potenza di Ruby o Python o qualsiasi altra cosa.

+2

Risposta di alta qualità; Grazie. Immagino che la maggior parte di noi dovrebbe rendersi conto che non siamo progettisti di linguaggi, siamo sviluppatori! Mi piace l'idea di progettare strumenti basati su GUI in combinazione con un'interfaccia di script per i miei utenti esperti; veramente il meglio di entrambi i mondi. – Pierreten

1

I moduli personalizzati saranno necessari, indipendentemente da ciò che si sceglie, che definiscono i costrutti di alto livello dell'azienda.

Ecco alcune delle esigenze che immagino: potresti averne già alcune coperte: un modo per ottenere posizioni correnti, quotazioni attuali e storiche, dati precedenti sulla performance, ecc. Nell'applicazione. Definisci/backtest/invia vari tipi di ordini (limite/mercato/stop, quali scambi, trigger) o parametri di opzioni, ecc ... Probabilmente avrai bisogno di più sandbox per il test e la cosa reale.

Quants vogliono essere in grado di eseguire operazioni di matrice, calcolo stocastico, PDE.
Se volessi farlo in python, caricare NumPy sarebbe un inizio.

Si potrebbe anche iniziare con un sistema proprietario progettato per fare ricerche finanziarie matematiche come qualcosa costruito su Mathematica o Matlab.

8

Sembra che potrebbe essere necessario creare una sorta di DSL (Domain Specific Language) per i propri utenti che potrebbe essere costruito liberamente sulla lingua di destinazione. Ruby, Python e Lua hanno tutti le loro stranezze riguardo la sintassi, e in una certa misura alcuni di questi possono essere massaggiati con definizioni di funzioni intelligenti.

Un esempio di un DSL piuttosto robusta è Cucumber che implementa una strategia interessante di conversione verbosità specificati dall'utente per codice eseguibile reale attraverso una serie di espressioni regolari applicate ai dati di input.

Un altro candidato potrebbe essere JavaScript o una sorta di collegamento DSL a JavaScript, in quanto ciò consentirebbe alla strategia di eseguire lato client o lato server. Ciò potrebbe contribuire a ridimensionare l'applicazione poiché le macchine client hanno spesso una potenza di calcolo in eccesso rispetto a un server molto carico.

+1

Tcl è eccellente per l'implementazione di DSL –

+3

Ruby è particolarmente adatto per scrivere DSL (parentesi e blocchi facoltativi facilitano questo). Dai un'occhiata a questo articolo di Martin Fowler su Ruby's Rake: http://martinfowler.com/articles/rake.html – horseyguy

0

Questo potrebbe essere un po 'semplicistico, ma molti utenti quant sono abituati a lavorare con macro VBA Excel &. Sarebbe utile qualcosa di simile a VBSCript, in quanto potrebbero avere una certa esperienza in questo settore.

0

Le lingue esistenti sono "un po '" di basso livello "per i miei utenti di destinazione."

Eppure, tutto ciò che serve è "un minimo di supporto per i loop, semplice arithmatic, valutazione di espressione logica"

Non capisco il problema. Vuoi solo alcune funzionalità. Cosa c'è che non va nell'elenco delle lingue che hai fornito? In realtà offrono queste funzionalità?

Qual è la disconnessione? Sentiti libero di aggiornare la tua domanda per approfondire qual è il problema.

+0

Ottimo punto S.Lott, ho fatto l'errore di non separare gli utenti esperti dai principianti. Sto pianificando di includere Ruby per lo scripting ora per gli utenti esperti. – Pierreten

0

Vorrei utilizzare Common Lisp, che supporta lo sviluppo rapido (si dispone di un'immagine in esecuzione e può compilare/ricompilare le singole funzioni) e personalizzare la lingua per il proprio dominio. Fornirebbe funzioni e macro come elementi costitutivi per esprimere strategie e l'intero linguaggio sarebbe disponibile all'utente per combinarle.

0

Definire prima la lingua - se possibile, utilizzare lo pseudo-linguaggio chiamato EBN, è molto semplice (vedere la voce di Wikipedia).

Quindi, dopo averlo selezionato, scegli la lingua. Quasi certamente vorrete usare una DSL. Ruby e Lua sono entrambi molto bravi, IMO.

Una volta iniziato a lavorarci, potresti tornare alla tua definizione e modificarla. Ma questo è l'ordine giusto per fare le cose, penso.

0

È qualcosa sulla falsariga di Processing il livello di complessità per cui stai girando? L'elaborazione è un buon esempio di utilizzo di un linguaggio completo (Java) e riduzione/semplificazione della sintassi disponibile in un solo sottoinsieme applicabile al dominio problematico (dominio problema = visualizzazione nel caso di Elaborazione).

Ecco un piccolo confronto affiancato dai documenti di elaborazione.

Java:

g.setColor(Color.black) 
fillRect(0, 0, size.width, size.height); 

elaborazione:

background(0); 

Come altri hanno suggerito, si può essere in grado di scrivere semplicemente funzioni abbastanza di alto livello in modo tale che la maggior parte della complessità è nascosto da parte dell'utente ma tu continui a mantenere la capacità di fare più cose di basso livello quando necessario. La lingua Wiring per Arduino segue questa strategia di utilizzare un sottile strato di funzioni di alto livello su C per renderlo più accessibile ai non programmatori e agli hobbisti.

1

Ho lavorato su una libreria di trading algoritmico Python (in realtà per il backtesting, non per il trading reale). Potresti dargli un'occhiata: http://gbeced.github.com/pyalgotrade/

0

Sono stato nella stessa barca costruendo e commerciando con il mio software. Java non è eccezionale perché vuoi qualcosa di più alto livello come dici tu. Ho avuto molto successo usando il progetto xtext di eclipse. http://www.eclipse.org/Xtext Fa tutto il lavoro di costruzione di parser ecc. Per te e usando eclipse puoi generare rapidamente codice con editor funzionali. Suggerisco di considerare questo considerando anche altre opzioni. Questo, combinato con il framework di modellazione di eclissi, è molto potente per la creazione rapida di DSL di cui hai bisogno. - Duncan

1

Controlla http://www.tadeveloper.com per un backtesting framework che utilizza MATLAB come linguaggio di scripting. MATLAB ha il vantaggio che è molto potente ma non è necessario essere un programmatore per usarlo.

Problemi correlati