c# - 用于金融技术分析 C# 的数据表、数据集、 Entity Framework 、LINQ 和 Lambda 表达式

标签 c# entity-framework-4 datatable strongly-typed-dataset

这更像是一个架构问题,而不是一个特定的代码问题,因为我在如何继续这个项目的过程中遇到了一个主要障碍。

例如,我正在构建一个财务扫描软件,可以根据特定标准筛选股票。例如,如果在 8000 只股票中,其今天的收盘价高于 100 均线,而 10 天前的收盘价低于 100 均线,则将此股票代码返回给我。

但是请注意,在上面的示例中,SMA(简单移动平均线)是根据最近 100 天的数据计算的,但我们可以将 100 天更改为另一个值,105 或 56 - 可能是任何东西。

在我的数据库中,我有一个名为 EODData 的表定义,其中包含几列,下面是定义;

EODData
sSymbol nvarchar(6)
mOpen money
mClose money
mHigh money
mLow money
Date datetime

该表将保存美国证券交易所 3 年的日终数据,因此大约有 6,264,000 行,对于 MS SQL 2008 R2 没有问题。

现在,我目前正在使用 Entity Framework 从我的数据库中检索数据,但是运行或创建我的过滤器的最佳方式是什么,因为每次扫描时都必须为每个符号或基础股票代码计算 SMA执行是因为 100 天变量可以更改。

我应该从实体对象转换为数据集以进行内存过滤等吗???

我没有经常使用 DataSet 或 DataTable,所以我正在寻找指针。

请注意,SMA 只是其中一个过滤器,我有另一种算法可以计算 EMA(指数移动平均线,这是一个复杂得多的公式)和 MACD(移动平均收敛散度)。

有什么意见吗?

最佳答案

将计算结果放入数据库怎么样?您有 EODData 表,这很棒。创建另一个表作为您的 SummaryData,类似于:

SummaryData
stockSymbol varchar(6) -- don't need nvarchar, since AMSE doesn't have characters outside of normal English alphabet.
SMA decimal
MCDA decimal
EMA decimal

然后您可以编写一些在一天结束时运行的存储过程,并根据 EODData 表中的数据更新这个表。或者您可以编写一个触发器,以便 EODData 表的每次插入都会更新数据库中的摘要数据。

这样做的一个缺点是您将一些业务逻辑放入数据库中。另一个缺点是您将更新您可能不需要做的股票代码的统计数据。例如,如果没有人想看到 XYZZ 做了什么,那么对它的计算就毫无意义。

但是,第二个问题可以通过以下事实得到缓解:1. 您在 MSSQL 可以优化的服务器上运行 SP,并且 2. 您可以在下类后所有人都在家时运行这些,所以如果需要一点时间时间你不受影响。 (老实说,我假设如果它们是滚动平均值、最小值/最大值等计算,SQL 不会那么慢。)

一个好处是你的查询应该很快,因为你可以写

从 SummaryData 选择 stockSymbol,其中 SMA > 10 您已经完成了计算。

另一个好处是数据每天只会更改一次(在工作日结束时),但您可能会在一天中多次查询。例如,您今天想对截至昨天(包括昨天)的所有数据运行几个不同的查询。如果您运行 10 个查询,而您的合作伙伴运行相同的 10 个查询,那么您只是完成了相同的计算。 (本质上,一次编写,多次读取。)

关于c# - 用于金融技术分析 C# 的数据表、数据集、 Entity Framework 、LINQ 和 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6205274/

相关文章:

c# - Teamviewer 停止工作 GetWindowText (User32.dll) 函数

c# - 如何在单元测试中使用全局变量?

c# - 将 DataGrid 绑定(bind)到两个 DataTable

javascript - 如何将 DataTable 中的所有行保存在数组中?

c# - WCF 服务命名空间冲突,全部在同一个解决方案中

c# - CollectionEditor 和 "Code generation for property ' *** *' failed"错误信息

database - 如何使用 EF 急切加载整个数据库

linq - EF4 LINQ Include(string) 替代硬编码字符串?

.net - 在同一应用程序中的CodeFirst和EDMX

c# - 如何在数据表中进行加权求和?