当前位置:首页>python>第28篇 量化实战 Python构建单均线策略

第28篇 量化实战 Python构建单均线策略

  • 2026-10-11 07:57:40
第28篇 量化实战 Python构建单均线策略

接下来我们将构建一个稍具复杂度的经典策略——单均线策略。

此处以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,显示股价已向上穿越均线,预判行情看涨,因此发出买入信号,执行建仓。

至此,一个基础的单均线策略演示完毕。所有量化策略的本质逻辑相通,差异仅在于所选指标、复杂程度及参数设置的不同。感兴趣的朋友不妨亲自尝试构建。

最新文章

随机文章