建模域类型

时间:2016-09-22 19:33:05

标签: f#

限价具有小数值。市场价格没有。

如何在F#中对此进行建模?

module TradingDomain

let NoPrice = None

type PriceActionType = 
    | Limit of decimal
    | Market of NoPrice

2 个答案:

答案 0 :(得分:5)

你不能给Market任何参数:

type PriceActionType =
    | Limit of decimal
    | Market

答案 1 :(得分:0)

有几种方法可以解决这个问题,但是如果你进行域建模,那么了解所有组件是个好主意,在这种情况下,1)交易者如何看待订单,2如何FIX(如果使用的是什么)对订单的看法,以及3)您交易的市场如何看待订单。顺便说一下,你可能觉得这个book很有用。此外,F#Deep Dives中的Chapter 7

那说Tarmil的回答对你有用,而且我有两条评论。有时候,明确表示类型并使用.NET类型会更好。 floatdecimal是F#别名,它们可能引用转换为float的函数。还有可能使用Some和None来表达价格。所以这里也是一个包含orderide的版本:

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

无论哪个版本都可以帮助您以后进行验证。