接下来我们将构建一个稍具复杂度的经典策略——单均线策略。
此处以5日均线为例:若股价突破并站稳5日均线,视为上涨趋势确立,执行做多买入;若股价回落至5日均线下方,则预判下行风险,执行平仓操作。
具体而言,买入信号的判定逻辑如下:
观察K线序列,假设1号、2号、3号为连续三个交易日。若1号收盘价低于均线,而2号收盘价高于均线,形成向上突破形态,则在3号开盘时执行开多(即买入股票)操作。
本次演示将选取创业板龙头股特锐德2023年1月至12月的历史数据作为样本。
# 读取数据#读取创业板特锐德数据file_path = '特锐德2023股票数据.csv'data = pd.read_csv(file_path)data = data[['股票名字','交易日期','开盘价','收盘价','最高价','最低价','成交量','成交额']]# 计算均线,确保从第一个非空值开始data['ma_slow'] = data['收盘价'].rolling(window=5).mean().dropna()start_date = data['ma_slow'].index[0]
策略构建步骤如下:首先加载五粮液的历史行情数据,随后计算5日移动平均线数值,最后编写基于该均线的买入交易逻辑。
data['Signal'] = np.NAN#当前前根K线的收盘价低于ma_slow,前一根的收盘价大于ma_slow 则开多cond1 = data['收盘价'].shift(2) < data['ma_slow'].shift(2)cond2 = data['收盘价'].shift(1) > data['ma_slow'].shift(1)open_pos_signal = cond1 & cond2data.loc[open_pos_signal, 'Signal'] = 1
可以通过两根连续K线与均线的位置关系来判定买入信号:
若前一根K线收盘价低于均线,后一根K线收盘价高于均线,意味着股价完成了由下向上突破均线的动作,此时将交易信号设为1,代表触发买入操作。
接下来探讨卖出信号的形态如上图:
假设K线序列中,1号收盘价位于均线之上,而2号收盘价跌至均线之下,表明股价已有效跌破均线支撑。据此,在3号开盘时触发平仓指令。
#当前前根K线的收盘大于均线,前一根的收盘价小于均线,则平仓cond3 = data['收盘价'].shift(2) > data['ma_slow'].shift(2)cond4 = data['收盘价'].shift(1) < data['ma_slow'].shift(1)close_pos_signal = cond3 & cond4data.loc[close_pos_signal, 'Signal'] = 0
如上该策略的具体代码实现:
上述即为该策略的可视化呈现(S代表卖出,B代表买入),直观清晰。结合下方的信号数据表进行对照分析:
股票名字 交易日期 开盘价 收盘价 最高价 最低价 成交量 成交额 ma_slow Signal34 特锐德 2023-02-27 17.27 17.40 17.63 17.20 93641 1.637044e+08 17.656 NaN35 特锐德 2023-02-28 17.49 17.43 17.52 17.22 75556 1.315510e+08 17.550 NaN36 特锐德 2023-03-01 17.44 17.80 17.84 17.33 119847 2.116457e+08 17.514 NaN37 特锐德 2023-03-02 17.80 17.32 17.91 17.30 120574 2.118835e+08 17.458 1.038 特锐德 2023-03-03 17.45 17.39 17.52 17.26 69182 1.207660e+08 17.468 0.039 特锐德 2023-03-06 17.39 17.47 17.52 17.05 111257 1.928591e+08 17.482 NaN40 特锐德 2023-03-07 17.47 17.06 17.56 17.05 82839 1.434793e+08 17.408 NaN41 特锐德 2023-03-08 17.01 17.10 17.25 16.96 50533 8.656101e+07 17.268 NaN42 特锐德 2023-03-09 17.10 17.11 17.19 16.99 49788 8.536210e+07 17.226 NaN43 特锐德 2023-03-10 16.95 16.95 17.20 16.89 72390 1.234823e+08 17.138 NaN44 特锐德 2023-03-13 16.88 16.90 17.07 16.77 71935 1.218532e+08 17.024 NaN45 特锐德 2023-03-14 16.87 16.52 16.91 16.43 128798 2.144274e+08 16.916 NaN46 特锐德 2023-03-15 16.64 16.68 16.82 16.64 61534 1.032203e+08 16.832 NaN47 特锐德 2023-03-16 16.65 16.44 16.73 16.43 74568 1.237889e+08 16.698 NaN48 特锐德 2023-03-17 16.63 16.58 16.80 16.54 72301 1.207832e+08 16.624 NaN49 特锐德 2023-03-20 16.69 16.95 17.15 16.50 105347 1.781551e+08 16.634 NaN50 特锐德 2023-03-21 17.03 17.74 17.77 16.88 183667 3.216053e+08 16.878 1.0
3月2日信号为0,表明股价已向下突破均线,触发卖出指令,执行平仓操作。
3月3日信号为1,显示股价已向上穿越均线,预判行情看涨,因此发出买入信号,执行建仓。
至此,一个基础的单均线策略演示完毕。所有量化策略的本质逻辑相通,差异仅在于所选指标、复杂程度及参数设置的不同。感兴趣的朋友不妨亲自尝试构建。