上一节我们通过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() #展示部分数据

量化交易特点 量化交易-特征分析(1)

从上图可以直观的看到我们除日期外,还有5个与币价相关的字段

2、接着我们加入用于分析的相关指标

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

量化交易特点 量化交易-特征分析(2)

检查一下数据的完整性:

df.info()

量化交易特点 量化交易-特征分析(3)

我们会发现有些指标存在缺失值,比如:sar、tema等,行数不足9572.

(ps:其实没有问题,这个跟统计口径相关,后续抽空再讲)

再看看数据的分布的情况:

df.describe()

量化交易特点 量化交易-特征分析(4)

这里展示了每个指标的平均值、标准差、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)

量化交易特点 量化交易-特征分析(5)

我们可以得到tema指标的权重是最高的

线性回归模型:

# Linear Regression model_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)

量化交易特点 量化交易-特征分析(6)

通过线性回归模型,我们接着筛选出一批相关性较高的指标: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()

量化交易特点 量化交易-特征分析(7)

通过上面的图表,我们可以明显看到tema、upper、low与收盘价的走势几乎保持一致,也就是说我们可以利用这些指标作为我们买入和卖出的信号

2、我们也需要利用一些强度信号,作为信息补充。这里推荐使用rsi

量化交易特点 量化交易-特征分析(8)

上图是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

量化交易特点 量化交易-特征分析(9)

通过上面的热力图我们得到4组比较强的关系特征组合:

1、bb_xxx 与 close的强关系

2、sar 与 close 的强关系

3、tema 与 bb_xxx 指标的强关系

4、rsi 与 bb_percent指标的强关系

OK,至此我们从27个指标中初步筛选了一批与币价具有相关性的指标。

下一步我们需要利用这些筛选出来的指标作为我们量化交易策略的指标,具体使用方式会在下一节中再详解。

,