我对F#相当陌生,仍在尝试确定财务(回测)程序的最佳结构。 由于数据是不可变的,我认为“繁重” /多合一的结构可能不是理想的选择。
这是我想要达到的目标:
我是如何构造的:
我现在使用的内容(非常简化):
type Instrument1 = {
some specifications
}
type Instrument2 = {
some specifications
}
type Instrument =
| Inst1 of Instrument1
| Inst2 of Instrument2
type Trade = {
Dt ; DateTime
Qty : float
Price : float }
type Portfolio = {
InitDate : DateTime // one of the Di above
Inst : Instruments
Trades : Trade seq }
type BackTesting =
Dates : DateTime seq
Port : Portfolio seq }
然后我创建了seq(工具)的seq(投资组合)的seq(日期),显示了损益表。
但是,对于每个投资组合Pi,我都会在所有日期进行迭代,以检查是否需要调整投资组合,然后将交易添加到交易清单中,这意味着每一天,每个投资组合,每种工具创建一个新的BackTesting(不可更改)。我相信这种推理方式比FP更具面向性,但是我对使用的正确模式有些迷茫(我使用的F#书籍对于最适合FP的数据结构并不清楚,或者我不是很了解他们)。
我可能不太清楚,但是如果有人对我有指导的意见(或有关此问题的任何有用的文档/支持),请不要犹豫。非常感谢您的帮助。
答案 0 :(得分:1)
由于您是从F#开始的,所以我对您的建议是不要过于担心以纯粹的功能方式进行编程。如果您来自命令式编程风格,那可能是太多的更改,并且您可能会灰心。从命令式风格到功能性风格的转变需要时间,而且是逐渐的。
好消息是F#也使您势在必行! 因此,像使用其他语言一样编程:
mutable
变量。for
和while
随着您的进步,您将学习功能方式,某些事情确实很容易使用 立即:
option
,从不使用null
map
,filter
或choose
上使用list
,array
,seq
。随着时间的流逝,您自然会更偏向于功能性风格,但是您不必一次全部跳下去。 https://fsharpforfunandprofit.com/是最好的入门资源之一,其中包含以清晰的方式传达的非常好的文章,幻灯片和视频。
祝你好运!