Skip to content

内置策略

内置策略

Jiuhuang提供多种内置策略,可直接使用。

快速使用

from jiuhuang.strategy import *
# 使用内置策略
strategies = {
"海龟": StrategyTurtle(entry_window=20, exit_window=10),
"移动均线交叉": StrategyMovingAverageCrossover(12, 24),
"买入持有": StrategyBuyAndHold(),
}

可用策略

海龟交易策略 (StrategyTurtle)

经典的趋势跟踪策略,基于历史高点/低点突破入场。

策略逻辑:

  • 入场:收盘价突破过去 N 天的最高价时买入
  • 出场:收盘价跌破过去 M 天的最低价时卖出

参数:

参数类型默认值描述
entry_windowint20入场窗口期,计算历史最高价的天数
exit_windowint10出场窗口期,计算历史最低价的天数

使用场景:

  • 趋势明显的市场
  • 波动性较大的品种
  • 长期趋势跟踪
StrategyTurtle(entry_window=20, exit_window=10)

均线交叉策略 (StrategyMovingAverageCrossover)

利用短期和长期均线的交叉来判断趋势。

策略逻辑:

  • 入场(金叉):短期均线从下向上突破长期均线
  • 出场(死叉):短期均线从上向下突破长期均线

参数:

参数类型默认值描述
short_windowint50短期均线窗口期
long_windowint200长期均线窗口期

使用场景:

  • 中长期趋势跟踪
  • 趋势明显的市场
  • 避免在震荡市中使用
StrategyMovingAverageCrossover(short_window=50, long_window=200)

买入持有策略 (StrategyBuyAndHold)

最简单的长期投资策略,在起始日期买入后一直持有。

策略逻辑:

  • 入场:在数据起始日期买入(只触发一次)
  • 出场:无卖出信号(持续持有)

使用场景:

  • 长期投资
  • 作为策略表现的基准对比
  • 配合其他风险控制参数使用
StrategyBuyAndHold()

成交量趋势策略 (StrategyVolumeTrend)

基于成交量和价格趋势的策略,结合量价关系判断市场动向。

策略逻辑:

  • 入场:价格在均线之上 + 成交量显著放大 + 成交量趋势向上
  • 出场:价格跌破均线 或 成交量萎缩 或 成交量趋势向下

参数:

参数类型默认值描述
ma_windowint20移动平均线窗口期
volume_windowint20成交量平均窗口期
volume_thresholdfloat1.2成交量放大阈值(倍数)
volume_trend_thresholdfloat0.1成交量趋势阈值
price_change_thresholdfloat0.02价格变动阈值

使用场景:

  • 成交量活跃的市场
  • 需要结合量价关系判断趋势
  • 捕捉放量突破行情
StrategyVolumeTrend(ma_window=20, volume_window=20, volume_threshold=1.2)

量价背离策略 (StrategyVolumeDivergence)

基于RSI指标和成交量背离的策略,捕捉价格与成交量的背离信号。

策略逻辑:

  • 入场:RSI超卖 + 成交量趋势向上 + 价格下跌(底背离)
  • 出场:RSI超买 + 成交量趋势向下 + 价格上涨(顶背离)

参数:

参数类型默认值描述
rsi_windowint14RSI计算窗口期
volume_windowint20成交量平均窗口期
volume_trend_thresholdfloat0.05成交量趋势阈值
price_change_thresholdfloat0.02价格变动阈值
rsi_oversoldfloat30RSI超卖阈值
rsi_overboughtfloat70RSI超买阈值

使用场景:

  • 震荡市场中的反转信号
  • 捕捉背离信号
  • 需要结合超买超卖指标使用
StrategyVolumeDivergence(rsi_window=14, rsi_oversold=30, rsi_overbought=70)

均值回归策略 (StrategyMeanReversion)

基于价格偏离均值程度的策略,假设价格会回归到均值水平。

策略逻辑:

  • 入场:价格显著低于均线(负偏离)+ RSI超卖
  • 出场:价格显著高于均线(正偏离)+ RSI超买

参数:

