maxfeng 9bf2c3a222 尝试去掉原油效果还好;其他的设定固定金额平仓,收盘价开盘价比率筛选和穿越基准均线,效果都不太好 4 meses atrás
..
__pycache__ 7e8f0aeda3 更新多均线穿越突破策略,添加跟踪均线止损机制及相关配置,完善文档说明,增加跳空检查功能,优化交易逻辑 4 meses atrás
HS300_SimplifiedSpiderGridTrading.py 2c0751cbcf Add Lib directory with trading strategies 4 meses atrás
MultiMABreakoutStrategy_v001.py 7e8f0aeda3 更新多均线穿越突破策略,添加跟踪均线止损机制及相关配置,完善文档说明,增加跳空检查功能,优化交易逻辑 4 meses atrás
MultiMABreakoutStrategy_v002.py 9bf2c3a222 尝试去掉原油效果还好;其他的设定固定金额平仓,收盘价开盘价比率筛选和穿越基准均线,效果都不太好 4 meses atrás
README.md 9bf2c3a222 尝试去掉原油效果还好;其他的设定固定金额平仓,收盘价开盘价比率筛选和穿越基准均线,效果都不太好 4 meses atrás
TrendBreakoutStrategy_v003.py f531ef20eb 添加多均线穿越突破策略及相关文档,更新.gitignore以排除日志文件 4 meses atrás
TrendFalseChange_v002.py f531ef20eb 添加多均线穿越突破策略及相关文档,更新.gitignore以排除日志文件 4 meses atrás

README.md

期货投资策略说明

通用信息

API相关

  1. 期货交易里的order_target_value里的value建议用保证金的金额,而不是实际价格
  2. 期货交易里的order_target_value里的side建议用longshort,而不能为空

沪深300期货蜘蛛网策略

核心思路

该策略基于期货主力合约的持仓数据进行交易,通过监控主力多空持仓变化来判断市场方向。策略重点关注机构持仓变动,通过多空持仓增量的对比来进行交易决策。

  1. 策略来源
  2. 策略名称:股指期货-简化版蜘蛛网策略

主要特点

  1. 基于持仓数据分析
  2. 多空双向交易
  3. 动态仓位管理
  4. 适应性强(可用于多个期货品种)
  5. 基于日频交易

具体策略逻辑

1. 交易品种

  • 主要交易品种:g.symbol_list, 沪深300股指期货(IH)
  • 交易合约:主力合约
  • 合约乘数:300

2. 信号生成

2.1 数据获取
  • 时间:每个交易日20:30计算信号
  • 数据范围:
    1. 获取所有可交易合约
    2. 获取每个合约的持仓排名数据
    3. 分别统计多空前20名会员的持仓变化
2.2 信号计算
  • 核心逻辑:基于主力持仓变化判断市场方向
  • 计算流程:
    1. 汇总所有合约的多空持仓变化
    2. 计算多头持仓增量(long_hold_delta):前20名多头持仓的总变化
    3. 计算空头持仓增量(short_hold_delta):前20名空头持仓的总变化
    4. 信号判断:
      • 开多条件:多头增仓(>0)且空头减仓(<0)
      • 开空条件:多头减仓(<0)且空头增仓(>0)
      • 其他情况:观望或平仓

3. 仓位管理

3.1 开仓规则
  • 基础计算:
    • 单位资金 = 总资金 / 可以交易品种数量
    • 杠杆倍数:g.times(默认3倍)
  • 具体计算:

    手数 = int(总资金 / (合约价格 × 合约乘数 × 可以交易品种数量) × 杠杆倍数)
    
  • 最小开仓:至少1手

3.2 持仓调整
  • 多头持仓:
    • 持仓时遇到多头减仓或空头增仓则平仓
    • 否则保持原有仓位
  • 空头持仓:
    • 持仓时遇到多头增仓或空头减仓则平仓
    • 否则保持原有仓位

4. 交易执行

4.1 交易时间
  • 信号计算:20:30
  • 交易执行:次日09:32
4.2 交易顺序
  1. 先执行平仓指令(平多、平空)
  2. 再执行开仓指令(开多、开空)

交易规则

  • 采用异步报单模式
  • 使用真实价格
  • 考虑交易成本:
    • 开仓手续费:0.0023%
    • 平仓手续费:0.0023%
    • 平今手续费:0.04%
    • 最低保证金:17%
    • 滑点值:4个价格单位

K线趋势交易策略

核心思路

