我们正在为交易回测器迭代不同的参数集。
目前,我有3种策略。每个策略都有一个已定义的参数集(例如Strategy1 has parameter set {P1, P2, P3, ..., P11}
,Strategy2 has {P1, P2, ..., P15}
,Strategy3 has {P1, P2, ..., P9}
)。每个参数P
可以是移动平均值,标准偏差等的参数。
因此Strategy1可以定义为
{P1 = MovingAverage 5dp关闭,P2 = MovingStandardDeviation 10dp高,...}其中if (P1 > P2 && P3 > P4 && P5 > P6) then Buy
,
现在要找到参数(参数集)的最佳组合,我尝试对其进行迭代。例如(Strategy1),
P1 (MovAve Open Price 5dp, 8dp, 10dp, 15dp, 21dp, 35dp)
P2 (MovAve Close Price 5dp, 8dp, 10dp, 15dp, 21dp, 35dp)
...
P11 (MovStdDev High Price 10dp, 15dp, 20dp, 25dp)
注意:我们为这些值创建了自己的标签/命名,而不是MovAveOpen5dp。
所有这些参数将被交叉乘以得到Parameter Set {P1, P2, P3, ..., P11}
。
从上面可以看出,如果我有很多参数,则可以对超过一百万个不同的参数集进行回测。运行迭代后,我将摘要数据存储在一个csv文件中。这样我就可以拥有这样的csv文件
P1,P2,P3,P4,...,FinalPnL,AnnualizedPnL,AveTradeWindow,AveMFE,AveMAE,FinalSimpleReturn,FinalLogReturn
MAO5,MAC5,SDH5,MAL5,...,185.67,567.24,5,67.2,65.4,32.5,33.2
MAO5,MAC5,SDH5,MAL8,...,183.78,456.22,6,88.2,56.4,31.5,40.2
我们有很多csv文件,大小超过1GB。现在我们如何使用这些数据?我们尝试对它们进行过滤,排序和不同的处理,以获取首选的参数集(例如Filter out rows with P4 = MAL10
,Get only the top 50% FinalPnL
,Apply some calculation to get WinLossRatio then get only those with WinLoss greater than 75%
,...)
我现在的问题是,如何最好地在Cassandra等数据库中存储此数据(csv文件内容)?我目前的计划是这样。我将创建一个名为keyspace
的{{1}},该表用于表设计所在的每次迭代运行
iterations
但是blob已经很大(包含数百万行,约79列)。 另一个选择是这样设计
Symbol(varchar) Window(varchar) Summary(blob)
AAPL Nov2010-Oct2013 the_blob_containing_the_csv_contents
因此,我减小了第三列(SummaryRow)中的数据大小,但是我还没有决定在此处使用哪种数据类型。我认为Symbol(varchar) Window(varchar) SummaryRow(?)
AAPL Nov2010-Oct2013 single_row_result_of_single_parameter_set
不错,也可以列出,将其视为csv行。
但是我真的很想知道这是否是一个好的设计,或者是否有更准确/更好的设计。