内置策略
内置策略
Jiuhuang提供多种内置策略,可直接使用。
快速使用
from jiuhuang.strategy import *
# 使用内置策略strategies = { "海龟": StrategyTurtle(entry_window=20, exit_window=10), "移动均线交叉": StrategyMovingAverageCrossover(12, 24), "买入持有": StrategyBuyAndHold(),}可用策略
海龟交易策略 (StrategyTurtle)
经典的趋势跟踪策略,基于历史高点/低点突破入场。
策略逻辑:
- 入场:收盘价突破过去 N 天的最高价时买入
- 出场:收盘价跌破过去 M 天的最低价时卖出
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
entry_window | int | 20 | 入场窗口期,计算历史最高价的天数 |
exit_window | int | 10 | 出场窗口期,计算历史最低价的天数 |
使用场景:
- 趋势明显的市场
- 波动性较大的品种
- 长期趋势跟踪
StrategyTurtle(entry_window=20, exit_window=10)均线交叉策略 (StrategyMovingAverageCrossover)
利用短期和长期均线的交叉来判断趋势。
策略逻辑:
- 入场(金叉):短期均线从下向上突破长期均线
- 出场(死叉):短期均线从上向下突破长期均线
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
short_window | int | 50 | 短期均线窗口期 |
long_window | int | 200 | 长期均线窗口期 |
使用场景:
- 中长期趋势跟踪
- 趋势明显的市场
- 避免在震荡市中使用
StrategyMovingAverageCrossover(short_window=50, long_window=200)买入持有策略 (StrategyBuyAndHold)
最简单的长期投资策略,在起始日期买入后一直持有。
策略逻辑:
- 入场:在数据起始日期买入(只触发一次)
- 出场:无卖出信号(持续持有)
使用场景:
- 长期投资
- 作为策略表现的基准对比
- 配合其他风险控制参数使用
StrategyBuyAndHold()成交量趋势策略 (StrategyVolumeTrend)
基于成交量和价格趋势的策略,结合量价关系判断市场动向。
策略逻辑:
- 入场:价格在均线之上 + 成交量显著放大 + 成交量趋势向上
- 出场:价格跌破均线 或 成交量萎缩 或 成交量趋势向下
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
ma_window | int | 20 | 移动平均线窗口期 |
volume_window | int | 20 | 成交量平均窗口期 |
volume_threshold | float | 1.2 | 成交量放大阈值(倍数) |
volume_trend_threshold | float | 0.1 | 成交量趋势阈值 |
price_change_threshold | float | 0.02 | 价格变动阈值 |
使用场景:
- 成交量活跃的市场
- 需要结合量价关系判断趋势
- 捕捉放量突破行情
StrategyVolumeTrend(ma_window=20, volume_window=20, volume_threshold=1.2)量价背离策略 (StrategyVolumeDivergence)
基于RSI指标和成交量背离的策略,捕捉价格与成交量的背离信号。
策略逻辑:
- 入场:RSI超卖 + 成交量趋势向上 + 价格下跌(底背离)
- 出场:RSI超买 + 成交量趋势向下 + 价格上涨(顶背离)
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
rsi_window | int | 14 | RSI计算窗口期 |
volume_window | int | 20 | 成交量平均窗口期 |
volume_trend_threshold | float | 0.05 | 成交量趋势阈值 |
price_change_threshold | float | 0.02 | 价格变动阈值 |
rsi_oversold | float | 30 | RSI超卖阈值 |
rsi_overbought | float | 70 | RSI超买阈值 |
使用场景:
- 震荡市场中的反转信号
- 捕捉背离信号
- 需要结合超买超卖指标使用
StrategyVolumeDivergence(rsi_window=14, rsi_oversold=30, rsi_overbought=70)均值回归策略 (StrategyMeanReversion)
基于价格偏离均值程度的策略,假设价格会回归到均值水平。
策略逻辑:
- 入场:价格显著低于均线(负偏离)+ RSI超卖
- 出场:价格显著高于均线(正偏离)+ RSI超买
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
ma_window | int | 20 | 均线窗口期 |
deviation_threshold | float | 0.02 | 价格偏离均线阈值(2%) |
rsi_window | int | 14 | RSI计算窗口期 |
rsi_oversold | int | 30 | RSI超卖阈值 |
rsi_overbought | int | 70 | RSI超买阈值 |
使用场景:
- 震荡市场
- 价格波动后回归均值的行情
- 适合区间震荡的股票
StrategyMeanReversion(ma_window=20, deviation_threshold=0.02)RSI 策略 (StrategyRSI)
基于RSI指标的超买超卖区域进行交易的策略。
策略逻辑:
- 入场:RSI从超卖区域回升(如从30以下回到30以上)
- 出场:RSI进入超买区域后回落(如从70以上回到70以下)
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
rsi_window | int | 14 | RSI计算窗口期 |
rsi_oversold | float | 30 | RSI超卖阈值 |
rsi_overbought | float | 70 | RSI超买阈值 |
rsi_exit_oversold | float | 50 | RSI超卖退出阈值 |
rsi_exit_overbought | float | 50 | RSI超买退出阈值 |
使用场景:
- 震荡市场
- 捕捉价格的短期反弹和回调
- 需要配合趋势判断避免逆势交易
StrategyRSI(rsi_window=14, rsi_oversold=30, rsi_overbought=70)布林带策略 (StrategyBollingerBands)
基于布林带上下轨突破进行交易的策略,利用价格统计分布原理。
策略逻辑:
- 入场(突破):价格突破布林带上轨买入
- 出场:价格跌破布林带中轨卖出
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
window | int | 20 | 布林带中轨窗口期 |
num_std | float | 2.0 | 标准差倍数 |
use_mean_reversion | bool | False | 是否使用均值回归逻辑 |
使用场景:
- 波动性较大的市场
- 趋势反转的捕捉
- 震荡区间突破行情
StrategyBollingerBands(window=20, num_std=2.0)动量策略 (StrategyMomentum)
基于价格动量进行交易的策略,假设上涨的股票将继续上涨,下跌的将继续下跌。
策略逻辑:
- 入场:价格动量指标超过阈值且为正 + 价格在均线之上
- 出场:价格动量指标转负或跌破均线
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
momentum_window | int | 20 | 动量计算窗口期 |
momentum_threshold | float | 0.05 | 动量阈值(5%) |
ma_window | int | 60 | 均线窗口期 |
使用场景:
- 趋势明确的市场
- 捕捉趋势的延续
- 适合中长期交易
StrategyMomentum(momentum_window=20, momentum_threshold=0.05, ma_window=60)突破策略 (StrategyBreakout)
基于价格突破历史高低点进行交易的策略,是经典的趋势跟踪策略。
策略逻辑:
- 入场:价格突破过去N天的最高价
- 出场:价格跌破过去M天的最低价
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
lookback_period | int | 20 | 回溯期,计算历史高低价的天数 |
atr_multiplier | float | 2.0 | ATR倍数,用于动态止损 |
use_atr_stop | bool | False | 是否使用ATR跟踪止损 |
使用场景:
- 趋势明显的市场
- 捕捉突破后的趋势行情
- 适合短线和波段交易
StrategyBreakout(lookback_period=20, atr_multiplier=2.0, use_atr_stop=False)Dual Thrust 策略 (StrategyDualThrust)
由Michael Chalek开发的经典日内交易策略,通过计算上下轨进行突破交易。
策略逻辑:
- 入场:价格突破上轨(开盘价+N倍Range)
- 出场:价格跌破下轨
参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
k1 | float | 0.5 | 上轨系数 |
k2 | float | 0.5 | 下轨系数 |
lookback_period | int | 20 | 回溯期 |
使用场景:
- 日内交易
- 趋势明显的市场
- 捕捉突破行情
StrategyDualThrust(k1=0.5, k2=0.5, lookback_period=20)策略对比
from jiuhuang.data import JiuhuangData, DataTypesfrom jiuhuang.strategy import *from jiuhuang.backtest import backtestfrom jiuhuang.dash import display_backtestingimport warnings
warnings.filterwarnings("ignore")
jh = JiuhuangData()
# 对比多个策略strategies = { "海龟": StrategyTurtle(entry_window=20, exit_window=10), "移动均线交叉": StrategyMovingAverageCrossover(12, 24), "买入持有": StrategyBuyAndHold(),}
# 获取数据symbols = ["000001", "600036", "600519", "000858", "601318", "000002"]stock_price = jh.get_data( DataTypes.STOCK_ZH_A_HIST_QFQ, start="2024-12-25", end="2026-03-11", symbol=",".join(symbols),)stock_info = jh.get_data(DataTypes.STOCK_INDIVIDUAL_INFO_EM)
# 执行回测trading_history, backtest_perf = backtest(strategies, stock_price, stock_info)
# 展示结果display_backtesting(trading_history, backtest_perf)