6

Lavoro per una boutique specializzata in finanza.Come progettare un linguaggio di programmazione adattato agli strumenti finanziari?

Abbiamo pensato di progettare un linguaggio per descrivere entità finanziarie relative ai mercati finanziari.

Questo sarebbe principalmente utilizzato come una sorta di linguaggio di scripting per sostituire molti processi eseguiti in fogli di calcolo e macro VBA.

Deve essere semplice e deve, infatti, richiamare varie librerie C++ e C# dietro le quinte. Deve consentire agli utenti di gestire oggetti astratti che potrebbero rappresentare serie temporali (intraday e giornaliere).

Deve essere completamente debuggabile, quando un utente avrà un problema, dobbiamo essere in grado di inserire il codice C++/C# e riprodurre i bug. Idealmente, deve essere in grado di essere avviato tramite un meccanismo all'interno di Excel e restituire i risultati all'interno di Excel. (sfortunatamente quasi ogni persona che lavora in Finanza utilizza Excel)

Se dovessi svolgere questo compito, come faresti?

Vuoi una sintassi funzionale?

Svilupperesti un linguaggio di scripting che verrebbe interpretato o lo compileresti in un'altra lingua (come la conversione degli script in C++ o C#)?

Non ho trovato alcun progetto open source per questo tipo di sviluppo, ma esiste un prodotto commerciale che utilizza questo tipo di sintassi?

EDIT: Ho letto tutte le risposte, ma aspetterò più tempo prima di scegliere una risposta. Sono tutte opinioni molto utili!

EDIT2: Ho contrassegnato Mark ad alte prestazioni come soluzione. Tutte le tue risposte sono molto utili e ho modificato tutte le risposte. Era una delle prime risposte e la sua risposta è abbastanza perspicace per noi.

+2

Non è questo per cui è stato originariamente progettato COBOL? = P –

+1

@Marc No, non lo è. –

+0

Scusate ma è stato un commento divertente:) – BlueTrin

risposta

10

