2010-02-19 8 views
15

Obecnie pracuję nad składnikiem produktu handlowego, który umożliwi programistom ilości lub strategii napisanie własnych niestandardowych strategii. Oczywiście nie mogę pozwolić im pisać tych strategii w natywnie skompilowanych językach (lub nawet języku, który kompiluje się do kodu bajtowego, aby działał na vm), ponieważ ich cykle dev/test muszą być rzędu minut.Język skryptów do opracowywania strategii handlowej

Spojrzałem na Lua, Pythona, Ruby i do tej pory cieszyłem się nimi wszystkimi, ale nadal uważałem je za "niski poziom" dla moich docelowych użytkowników. Czy musiałbym jakoś napisać mój własny analizator składni i interpreter, aby obsługiwać język z minimalną obsługą pętli, prostą arytmetyczną, logiczną oceną wyrażeń, czy też istnieje inne zalecenie którekolwiek z was może mieć? Z góry dziękuję.

+1

Czy Twój język musi być kompletny, czy też musisz wiedzieć, że to się zatrzyma? – Earlz

Odpowiedz

10

Mark-Jason Dominus, autor modułu Perl Text::Template, ma kilka spostrzeżeń, które mogą być istotne:

Kiedy ludzie robią moduł szablonu jak ten, prawie zawsze zacząć od wymyślania specjalny składnia dla podstawień. Na przykład, one zbuduj tak, aby łańcuch taki jak %% VAR %% został zamieniony na wartość $ VAR. Następnie zdają sobie sprawę z potrzeby dodatkowego formatowania , więc umieszczają w specjalnej składni dla formatowania. Następnie potrzebują one pętli, więc wymyślą składnię pętli . Wkrótce mają nowy mały język szablonów .

To podejście ma dwa problemy: po pierwsze, ich mały język jest kaleką. Jeśli musisz coś zrobić, o czym pisał autor , przegrywasz. Po drugie: Kto chce się uczyć innego języka?

Jeśli napiszesz własny mini-język, możesz skończyć w tym samym położeniu - utrzymując gramatykę i analizator składni dla narzędzia, które jest uszkodzone przez projekt.

Jeśli rzeczywisty język programowania wydaje się nieco zbyt niski, rozwiązaniem może nie być porzucenie języka, ale dostarczenie użytkownikom końcowym funkcji narzędziowych wyższego poziomu, aby mogli operować znanymi koncepcjami bez uzyskiwania ugrzęzły w chwastach języka bazowego.

To pozwala początkującym użytkownikom działać na wysokim poziomie; jednak Ty i inni użytkownicy końcowi, którzy mają do tego talent - twoi superużytkownicy - nadal możesz wykorzystać pełną moc Ruby, Python lub cokolwiek innego.

+2

Bardzo dobra odpowiedź; dzięki. Sądzę, że większość z nas powinna zdać sobie sprawę, że nie jesteśmy projektantami języków, jesteśmy programistami! Podoba mi się pomysł zaprojektowania narzędzi opartych na GUI w połączeniu z interfejsem skryptowym dla moich zaawansowanych użytkowników; naprawdę najlepszy z obu światów. – Pierreten

1

Niestandardowe moduły będą potrzebne bez względu na to, co wybierzesz, które definiują konstrukcje wysokiego poziomu Twojej firmy.

Oto niektóre z potrzeb, które sobie wyobrażam - niektóre z nich można już uwzględnić: sposób na pobranie aktualnych pozycji, aktualnych i historycznych ofert, poprzednich danych dotyczących wydajności itd. ... do aplikacji. Zdefiniuj/przetestuj/wyślij różne rodzaje zleceń (limit/market/stop, jaka wymiana, wyzwalacze) lub parametry opcji, itp ... Prawdopodobnie będziesz potrzebował wielu testowych obszarów testowych, tak samo jak w rzeczywistości.

Quants chcą być w stanie wykonywać operacje na macierzach, rachunek stochastyczny, PDE.
Jeśli chcesz to zrobić w python, ładowanie NumPy byłoby początkiem.

Można również rozpocząć od zastrzeżonego systemu zaprojektowanego do przeprowadzania matematycznych badań finansowych, takich jak coś zbudowanego na bazie Mathematica lub Matlab.

8

Wygląda na to, że być może trzeba będzie utworzyć rodzaj specyficznego dla domeny języka (DSL) dla użytkowników, który mógłby zostać zbudowany luźno nad językiem docelowym. Ruby, Python i Lua mają swoje różne dziwactwa dotyczące składni i do pewnego stopnia niektóre z nich można masować za pomocą sprytnych definicji funkcji.

Przykładem dość solidnego DSL jest Cucumber, który implementuje interesującą strategię konwersji słownika określonego przez użytkownika na rzeczywisty kod wykonywalny za pomocą szeregu wyrażeń regularnych zastosowanych do danych wejściowych.

Kolejnym kandydatem może być JavaScript lub jakiś mostek DSL do JavaScript, ponieważ pozwoliłoby to strategii działać po stronie klienta lub po stronie serwera. To może pomóc w skalowaniu aplikacji, ponieważ komputery klienckie często mają nadwyżkę mocy obliczeniowej w porównaniu do mocno obciążonego serwera.

+1

Tcl doskonale nadaje się do implementacji DSL –

+3

Ruby jest szczególnie dobra do pisania DSL (opcjonalne nawiasy i bloki ułatwiają to). Zapoznaj się z tym artykułem autorstwa Martina Fowlera na Ruby's Rake: http://martinfowler.com/articles/rake.html – horseyguy

0

To może być nieco uproszczone, ale wielu użytkowników kwantowych jest przyzwyczajonych do pracy z makrami VBA programu Excel &. Czy coś podobnego do VBSCript byłoby użyteczne, ponieważ mogą mieć pewne doświadczenie w tej dziedzinie.

0

Istniejące języki to "mały" niski poziom "dla moich docelowych użytkowników".

Jednak wszystko, co potrzebne jest „minimum wsparcia dla pętli, prosty arithmatic, logicznej oceny ekspresji”

Nie rozumiem problemu. Potrzebujesz tylko kilku funkcji. Co jest nie tak z listą języków, które podałeś? W rzeczywistości oferują te funkcje?

Co to jest rozłączenie? Możesz zaktualizować swoje pytanie, aby rozwinąć problem.

+0

Świetny punkt S.Lott, popełniłem błąd, nie oddzielając zaawansowanych użytkowników od początkujących. Planuję włączyć Ruby do skryptowania teraz dla wspomnianych zaawansowanych użytkowników. – Pierreten

0

Używałbym Common Lisp, który obsługuje szybki rozwój (masz działający obraz i możesz kompilować/rekompilować poszczególne funkcje) i dostosować język do swojej domeny. Zapewnisz funkcje i makra jako elementy składowe do wyrażania strategii, a cały język będzie dostępny dla użytkownika do łączenia tych funkcji.

0

Najpierw należy zdefiniować język - jeśli to możliwe, użyj pseudojęzyka o nazwie EBN, jest to bardzo proste (patrz wpis w Wikipedii).

Następnie, gdy już to zrobisz, wybierz język. Prawie na pewno będziesz chciał skorzystać z DSL. Ruby i Lua są w tym naprawdę dobre, IMO.

Gdy zaczniesz nad nim pracować, może się okazać, że powrócisz do swojej definicji i dostroisz ją. Ale myślę, że jest to odpowiednia kolej rzeczy do zrobienia.

0

Czy jest coś na kształt złożoności, o której filmujesz? Przetwarzanie jest dobrym przykładem zastosowania języka w pełni rozwiniętego (Java) i zmniejszenia/uproszczenia dostępnej składni tylko w podzbiorze dotyczącym domeny problemu (domena problemu = wizualizacja w przypadku przetwarzania).

Oto małe porównanie z dokumentami Processing.

Java:

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

Przetwarzanie:

background(0); 

Jak inni sugerują, może być w stanie po prostu napisać wystarczająco funkcje wysokiego poziomu, takich, że większość złożoność jest ukryta przed użytkownikiem ale nadal zachowujesz zdolność do robienia rzeczy o niższym poziomie, kiedy to konieczne. Język Wiring dla Arduino podąża za tą strategią użycia cienkiej warstwy funkcji wysokiego poziomu na górze C, aby uczynić ją bardziej dostępną dla nie-programistów i hobbystów.

0

Byłem w tym samym budynku łodzi i handlu z moim własnym oprogramowaniem. Java nie jest świetna, ponieważ chcesz czegoś na wyższym poziomie, jak mówisz. Miałem dużo sukcesów przy użyciu xtext projektu Eclipse. http://www.eclipse.org/Xtext Wykonuje całą instalację budowania parserów itp. I za pomocą Eclipse można szybko wygenerować kod za pomocą edytorów funkcjonalnych. Proponuję zagłębić się w to, biorąc pod uwagę także inne opcje. To w połączeniu ze strukturą modelowania zaćmienia jest bardzo wydajne, aby szybko budować DSL, które brzmią tak, jak potrzebujesz. - Duncan

1

Zapoznaj się z http://www.tadeveloper.com, aby zapoznać się z frameworkiem analizy historycznej, używając MATLAB jako języka skryptowego. MATLAB ma tę zaletę, że jest bardzo potężny, ale nie musisz być programistą, aby go użyć.

Powiązane problemy