该策略基于K线实体与多条均线的关系进行交易,通过监控K线实体与均线的交叉、穿越情况以及均线之间的排列形态来判断趋势方向。策略同时结合止损和移仓换月机制来控制风险。

  1. 策略来源/ 本地
  2. 策略名称:K线趋势交易策略

主要特点

  1. 多均线系统(5、10、20、30日均线)
  2. K线形态分析
  3. 完整的止损机制
  4. 自动移仓换月
  5. 支持日内和夜盘交易

具体策略逻辑

1. 交易品种

  • 交易品种:商品期货和金融期货
  • 夜盘品种:金属、能源、农产品等
  • 日盘品种:股指、国债等
  • 交易合约:主力合约

2. 信号生成

2.1 趋势判断
  • 均线系统:
    • MA5(5日均线)
    • MA10(10日均线)
    • MA20(20日均线)
    • MA30(30日均线)
  • 趋势判断条件:
    1. 计算K线实体与各均线的位置关系
    2. 统计均线交叉次数(count_ma_crosses函数)
    3. 判断均线排列形态(check_ma_relations函数)
2.2 开仓条件
  • K线形态要求:
    1. K线实体穿越均线(check_shadow_cross函数)
    2. 影线比例不超过阈值(shadow_body_ratio_threshold,默认0.5)
  • 均线条件:
    1. 连续多日保持同向趋势(continuous_days记录)
    2. 均线间距合理,无过度发散

3. 仓位管理

3.1 开仓规则
  • 计算开仓数量:

    订单金额 = 总资产 × 单次开仓比例
    开仓手数 = 订单金额 / (合约价格 × 合约乘数)
    
  • 开仓限制:

    1. 检查涨跌停限制
    2. 考虑保证金要求
    3. 检查流动性条件
3.2 持仓调整
  • 移仓换月条件:
    1. 主力合约更换时自动执行
    2. 确保新旧合约可交易
    3. 保持原有持仓方向
  • 移仓流程:
    1. 平掉旧合约
    2. 开仓新合约
    3. 更新交易记录

4. 风险控制

4.1 止损机制
  • 固定止损:
    • 初始止损额度:initial_loss_limit(默认-4000)
    • 每日调整:loss_increment_per_day(默认200)
  • 均线止损:
    • 监控均线偏离度
    • 突破重要均线立即止损