Ti suggerisco di concentrarti sullo sviluppo di un ricco set di classi nel tuo linguaggio OO preferito (C# o C++, anche se sospetto che potresti trovare più semplice integrare il primo con Excel). Questo ti darebbe la tua lingua per descrivere entità finanziarie relative ai mercati finanziari. Quando hai finito, dovresti considerare se continuare a racchiudere queste classi in qualche lingua specifica del dominio, o semplicemente esporle alla tua comunità di utenti.

Sospetto che il tuo dominio abbia una complessità irriducibile e che un DSL intermedio debba essere (quasi) complesso come il tuo insieme di classi e che, di conseguenza, hai poco da guadagnare creando.

Un altro approccio sarebbe quello di integrare Excel con Mathematica per il quale Wolfram produce una sorta di cassetta degli attrezzi. Non ho esperienza di questo, ma Mathematica è sicuramente adatto per qualsiasi calcolo che dovrai fare.

saluti

5

Vorrei avvolgere le librerie C++ in Python.

Definirei un pacchetto di classi fluenti che - in effetti - era il mio linguaggio specifico del dominio.

Vorrei usare il linguaggio Python direttamente su queste due basi. Non inventerei la mia nuova sintassi. Il mondo non ha bisogno di un'altra sintassi; abbiamo sintassi e grammatiche sufficienti per analizzare, abbastanza per durare fino alla fine dei tempi.

Vuoi una sintassi funzionale? Python ha funzionalità. Se fai attenzione al design della tua classe Python, puoi ottenere uno stile funzionale pulito.

Idealmente deve essere possibile avviare tramite un meccanismo all'interno di Excel e restituire i risultati in Excel.

Poiché l'interprete Python può essere incorporato in un'applicazione C++ (o C#), è possibile creare facilmente le API di Excel. Da Excel al tuo nuovo linguaggio, fai il meno possibile nell'API C++ per avviare la funzionalità Python.

BTW, la concorrenza è Resolver One. Questo è ciò che fanno.

+1

Seconded (anche se la lingua sottostante non è Python); questo è esattamente ciò che servono i DSL e ti consente di concentrarti sui requisiti di business dell'API, piuttosto che sui dettagli più oscuri. –

1

Se la libreria sottostante utilizza Java si dovrebbe dare un'occhiata a fare un DSL in Groovy. Ci sono un certo numero di podcast e articoli su questo, prova a cercare su Google "DSL Groovy".

+0

Stavo per suggerire Scala, per ragioni simili. Ma una delle lingue * cough * a cui si desidera interfacciarsi è C#, e non penso che sia davvero facile integrare una lingua JVM con un linguaggio CLR. –

+0

D'oh, mancava quel dettaglio, quindi sì, sarebbe "stimolante" interfacciare con C# :-) –

2

Jane Street Capital utilizza OCaml e ha scritto le loro esperienze here. È una lettura piuttosto interessante se estesa.

Per il proprio ambiente, se si è seguito il modello, è possibile utilizzare F#, che ha iniziato la propria vita come un dialetto OCaml, ma che naturalmente viene eseguito nel mondo .NET.

+0

Grazie per la tua risposta, ho seguito F #, sembra un candidato molto forte per questo tipo di applicazioni essendo un linguaggio funzionale – BlueTrin

3

Un altro punto di vista che sfrutta C#.

Come già si dispone di un potente strumento di programmazione funzionale generico con cui gli utenti hanno familiarità e che hanno acquistato sotto forma di Excel, vorrei cercare di creare una soluzione. È ancora ottenere la possibilità in questo modo di poter utilizzare altri 3rd party add-on e opzioni integrate (ad esempio R e Mathematica)

Vorrei guardare in Managed Automazione Componenti aggiuntivi per funzioni definite dall'utente. Si tratta essenzialmente di progetti di libreria C# che utilizzano System.Runtime.InteropServices come descritto in questo articolo link text. Agli utenti queste funzioni vengono aggiunte a livello di cella nel modo normale usando la funzione guidata e possono essere più o meno come volete che siano. Questo è il tuo DSL. Gli utenti possono scegliere di integrare facilmente la funzionalità nei loro modelli esistenti. Sarebbe anche veloce per prototipare qualcosa per testare la fattibilità di questo. Questi sono completamente debugabili.

Inoltre, con Visual Studio Tools per Office è possibile accedere alla gerarchia di oggetti Excel completa e persino aggiungere riquadri di azioni che possono essere disposti trascinando e rilasciando i controlli per requisiti di inserimento dati più complessi. Credo che sia addirittura possibile utilizzare WPF con Excel in questo modo se fosse necessario aggiungere visualizzazioni specializzate. Se avessi bisogno di resettare i dati per dire a Sql Server, potresti costruire un modulo di validazione per la svolta usando questo approccio.

Mi sembra uno spartito M $! (Solo per impostare le cose in chiaro non lavoro per loro).

Avresti bisogno di valutare le prestazioni di questo e non sono sicuro di come sarebbe scalabile.

+0

Excel-DNA è una grande implementazione di questo concetto. –

1

La maggior parte delle istituzioni finanziarie (o delle divisioni) che hanno accumulato numero di dati hanno già acquisito licenze Matlab. Vi consiglio di dare un'occhiata alle strutture Object Oriented offerte da Matlab (e, in effetti, al loro Financial Toolbox).

In attacco credo si guadagna tre cose:

1) L'accesso ad un ambiente di alto livello in cui gli utenti possono concentrarsi sul problema e non sulla realizzazione 2) Disponibilità di grafica di alta qualità 3) Integrazione perfetta con Excel e altri pacchetti di produttività

So che intendi sviluppare una lingua (a differenza di un'applicazione), ma considera la tua semantica come una lingua ben conosciuta, in questo modo eviti la curva di apprendimento per i tuoi utenti .

3

Simon Peyton-Jones di Haskell ha contribuito alla fama di un documento 'Composing contracts: an adventure in financial engineering' che ha discusso di come i linguaggi funzionali si prestavano a comporre descrizioni eseguibili di contratti finanziari derivati. Tale metodo dovrebbe essere possibile con F #.

Credo che le offerte di LexiFi mirino a commercializzare parte di questa ricerca.

Problemi correlati