参数类型默认值描述
ma_windowint20均线窗口期
deviation_thresholdfloat0.02价格偏离均线阈值(2%)
rsi_windowint14RSI计算窗口期
rsi_oversoldint30RSI超卖阈值
rsi_overboughtint70RSI超买阈值

使用场景:

  • 震荡市场
  • 价格波动后回归均值的行情
  • 适合区间震荡的股票
StrategyMeanReversion(ma_window=20, deviation_threshold=0.02)

RSI 策略 (StrategyRSI)

基于RSI指标的超买超卖区域进行交易的策略。

策略逻辑:

  • 入场:RSI从超卖区域回升(如从30以下回到30以上)
  • 出场:RSI进入超买区域后回落(如从70以上回到70以下)

参数:

参数类型默认值描述
rsi_windowint14RSI计算窗口期
rsi_oversoldfloat30RSI超卖阈值
rsi_overboughtfloat70RSI超买阈值
rsi_exit_oversoldfloat50RSI超卖退出阈值
rsi_exit_overboughtfloat50RSI超买退出阈值

使用场景:

  • 震荡市场
  • 捕捉价格的短期反弹和回调
  • 需要配合趋势判断避免逆势交易
StrategyRSI(rsi_window=14, rsi_oversold=30, rsi_overbought=70)

布林带策略 (StrategyBollingerBands)

基于布林带上下轨突破进行交易的策略,利用价格统计分布原理。

策略逻辑:

  • 入场(突破):价格突破布林带上轨买入
  • 出场:价格跌破布林带中轨卖出

参数:

参数类型默认值描述
windowint20布林带中轨窗口期
num_stdfloat2.0标准差倍数
use_mean_reversionboolFalse是否使用均值回归逻辑

使用场景:

  • 波动性较大的市场
  • 趋势反转的捕捉
  • 震荡区间突破行情
StrategyBollingerBands(window=20, num_std=2.0)

动量策略 (StrategyMomentum)

基于价格动量进行交易的策略,假设上涨的股票将继续上涨,下跌的将继续下跌。

策略逻辑:

  • 入场:价格动量指标超过阈值且为正 + 价格在均线之上
  • 出场:价格动量指标转负或跌破均线

参数:

参数类型默认值描述
momentum_windowint20动量计算窗口期
momentum_thresholdfloat0.05动量阈值(5%)
ma_windowint60均线窗口期

使用场景:

  • 趋势明确的市场
  • 捕捉趋势的延续
  • 适合中长期交易
StrategyMomentum(momentum_window=20, momentum_threshold=0.05, ma_window=60)

突破策略 (StrategyBreakout)

基于价格突破历史高低点进行交易的策略,是经典的趋势跟踪策略。

策略逻辑:

  • 入场:价格突破过去N天的最高价
  • 出场:价格跌破过去M天的最低价

参数:

参数类型默认值描述
lookback_periodint20回溯期,计算历史高低价的天数
atr_multiplierfloat2.0ATR倍数,用于动态止损
use_atr_stopboolFalse是否使用ATR跟踪止损

使用场景:

  • 趋势明显的市场
  • 捕捉突破后的趋势行情
  • 适合短线和波段交易
StrategyBreakout(lookback_period=20, atr_multiplier=2.0, use_atr_stop=False)

Dual Thrust 策略 (StrategyDualThrust)

由Michael Chalek开发的经典日内交易策略,通过计算上下轨进行突破交易。

策略逻辑:

  • 入场:价格突破上轨(开盘价+N倍Range)
  • 出场:价格跌破下轨

参数:

参数类型默认值描述
k1float0.5上轨系数
k2float0.5下轨系数
lookback_periodint20回溯期

使用场景:

  • 日内交易
  • 趋势明显的市场
  • 捕捉突破行情
StrategyDualThrust(k1=0.5, k2=0.5, lookback_period=20)

策略对比

from jiuhuang.data import JiuhuangData, DataTypes
from jiuhuang.strategy import *
from jiuhuang.backtest import backtest
from jiuhuang.dash import display_backtesting
import 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)