4.2 特殊情况处理
  • 涨跌停板:
    • 无法开仓时取消交易
    • 无法平仓时持续尝试
  • 移仓失败:
    • 记录失败历史(g.change_fail_history
    • 保留原有持仓信息

5. 交易执行

5.1 交易时间
  • 日盘:09:30开始交易
  • 夜盘:根据品种交易时间
  • 收盘前15分钟停止开新仓
5.2 订单管理
  • 采用异步报单
  • 订单完整性检查
  • 成交状态跟踪
  • 失败订单重试机制

交易规则

  • 采用异步报单模式
  • 使用真实价格
  • 考虑交易成本:
    • 手续费:按照不同品种设置
    • 滑点:按照品种特性设置
    • 保证金:按照交易所要求设置

多均线穿越突破策略 v001

核心思路

该策略基于K线实体在同一天内穿越多条均线来识别建仓时机。策略同时结合止损和移仓换月机制来控制风险。

  1. 策略来源
  2. 策略名称:穿越均线趋势交易策略

主要特点

  1. 多均线系统(5、10、20、30日均线)
  2. K线形态分析
  3. 完整的止损机制
  4. 自动移仓换月
  5. 支持日内和夜盘交易

具体策略逻辑

1. 交易品种

  • 交易品种:商品期货和金融期货
  • 夜盘品种:金属、能源、农产品等
  • 日盘品种:其他商品、股指期货等
  • 交易合约:主力合约

2. 信号生成

2.1 开仓条件
  • 均线系统:
    • MA5(5日均线)
    • MA10(10日均线)
    • MA20(20日均线)
    • MA30(30日均线)
  • 均线数据更新:
    • 均线非当天数据更新:这部分数据是在开盘的时候就可以获得日线级别的数据,然后保存在内存中一天的任何时候都可以使用。一天执行一次
    • 均线当天数据更新:这部分数据是在当天交易过程中获得的分钟级别的数据,然后将最终数据暂时定义为当天收盘价拼接到内存中。每30分钟执行一次。
  • K线形态要求:
    • 上穿:
    • 开盘价小于等于5日均线,收盘价大于20日或30日均线
    • 最低价小于5日均线,收盘价大于30日均线
    • 开盘价小于等于10日均线,收盘价大于30日均线
    • 下穿:
    • 开盘价大于等于5日均线,收盘价小于20日或30日均线
    • 最高价大于5日均线,收盘价小于30日均线
    • 开盘价大于等于10日均线,收盘价小于30日均线
    • 最后开仓点:
    • 多仓:
      • 满足上穿条件
      • 针对最后一根要穿越的均线,盘中(14:30之前),最新价格高于均线价格0.5%,则开仓
      • 14:30之后,针对最后一根要穿越的均线,最新价格高于均线0.2%,则开仓
    • 空仓:
      • 满足下穿条件
      • 针对最后一根要穿越的均线,盘中(14:30之前),最新价格低于均线价格0.5%,则开仓
      • 14:30之后,针对最后一根要穿越的均线,最新价格低于均线0.2%,则开仓

3. 仓位管理

3.1 开仓规则
  • 计算开仓数量:

    订单金额 = 总资产 × 单次开仓比例
    开仓手数 = 订单金额 / (合约价格 × 合约乘数)
    
  • 开仓限制:

    1. 检查涨跌停限制
    2. 考虑保证金要求
    3. 检查流动性条件
3.2 持仓调整
  • 移仓换月条件:
    1. 主力合约更换时自动执行
    2. 确保新旧合约可交易
    3. 保持原有持仓方向
  • 移仓流程:
    1. 平掉旧合约
    2. 开仓新合约
    3. 更新交易记录

4. 风险控制

4.1 止损机制
  • 跟踪均线止损
    • 多仓:跟踪价格最高的均线(MA5、MA10、MA20、MA30中的最高值)
    • 空仓:跟踪价格最低的均线(MA5、MA10、MA20、MA30中的最低值)
    • 跳空检查:当天开盘价与前一交易日收盘价差异超过0.2%即为跳空
    • 时间分类:14:55:00为盘尾,其他时间为盘中
    • 动态止损比例:根据收益水平、跳空情况、交易时段确定0.25%-2%的止损比例
4.1.1 详细止损规则
收益水平 跳空情况 时段 止损比例 说明
< 5000 无跳空 盘中 1.0% 基础止损
< 5000 有跳空 盘中 0.5% 跳空风险较大,收紧止损
5000-15000 不限 盘中 1.0% 中等收益,标准止损
≥ 15000 不限 盘中 2.0% 高收益,放宽止损
< 5000 有跳空 盘尾 0.25% 最严格止损
< 5000 无跳空 盘尾 0.5% 盘尾收紧止损
5000-15000 不限 盘尾 0.5% 中等收益盘尾止损
≥ 15000 不限 盘尾 1.0% 高收益盘尾止损
4.1.2 配置参数
g.gap_ratio_threshold = 0.002      # 跳空比例:0.2%
g.market_close_times = ["14:55:00"] # 盘尾时间
g.profit_thresholds = [5000, 15000] # 价格分区
g.stop_ratios = [0.0025, 0.005, 0.01, 0.02] # 止损比例
4.2 特殊情况处理
  • 涨跌停板:
    • 无法开仓时取消交易
    • 无法平仓时持续尝试
  • 移仓失败:
    • 记录失败历史(g.change_fail_history
    • 保留原有持仓信息

5. 交易执行

5.1 交易时间
  • 日盘:09:00开始交易
  • 夜盘:21:00开始交易
  • 14:55最后一次检查是否开新仓
5.2 核心交易步骤
  1. 获取所有可交易品种(分白天和晚上)
  2. 获取所有可交易品种今天之前所需的数据,并保存到内存中
  3. 检查均线交叉数量,过滤掉交叉过多的品种(一天执行一次)
  4. 获取所有可交易品种今天所需的分钟数据作为今天数据,和2中的数据合并出最新的均线数据,并保存到内存中
  5. 根据交易品种的今天数据和均线数据,判断是否出现了上穿或者下穿的情况
  6. 针对那些有上穿和下穿的情况检查是否满足开仓条件
  7. 针对满足开仓条件的标的,计算购买的金额,并发起交易请求
  8. 针对已经持仓的标的,检查是否换月移仓
  9. 针对已经持仓的标的,检查是否止损或止盈
5.3 均线交叉过滤机制
  • 目的:过滤掉均线频繁交叉的品种,避免在震荡行情中开仓
  • 检查参数
    • g.max_ma_crosses:最大允许的均线交叉数量(默认3次)
    • g.ma_cross_check_days:检查均线交叉的天数(默认5天)
  • 检查逻辑
    • 计算过去5天内MA5、MA10、MA20、MA30之间的交叉次数
    • 统计所有均线对(MA5-MA10、MA5-MA20、MA5-MA30、MA10-MA20、MA10-MA30、MA20-MA30)的交叉
    • 如果总交叉数超过最大允许值,该品种当天不参与交易
  • 执行时机:每天21:05和09:05各执行一次
5.4 不同时间点任务分配
  • 由具体时间触发的
    • 21:05:任务1, 2, 3, 4, 5, 6, 9
    • 21:35:任务4, 5, 6, 9
    • 22:05:任务4, 5, 6, 9
    • 22:35:任务4, 5, 6, 9
    • 09:05:任务1, 2, 3, 4, 5, 6, 9
    • 09:35:任务4, 5, 6, 9
    • 10:05:任务4, 5, 6, 9
    • 10:35:任务4, 5, 6, 9
    • 11:05:任务4, 5, 6, 9
    • 11:25:任务4, 5, 6, 9
    • 13:35:任务4, 5, 6, 9
    • 14:05:任务4, 5, 6, 9
    • 14:35:任务4, 5, 6, 8, 9
    • 14:55:任务4, 5, 6, 8, 9
  • 由具体时间触发的
    • 任务7:任务6满足条件要开仓的时候才会执行任务7

交易规则

  • 采用异步报单模式
  • 使用真实价格
  • 考虑交易成本:
    • 手续费:按照不同品种设置
    • 滑点:按照品种特性设置
    • 保证金:按照交易所要求设置

多均线穿越突破策略 v002

改动1:止盈止损均线

  1. 默认改成MA5

改动2:

全局变量管理架构

为了优化内存使用和数据管理,该策略采用了分层的全局变量管理架构:

1. 当天临时数据 (g.daily_transient_data)

特点: 仅当天使用,收盘后清理

  • ma_cross_signals: 存储多均线穿越信号(当天信号,当天处理)
  • minute_data_cache: 存储今日分钟数据缓存(仅当天有效)
  • tradable_futures: 可交易期货品种(每天重新生成)
  • today_trades: 当日交易记录(收盘后打印并清空)
2. 持续数据 (g.persistent_daily_data)

特点: 当天数据第二天也要用,按日期管理,定期清理过期数据

  • daily_data_cache: 存储历史日线数据缓存(用于计算均线,持续更新)
  • ma_cross_filtered_futures: 存储通过均线交叉检查的品种(按日期缓存,保留5天)
  • gap_check_results: 存储跳空检查结果(当天计算,持仓期间使用)
3. 持仓数据 (g.position_data)

特点: 持仓期间要用,平仓后清理

  • trade_history: 持仓信息(平仓后删除)
  • ma_data_cache: 存储均线数据缓存(持仓期间用于止损,平仓后清理)
4. 历史数据 (g.historical_data)

特点: 一直需要保留,用于统计分析

  • margin_rate_history: 保证金比例变化历史记录(用于统计分析)
  • change_fail_history: 换月失败历史记录(用于统计分析)

数据清理机制

  • 收盘后清理: 清理当天临时数据,优化历史数据缓存
  • 持仓平仓时清理: 清理与特定持仓相关的数据
  • 定期清理: 清理过期的持续数据(默认保留5天)
  • 内存优化: 历史数据缓存最多保留50个品种

兼容性映射

为了保持代码兼容性,保留了原有的全局变量名映射:

g.trade_history = g.position_data['trade_history']
g.ma_cross_signals = g.daily_transient_data['ma_cross_signals']
# ... 其他映射

内存使用监控

策略提供了内存使用情况报告功能,每日收盘后会打印各类数据的存储情况,便于监控和优化。

其他策略文件

  • MultiMABreakoutStrategy_v001.py: 多均线穿越突破策略的第一版本
  • TrendBreakoutStrategy_v003.py: 趋势突破策略
  • TrendFalseChange_v002.py: 趋势假变化策略
  • HS300_SimplifiedSpiderGridTrading.py: 沪深300简化蜘蛛网格交易策略

改动3:

  1. 更新历史数据的时候不止是可购买的,还有持仓的

改动4:

  1. 候选标的:先去掉原油SC

改动5:

  1. 增加固定金额平仓
  2. 短期试下来效果都不明显

改动6:

  1. 增加收盘价和开盘价比率筛选,绝对值超过设定比率才开仓。
  2. 短期试下来效果都不明显

改动7:

  1. 调整一下“critical_ma_name”的计算,以第三根穿越的为准。
  2. 比如说向下穿越,那就是被穿越的按照价格升序排序,价格排序第三的均线。
  3. 如果说向上穿越,那就是被穿越的按照价格升序排序,价格排序第三的均线。

改动8:

  1. g.price_deviation_min从0.005改成0.004