当前位置:首页>python>第27篇 量化实战Python简易策略入门

第27篇 量化实战Python简易策略入门

  • 2026-10-11 07:56:14
第27篇 量化实战Python简易策略入门

接下来我们将构建一个极简的交易策略,这如同编程中的“Hello World”一样基础。

我们将其命名为“新手策略”,其核心逻辑非常直观:在每日收盘时进行判断,若当日股价下跌,则于次日开盘时买入;若次日股价上涨,则执行卖出操作。

这是一种典型的高抛低吸思路。

下面,我们将以五粮液最近100个交易日的历史数据为例,演示该策略的具体实现过程。

1、导入股票数据:

import pandas as pdpd.set_option('display.max_rows', 1000) #最大显示的行数pd.set_option('expand_frame_repr', False)  # 当列太多时不换行# 读取数据file_path = '五粮液最近100天数据.csv'  data = pd.read_csv(file_path)data = data[['股票名称','成交量','开盘价','最高价','最低价','收盘价','交易日期']]# 计算涨跌幅data['Diff'] = data['收盘价'].diff()print(data)>>     股票名称         成交量     开盘价     最高价     最低价     收盘价        交易日期   Diff0   五 粮 液   7020562.0  165.45  165.76  163.88  165.14  2023-07-11    NaN1   五 粮 液  11884029.0  165.20  166.66  165.00  165.46  2023-07-12   0.322   五 粮 液  32351360.0  167.88  173.00  166.65  172.65  2023-07-13   7.193   五 粮 液  15072288.0  173.60  174.33  170.79  171.99  2023-07-14  -0.664   五 粮 液   9325675.0  170.50  170.98  168.16  169.66  2023-07-17  -2.33

先导入实时数据,为了使数据显示更干净一些,只需取几列数据显示,然后计算一下diff(就是每天的涨跌幅的数值)

2、计算 交易信号

增加一列signal ,来计算交易信号,当diff大于0表示隔天涨信号为1,否则是0。

# 计算交易信号data['Signal'] = data['Diff'].apply(lambda x: 1 if x > 0 else 0)print(data)>>     股票名称         成交量     开盘价     最高价     最低价     收盘价        交易日期   Diff  Signal0   五 粮 液   7020562.0  165.45  165.76  163.88  165.14  2023-07-11    NaN       01   五 粮 液  11884029.0  165.20  166.66  165.00  165.46  2023-07-12   0.32       12   五 粮 液  32351360.0  167.88  173.00  166.65  172.65  2023-07-13   7.19       13   五 粮 液  15072288.0  173.60  174.33  170.79  171.99  2023-07-14  -0.66       04   五 粮 液   9325675.0  170.50  170.98  168.16  169.66  2023-07-17  -2.33       05   五 粮 液   8195902.0  169.70  170.23  168.00  168.40  2023-07-18  -1.26       06   五 粮 液   7685551.0  167.82  168.76  166.81  168.32  2023-07-19  -0.08       0

可以看到signal这一列,相比前一天股票涨了,我们signal就是1,否则下跌则为0。

3、创建策略

鉴于A股仅支持做多与平仓,本策略设定为:diff大于0即股价上涨时执行卖出(标记为1),股价下跌时则进行买入。

简言之,连续上涨便持续卖出,连续下跌则不断买入。以下为在图表中添加交易信号的代码实现。

# 为交易信号创建标记点signals = []for idx, row in data.iterrows():    if row['Signal'] == 1:        signals.append(opts.MarkPointItem(name="卖",                                          coord=[date_list[idx], row['收盘价']],                                          value="S",                                          symbol_size=15,                                          itemstyle_opts=opts.ItemStyleOpts(color='green')))    elif row['Signal'] == 0:        signals.append(opts.MarkPointItem(name="买",                                          coord=[date_list[idx], row['收盘价']],                                          value="B",                                          symbol_size=15,                                          itemstyle_opts=opts.ItemStyleOpts(color='red')))

交易信号在图上增加,看一下可视化的效果:

我们来深入解析该策略逻辑。图表中“B”代表买入(Buy首字母),“S”代表卖出(Sell首字母)。因首日缺乏前值对比,计算从次日即7月12日启动。K线红色示涨,绿色示跌。

7月11日收盘165.14,7月12日收165.46,较前日上涨,信号为1,执行卖出即S。

7月13日较12日继续上扬,信号维持S(卖出)。

7月14日较13日价格回落,信号转为B(买入),遵循逢跌必买原则。

7月15日较14日持续下行,信号仍为B(买入)。

依此类推,逻辑应已清晰。

简言之,1对应卖,0对应买。此乃极简入门策略,旨在建立基础认知,后续将展开更深层的策略探讨。

最新文章

随机文章