如何最好地为此需求设计数据库模式?

时间:2019-11-13 05:27:42

标签: cassandra nosql

我们正在为交易回测器迭代不同的参数集。 目前,我有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 = MAL10Get only the top 50% FinalPnLApply 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行。

但是我真的很想知道这是否是一个好的设计,或者是否有更准确/更好的设计。

0 个答案:

没有答案