聽說大A又回到了2950點以下,對于量化交易來說,可能這些都不是事兒。例如,你可以預判到大A到頂了,你可能早就跑路了。判斷逃頂還是抄底,最簡單的方式就是判斷是否頂背離還是底背離,例如通過MACD,你可以編寫指標用來判斷是頂背離還是底背離,集成到股票軟件上,例如:
當然,交易軟件上面的指標,還是有局限性,因為不能幫助咱們自動交易。要自動交易,還是需要寫代碼,然后通過代碼判斷一些技術指標或者其他自定義指標。而上面的頂底背離,就需要用到MACD指標來進行計算。于是就進入到今天的主場內容,使用.NET開發實現對MACD數據的計算。
先祝各位看這個文章的大佬們,早日實現股票賬戶余額超過下圖那樣冰冷的數字,實現自由。
廢話不多說,開始重點。先創建一個基礎技術指標類,用來后續處理多種基礎技術指標使用。例如今天要說的EMA指標實現算法。算法實現如圖所示。
EMA可以用來干嘛呢?EMA(指數移動平均)可以用來計算出MACD、DIFF、DEA、背離等等。可以說是各種技術指標里面最經常要用到的指標。
EMA的數學公式如下:
例如下面咱們使用EMA基礎指標,來計算出MACD指標數據。控制器里面新增一個測試EMA的api接口,用來計算EMA和MACD使用。
然后計算MACD、DIF、DEA等數據,并輸出最新的兩天的數據做驗證。
運行程序,并調用api接口執行一下,獲取到最近兩天的數據
{"todayMacd": -0.04443251288908123,"todayDea": -0.32544380570976894,"todayDif": -0.34766006215430956,"lastMacd": -0.07166991643366516,"lastDea": -0.3198897415986338,"lastDif": -0.3557246998154664
}
現在隨便打開一個行情網站或者軟件查看該股票的這兩天的數據做對比。例如我打開的雪球,查看該個股數據:
DIF=-0.35
DEA=-0.33
MACD=-0.04
剛好和上面數據對應的上,一般行情軟件都會四舍五入保留兩位數。
現在看前一天的數據:
DIF=-0.36
DEA=-0.32
MACD=-0.07
也可以和上面的數據的四舍五入后的對應上,說明咱們的MACD計算是正確的。
EMA計算:
var returnValues = new List<double>();
double multiplier = 2.0 / (period + 1); // 確保進行浮點數計算
double initialSMA = input.Take(period).Average();returnValues.Add(initialSMA);var copyInputValues = input.ToList();// 從index=period開始,因為我們已經計算了第一個EMA值為initial SMA
for (int i = period; i < copyInputValues.Count; i++)
{double lastEMA = returnValues.Last(); // 獲取上一個EMA值double newEMA = (copyInputValues[i] - lastEMA) * multiplier + lastEMA;returnValues.Add(newEMA);
}var result = new EmaResult()
{Values = returnValues,StartIndexOffset = period - 1
};
MACD計算:
List<double> ema12List = BasicIndicators.CalculateEMA(total, 12).Values;List<double> ema26List = BasicIndicators.CalculateEMA(total, 26).Values;// 計算DIFvar dif = ema12List.Zip(ema26List, (x, y) => x - y).ToList();// 計算DEAvar dea = BasicIndicators.CalculateEMA(dif, 9).Values.ToList();// 計算MACDvar macd = dif.Zip(dea, (difValue, deaValue) => (difValue - deaValue) * 2).ToList();
如果覺得有幫助,歡迎點贊、留言、轉發或關注。謝謝各位大佬,祝大佬們早日財富自由。