2010-02-19 73 views
15

我目前正在研究交易產品的一個組件,該組件允許定量或策略開發人員編寫他們自己的自定義策略。我顯然不能讓他們用本機編譯語言編寫這些策略(甚至是編譯爲字節碼以在虛擬機上運行的語言),因爲他們的開發/測試周期必須在幾分鐘內。用於交易策略開發的腳本語言

我已經看了LUA,Python和Ruby到目前爲止,真的很喜歡所有的人,到目前爲止,但仍然發現他們有點「低水平」我的目標用戶。我是否需要以某種方式編寫我自己的解析器+解釋器來支持最少支持循環,簡單算術邏輯表達式評估的語言,或者您是否有其他建議?提前致謝。

+1

您的語言是否需要徹底完成,還是您需要知道它會暫停? – Earlz 2010-02-19 18:16:20

回答

10

馬克 - 傑森Dominus,Perl的Text::Template模塊的作者,有一些見解,可能是相關的:

當人們模板模塊 像這樣的人,幾乎都 開始通過發明一種特殊的語法 進行替換。例如,他們 構建它,使%%VAR %% 這樣的字符串被替換爲$ VAR的值。 然後他們意識到需要額外的 格式,所以他們把一些 格式化的特殊語法。然後 他們需要一個循環,所以他們發明了一個 循環語法。很快他們就有了一個 新的小模板語言。

這種方法有兩個問題:第一, 他們的小語言是殘缺不全的。如果 你需要做一些作者 沒有想到的,你輸了。第二名: 誰想學另一種語言?

如果您編寫自己的迷你語言,最終可能會陷入同樣的​​困境 - 爲設計中的殘缺工具維護語法和解析器。

如果真正的編程語言看起來有點過於低級,那麼解決方案可能不是放棄語言,而是爲最終用戶提供更高級別的實用功能,以便他們可以使用熟悉的概念進行操作,而無需獲取陷入基礎語言的雜草中。

這允許初始用戶在較高的水平上操作;然而,你和任何擁有訣竅的最終用戶 - 你的超級用戶 - 仍然可以充分利用Ruby或Python等等的全部功能。

+2

非常好的答案;謝謝。我想大多數人應該認識到我們不是語言設計師,我們是開發者!我喜歡爲我的高級用戶設計基於GUI的工具和腳本界面的想法;真正是兩全其美。 – Pierreten 2010-02-19 23:43:50

1

無論您選擇什麼樣的定製模塊,都將需要定義貴公司的高層次結構。

下面是一些我想象的需要 - 你可能有一些這些已經涵蓋:一種方式來獲得當前位置,當前和歷史的報價,以前的性能數據,等等......到應用程序中。定義/回溯/發送各種訂單(限制/市場/止損,交易所,觸發器)或期權參數等等......您可能需要多個沙箱來進行測試以及真實情況。

數量要求能夠做矩陣運算,隨機微積分,偏微分方程。
如果你想在python中做到這一點,加載NumPy將是一個開始。

你也可以開始做設計的數學金融研究,如建立在數學或Matlab之上的東西的專有系統。

8

這聽起來像你可能需要建立某種形式的爲您的用戶可以建立鬆散的目標語言的頂級領域特定語言(DSL)的。 Ruby,Python和Lua在語法上都各有各的怪癖,並且在一定程度上可以用巧妙的函數定義來處理。

一個相當健壯的DSL的例子是Cucumber它實現了一個有趣的策略,通過一系列適用於輸入數據的正則表達式將用戶指定的措辭轉換爲實際的可執行代碼。

另一名候選人可能是JavaScript或某種形式的DSL爲JavaScript橋的,因爲這將允許戰略選擇運行客戶端或服務器端。這可能有助於擴展您的應用程序,因爲與高負載服務器相比,客戶端計算機通常具有多餘的計算能力

+1

Tcl非常適合實現DSL's – 2010-02-19 17:29:20

+3

Ruby對編寫DSL(可選圓括號和塊便於實現)特別有用。查看Martin Fowler在Ruby's Rake上的這篇文章:http://martinfowler.com/articles/rake.html – horseyguy 2010-02-19 17:56:12

0

這可能是一個有點簡單化,但很多定量的用戶來使用Excel & VBA宏工作。像VBSCript可以使用,因爲他們可能在這方面有一些經驗。

0

現有語言對我的目標用戶來說「有點」低級「。

然而,所有你需要的是「最低限度的用於循環,簡單arithmatic,邏輯表達式評價支持」

我不明白的問題。你只需要一些功能。你提供的語言列表有什麼問題?他們實際上提供這些功能?

什麼是脫節?隨時更新您的問題,以擴大問題是什麼。

+0

偉大的觀點S.洛特,我犯了一個錯誤,就是不會從初學者中分離出超級用戶。我正計劃將Ruby用於腳本編寫,以供所述高級用戶使用。 – Pierreten 2010-02-19 23:57:32

0

我會使用Common Lisp,它支持快速開發(您有一個運行的圖像,可以編譯/重新編譯單個函數)並將語言定製到您的域。您將提供函數和宏作爲構建模塊來表達策略,並且整個語言將可供用戶組合使用。

0

首先定義語言 - 如果可能的話,使用稱爲EBN的僞語言,它非常簡單(參見維基百科條目)。

然後,一旦你有,選擇語言。幾乎可以肯定你會想要使用DSL。 Ruby和Lua都非常擅長這一點,IMO。

一旦你開始研究它,你可能會發現你回到你的定義並調整它。但是,我認爲,這是做事的正確順序。

0

沿着Processing這條線拍攝的複雜程度如何?處理是採用全面語言(Java)並將可用語法簡化爲僅適用於問題域的子集(在處理的情況下問題域=可視化)的一個好例子。

下面是處理文檔的一個小小的並行比較。

的Java:

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

處理:

background(0); 

正如其他人的建議,你可以簡單地編寫足夠的高級功能使得大多數複雜的是對用戶隱藏但你仍然保留在必要時做更多低級事物的能力。 Arduino的接線語言遵循這種在C之上使用薄層高級函數的策略,以使非程序員和業餘愛好者更容易訪問。

0

我一直在與我自己的軟件建設和交易同一船。 Java並不是很棒,因爲你想要像你說的那樣更高層次的東西。我使用eclipse項目xtext取得了很多成功。 http://www.eclipse.org/Xtext它爲您構建解析器等所有工具,並使用eclipse,您可以使用功能編輯器快速生成代碼。我建議在考慮其他選項時考慮這一點。這與eclipse建模框架相結合,可以快速構建聽起來像您需要的DSL。 - Duncan

1

檢出http://www.tadeveloper.com爲使用MATLAB作爲腳本語言的回測框架。 MATLAB具有非常強大的優勢,但您不需要成爲程序員就可以使用它。