豆包 利用整理形态中的上升旗形买入,当股价跌破5日均线时卖出,编写一个能在JoinQuant量化交易平台上运行的交易策略,要求编写Python代码。
下面给你写一套 可直接在聚宽(JoinQuant)运行 的量化策略:
逻辑:上升旗形整理形态买入 + 跌破5日均线卖出
代码完整、注释详细,复制即可回测。
一、策略思路
1. 买入条件(上升旗形简化版)
- 近期出现 一波上涨后缩量回调
- 回调后 再次放量突破短期压力
- 整体趋势向上
2. 卖出条件 - 收盘价 跌破5日均线 卖出
3. 仓位 - 满仓买入,单一股票(可改成多股票)
二、完整 JoinQuant 策略代码
python
导入函数库
from jqdata import *
import pandas as pd
import numpy as np
==================== 初始化 ====================
def initialize(context):
# 设定要交易的股票(可修改)
g.security = ‘000001.XSHE’
# 设定基准
set_benchmark(‘000300.XSHG’)
# 设定手续费
set_order_cost(OrderCost(open_tax=0, close_tax=0.001,
open_commission=0.0003, close_commission=0.0003,
min_commission=5), type=‘stock’)
# 滑点
set_slippage(PriceSlippage(0.002))
# 运行频率
run_daily(trade, time=‘every_bar’)
==================== 交易函数 ====================
def trade(context):
security = g.security
# 获取数据:近60日行情
df = get_price(security, end_date=context.current_dt,
frequency='1d', fields=['close', 'volume'], count=60)
if len(df) < 30:
return
# 计算5日均线
df['ma5'] = df['close'].rolling(5).mean()
# ==================== 1. 上升旗形判断 ====================
close = df['close'].values
vol = df['volume'].values
ma5 = df['ma5'].values
# 最近10天为旗面整理,前面20天为旗杆上涨
flag_period = 10
pole_period = 20
# 1)旗杆:前20天上涨
pole_start = -(pole_period + flag_period)
pole_end = -flag_period
pole_rise = close[pole_end] / close[pole_start] > 1.15 # 上涨>15%
# 2)旗面:最近10天缩量、小幅震荡
flag_close = close[-flag_period:]
flag_vol = vol[-flag_period:]
flag_vol_ratio = np.mean(flag_vol) / np.mean(vol[pole_start:pole_end]) < 0.7 # 缩量30%以上
# 旗形震荡幅度 < 12%
flag_high = max(flag_close)
flag_low = min(flag_close)
flag_range = (flag_high - flag_low) / flag_low < 0.12
# 3)突破:今日收盘价突破旗形上沿
breakout = close[-1] > flag_high
# 整体上升旗形成立
up_flag = pole_rise and flag_vol_ratio and flag_range and breakout
# ==================== 2. 卖出条件:跌破5日线 ====================
sell_signal = close[-1] < ma5[-1]
# ==================== 执行交易 ====================
# 持仓
position = context.portfolio.positions[security].total_amount
if up_flag and position == 0:
# 满仓买入
order_target_value(security, context.portfolio.total_value)
print(f'【买入】{security} 时间:{context.current_dt}')
if sell_signal and position > 0:
# 清仓卖出
order_target(security, 0)
print(f'【卖出】{security} 时间:{context.current_dt}')
==================== 盘后记录(可选) ====================
def after_market(context):
pass
三、使用说明
1. 打开 JoinQuant 策略研究 → 新建策略
2. 把代码全部粘贴进去
3. 点击 回测,即可直接运行
4. 可修改:
- g.security = ‘000001.XSHE’ 换成你想做的股票
- 上涨幅度、缩量比例、震荡幅度等参数
四、你可以告诉我 3 个信息,我帮你优化成“实战版”
1. 你想做 A股全市场选股 还是 单只股票?
2. 你希望 日线/30分钟/60分钟 级别?
3. 是否要加 止盈止损、仓位控制、过滤ST、次新股?
我可以直接给你改成 更稳健、可实盘 的升级版策略。
更多推荐




所有评论(0)