量化交易-特徵分析

上一節我們透過TA-Lib庫拿到20+與幣價相關的指標,本節我們需要透過基礎的資料分析能力,篩選出一批會用於量化交易策略的指標

資料概況

1、首先我們需要了解一下資料的情況

candles = load_my_pair_history(data_location,‘ETH_USDT-5m-futures。json’)print(“Loaded ” + str(len(candles)) + f“ rows of data for {pair} from {data_location}”)candles。head() #展示部分資料

量化交易-特徵分析

從上圖可以直觀的看到我們除日期外,還有5個與幣價相關的欄位

2、接著我們加入用於分析的相關指標

from freqtrade。resolvers import StrategyResolverfrom freqtrade。data。dataprovider import DataProviderstrategy = StrategyResolver。load_strategy(config)strategy。dp = DataProvider(config, None, None)# Generate buy/sell signals using strategydf = strategy。analyze_ticker(candles, {‘pair’: pair})df。tail()

量化交易-特徵分析

檢查一下資料的完整性:

df。info()

量化交易-特徵分析

我們會發現有些指標存在缺失值,比如:sar、tema等,行數不足9572。

ps:其實沒有問題,這個跟統計口徑相關,後續抽空再講

再看看資料的分佈的情況:

df。describe()

量化交易-特徵分析

這裡展示了每個指標的

平均值、標準差、25%分位、50%分位、最大、最小值

等。

獲得這些指標有助於我們下一步的分析工作

特徵關係挖掘

1、透過統計學的方法,我可以快速拿到特徵(指標)與目標值之間的關係

隨機森林迴歸模型

#隨機森林迴歸模型model_rf = RandomForestRegressor(n_estimators=50,random_state=315)。fit(train_X, train_y)perm = PermutationImportance(model_rf, random_state=1)。fit(val_X, val_y)eli5。show_weights(perm, feature_names = val_X。columns。tolist(),top=30)

量化交易-特徵分析

我們可以得到tema指標的權重是最高的

線性迴歸模型:

# Linear Regressionmodel_lr = LinearRegression()。fit(train_X, train_y)perm = PermutationImportance(model_lr, random_state=1)。fit(val_X, val_y)eli5。show_weights(perm, feature_names = val_X。columns。tolist(),top=30)

量化交易-特徵分析

透過線性迴歸模型,我們接著篩選出一批相關性較高的指標:

bb_middleband、bb_lowerband、bb_upperband、macd、tema

那麼以上指標的相關性具體在哪,我們需要透過圖表來分析。

import matplotlib。pyplot as plt# 折線圖 y_close = df[‘close’][:1000]y_tema= df[‘tema’][:1000]y_middleband = df[‘bb_middleband’][:1000]y_lowerband = df[‘bb_lowerband’][:1000]y_upperband = df[‘bb_upperband’][:1000]x = df[‘date’][:1000]plt。figure(figsize=(20, 10))plt。plot(x,y_close,‘’,label=“close”) plt。plot(x,y_lowerband,‘’,label=“low”) plt。plot(x,y_upperband,‘’,label=“up”) plt。plot(x,y_tema,‘’,label=“tema”) plt。xlabel(‘date’)plt。ylabel(‘close’)plt。title(‘ETH/USDT’)plt。legend()plt。show()

量化交易-特徵分析

透過上面的圖表,我們可以明顯看到

tema、upper、low與收盤價的走勢幾乎保持一致

,也就是說我們可以利用這些指標作為我們買入和賣出的訊號

2、我們也需要利用一些強度訊號,作為資訊補充。

這裡推薦使用rsi

量化交易-特徵分析

上圖是RSI和幣價的走勢圖,

我們會發現RSI的高峰幾乎都對應上了幣價的短期高點,RSI的谷峰對應了幣價的低點

特徵相關性熱力圖

那麼特徵之間的關係我們也需要了解分析一下,我們透過heatmap來繪製熱力圖:

df_coor=df。iloc[:1000,1:22]。corr()df_coor。head()plt。subplots(figsize=(10,10),dpi=1080,facecolor=‘w’)# 設定畫布大小,解析度,和底色fig=sns。heatmap(df_coor,annot=True, vmax=1, square=True, cmap=“Blues”, fmt=‘。2g’)#annot為熱力圖上顯示資料;fmt=‘。2g’為資料保留兩位有效數字,square呈現正方形,vmax最大值為1

量化交易-特徵分析

透過上面的熱力圖我們得到4組比較強的關係特徵組合:

1、bb_xxx 與 close的強關係

2、sar 與 close 的強關係

3、tema 與 bb_xxx 指標的強關係

4、rsi 與 bb_percent指標的強關係

OK,至此我們從27個指標中初步篩選了一批與幣價具有相關性的指標。

下一步我們需要利用這些篩選出來的指標作為我們量化交易策略的指標,具體使用方式會在下一節中再詳解。