簡體   English   中英

數據表、數據集、實體框架、LINQ & Lambda 金融技術分析表達式 C#

[英]DataTables, DataSets, Entity Framework, LINQ & Lambda Expression for Financial Technical Analysis C#

這更像是一個架構問題,而不是一個特定的代碼問題,因為我在如何繼續這個項目時遇到了一個主要障礙。

例如,我正在構建一個財務掃描軟件,它可以根據特定標准篩選股票。 例如,如果在 8000 只股票中,其今天的收盤價高於 SMA 100,而 10 天前的收盤價低於 SMA 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 沒有問題。

現在,我目前正在使用實體框架從我的數據庫中檢索數據,但是運行或創建我的過濾器的最佳方法是什么,因為每次執行掃描時都必須為每個符號或基礎股票代碼計算 SMA,因為100 天變量可以更改。

我應該在 memory 過濾等中從實體對象轉換為數據集嗎???

我沒有過多地使用 DataSets 或 DataTables,所以我正在尋找指針。

請注意,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 不會那么慢。)

一個好處是你的查詢應該很快,因為你可以寫

select stockSymbol from SummaryData where SMA > 10你已經完成了計算。

另一個好處是數據每天只會更改一次(在工作日結束時),但您可能會在一天中查詢多次。 例如,您希望今天對直到昨天(包括昨天)的所有數據運行幾個不同的查詢。 如果您運行 10 個查詢,而您的伙伴運行相同的 10 個查詢,那么您剛剛完成了相同的計算。 (本質上,寫一次,讀多次。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM