自動交易中有哪些處理訂單的方法?
我目前正在開發一個商業自動交易程序,使用者可以在其中編寫自己的專有程式碼並製定策略,例如在 NinjaTrader、MetaTrader 等中。現在我正在處理訂單處理部分,這非常重要。我不知道如何引用在執行策略期間輸入的訂單。
假設在一個策略中,有這段程式碼:
if(some_condition) EnterLong("IBM",100)
我的問題是
some_condition
可以多次設置為 true,這會導致生成多個買單。不知何故,我必須為使用者提供修改或取消其中一些訂單的能力。例如,NinjaTrader 有一個名為 的功能
EntriesPerDirection
,它限制方向(多頭或空頭)的入場數量。因此,您可以擁有一定數量的訂單對象(或訂單數組),這些訂單對象(或訂單數組)由訂單輸入函式返回,然後說order1.Cancel();
但是,這對於可以生成數千個訂單的冰山策略沒有任何意義。這兩個程序都使使用者能夠迭代尚未導致交易的訂單。出於冰山目的,這再次可能是痛苦的。我認為這兩個程序並不是專門為處理大量訂單或開發在買方公司中廣泛使用的執行算法(例如,VWAP、到達價格、實施短缺)而建構的。此外,NT 和 MT 都有在訂單狀態更改時觸發的事件 (
OnOrderUpdate
,OnExecution
, )。OnTrade
這是一個好主意,但我不確定它是否是最佳解決方案。是否有其他自動交易軟體常用的解決我的問題的方法或方法?
關於您的訂單管理問題,每個訂單都應該有一個使用者可以參考的唯一標識符;在 FIX 中,這是 ClOrdID。使用者請求的每個訂單的參數都應儲存在以該標識符為關鍵字的表中。
如果您的目標是防止重複訂單發出,請考慮對每個交易品種設置交易量限制。這樣,即使條件已通過,您的訂單經理也會拒絕後續的訂單請求。交易量限制也是可取的,以防止市場變動(尤其是與頭寸限制結合使用時),並且可以在事情失控時充當安全機制(我們在我目前的公司將其稱為防噴器)。
… NT 和 MT 都有在訂單狀態更改時觸發的事件(OnOrderUpdate、OnExecution、OnTrade)。
事件驅動的程式使實時交易更易於管理。這種範式被稱為“複雜事件處理”,在機構交易中相當普遍。
我認為這兩個程序並不是專門為處理大量訂單而建構的……
那是因為它們是為想要假裝自己是量化分析師的日內交易者設計的。沒有機構交易員會使用這些軟體包。