2016-09-22 46 views
1

限制價格有一個十進制值。市場價格沒有。建模域類型

如何在F#中對此進行建模?

module TradingDomain 

let NoPrice = None 

type PriceActionType = 
    | Limit of decimal 
    | Market of NoPrice 
+0

嚴格來說,市場價格也有一個十進制值,如果您購買的價格高於當前價格,並且如果您正在銷售,則低於當前價格。一些市場將通過將市場價格設置爲如上所述的那樣將市場價格模型化爲限制價格,其他市場將將其設置在每日限制。當執行訂單時,您將返回加權平均價格,小數點。你的市場如何模擬市場價格?即你發送什麼來執行市場訂單?價格爲0?一個字符串,一個null等?小數市場,無市場(基本上是期權價值),市場都是可能的。 – s952163

回答

5

你只需不給Market任何參數:

type PriceActionType = 
    | Limit of decimal 
    | Market 
0

有一對夫婦的方式去了解它,但如果你域建模這是一個好主意,有所有的理解在這種情況下,1)交易者如何看待訂單,2)FIX(如果這是正在使用的)如何看待訂單,以及3)您交易的市場如何看待訂單。順便說一句,有這book,你可能會發現有用的。另外,F#Deep Dives中的Chapter 7

這就是說塔米爾的答案應該適合你,在這裏,但我有兩點評論。有時候最好明確類型和使用.NET類型。 floatdecimal都是F#別名,它們可能會引用強制轉換爲浮動的函數。也可以使用Some和None來表示價格。因此,這裏是一個包含了orderside還有一個版本:

type Price = 
    | Limit of Decimal 
    | Market 

type OrderSide = 
    | Buy of Price 
    | Sell of Price 
    | ShortSell of Price 

您可以使用它像這樣:Buy (Limit 10.0M)Sell Market。 你也可以這樣定義價格:

type Price2 = 
    | Limit of Decimal option 
    | None 

哪個版本將有助於以後你做驗證。