迅投QMT社区 门户 查看主题

量化研究--年化60%四大搅屎棍策略实盘设置 ,可以下载

发布者: *******7387_x00JA | 发布时间: 2025-11-3 10:13| 查看数: 23| 评论数: 0|帖子模式

文章声明:本内容为个人的业余研究,和任何单位,机构没有关系,文章出现的股票代码,全部只是测试例子,不做投资参考,投资有风险,代码学习使用,不做商业用途

昨天写了一个聚宽策略实盘的原理量化研究--全新一代大QMT聚宽交易系统介绍

https://mp.weixin.qq.com/s/SyLTpDr_hcNfIvG9lOE8nw

详细的使用教程可以参考网页https://gitee.com/quants/big_qmt_joinquant_trader

https://gitee.com/quants/big_qmt_joinquant_trader

也可以网页下载就可以

0853ea2feaea8f5a1a036fdf2f71004d.png

e3092a02ad428eb338df87eb96602955.png

回测的结果

4a56eb4101c20233a6835e89cbed6c0c.png

3a6eae69466c54c1c37b37a57ea74f02.png

我介绍核心的怎么样对接实盘把下面的代码复杂到聚宽的策略开头就可以

987d1645ada7b38ac88ab76eaea9c0ec.png

import requests
import json
import pandas as pd
from jqdata import *
url='http://101.34.65.108'
port=8888
#自定义服务器编码
url_code='63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad'
#记得把这个改成自己的一个策略一个,策略的名称找作者建立
password='国九条后中小板微盘小改'
class joinquant_trader:
    def __init__(self,url='http://124.220.32.224',
                port=8025,
                url_code='63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad',
                password='123456'):
        '''
        获取服务器数据
        '''
        self.url=url
        self.port=port
        self.url_code=url_code
        self.password=password
    def get_user_data(self,data_type='用户信息'):
        '''
        获取使用的数据
        data_type='用户信息','实时数据',历史数据','清空实时数据','清空历史数据'
        '''
        url='{}:{}/_dash-update-component'.format(self.url,self.port)
        headers={'Content-Type':'application/json'}
        data={"output":"joinquant_trader_table.data@{}".format(self.url_code),
            "outputs":{"id":"joinquant_trader_table","property":"data@{}".format(self.url_code)},
            "inputs":[{"id":"joinquant_trader_password","property":"value","value":self.password},
                    {"id":"joinquant_trader_data_type","property":"value","value":data_type},
                    {"id":"joinquant_trader_text","property":"value","value":"\n               {'状态': 'held', '订单添加时间': 'datetime.datetime(2024, 4, 23, 9, 30)', '买卖': 'False', '下单数量': '9400', '已经成交': '9400', '股票代码': '001.XSHE', '订单ID': '1732208241', '平均成交价格': '10.5', '持仓成本': '10.59', '多空': 'long', '交易费用': '128.31'}\n                "},
                    {"id":"joinquant_trader_run","property":"value","value":"运行"},
                    {"id":"joinquant_trader_down_data","property":"value","value":"不下载数据"}],
                    "changedPropIds":["joinquant_trader_run.value"],"parsedChangedPropsIds":["joinquant_trader_run.value"]}
        res=requests.post(url=url,data=json.dumps(data),headers=headers)
        text=res.json()
        df=pd.DataFrame(text['response']['joinquant_trader_table']['data'])
        return df
    def send_order(self,result):
        '''
        发送交易数据
        '''
        url='{}:{}/_dash-update-component'.format(self.url,self.port)
        headers={'Content-Type':'application/json'}
        data={"output":"joinquant_trader_table.data@{}".format(self.url_code),
            "outputs":{"id":"joinquant_trader_table","property":"data@{}".format(self.url_code)},
            "inputs":[{"id":"joinquant_trader_password","property":"value","value":self.password},
                    {"id":"joinquant_trader_data_type","property":"value","value":'发送信号'},
                    {"id":"joinquant_trader_text","property":"value","value":result},
                    {"id":"joinquant_trader_run","property":"value","value":"运行"},
                    {"id":"joinquant_trader_down_data","property":"value","value":"不下载数据"}],
                    "changedPropIds":["joinquant_trader_run.value"],"parsedChangedPropsIds":["joinquant_trader_run.value"]}
        res=requests.post(url=url,data=json.dumps(data),headers=headers)
        text=res.json()
        df=pd.DataFrame(text['response']['joinquant_trader_table']['data'])
        return df
#继承类
xg_data=joinquant_trader(url=url,port=port,password=password,)
def send_order(result):
    '''
    发送函数
    status: 状态, 一个OrderStatus值
    add_time: 订单添加时间, [datetime.datetime]对象
    is_buy: bool值, 买还是卖,对于期货:
    开多/平空 -> 买
    开空/平多 -> 卖
    amount: 下单数量, 不管是买还是卖, 都是正数
    filled: 已经成交的股票数量, 正数
    security: 股票代码
    order_id: 订单ID
    price: 平均成交价格, 已经成交的股票的平均成交价格(一个订单可能分多次成交)
    avg_cost: 卖出时表示下卖单前的此股票的持仓成本, 用来计算此次卖出的收益. 买入时表示此次买入的均价(等同于price).
    side: 多/空,'long'/'short'
    action: 开/平, 'open'/'close'
    commission交易费用(佣金、税费等)
    '''
    data={}
    data['状态']=str(result.status)
    data['订单添加时间']=str(result.add_time)
    data['买卖']=str(result.is_buy)
    data['下单数量']=str(result.amount)
    data['已经成交']=str(result.filled)
    data['股票代码']=str(result.security)
    data['订单ID']=str(result.order_id)
    data['平均成交价格']=str(result.price)
    data['持仓成本']=str(result.avg_cost)
    data['多空']=str(result.side)
    data['交易费用']=str(result.commission)
    result=str(data)
    xg_data.send_order(result)
    return data
def xg_order(func):
    '''
    继承order对象 数据交易函数
    '''
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if result == None:
            return
        send_order(result)
        return result
    return wrapper
def xg_order_target(func):
    '''
    继承order_target对象 百分比
    '''
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if result == None:
            return        
        send_order(result)
        return result
    return wrapper


def xg_order_value(func):
    '''
    继承order_value对象 数量
    '''
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if result == None:
            return        
        send_order(result)
        return result
    return wrapper
def xg_order_target_value(func):
    '''
    继承order_target_value对象 数量
    '''
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if result == None:
            return        
        send_order(result)
        return result
    return wrapper
order = xg_order(order)
order_target = xg_order_target(order_target)
order_value = xg_order_value(order_value)
order_target_value = xg_order_target_value(order_target_value)

546e0b24c3301f806eaf4fe6fbc3b262.png

设置策略授权码比如password参数,授权码取一个名字发我就可以

76834a8b7e8631257c491d3d356be734.png

点击一下回测看一下数据是否发送到服务器就可以,数据发送到了服务器没有问题

1539bc7042e9927fe332228b78aaac4f.png

速度还是非常快的

6f609af3ddfa02a6de7244c012adffb5.png

qmt设置导入策略

1037bda8debdecc1b69c287a2f5afd43.png

源代码版本

8f5a35ed28a6ce67e1b81d3a43c628b6.png

点击编辑输入账户,我选择主要的内容说明,其他的全部参考网页教程

05185e73e8462955a7483bfab42db227.png

输入授权码,和聚宽,服务器,保持一样

5080ceee56a486abf0c14cddd0d6d67b.png

ca0b648d04efc340e8e3eceb1d69d400.png

9bc27923a022f1e75b65d0c71c8be4b8.png

名字无所谓随便取

1ee479487a54c97cacf84c580283736b.png

今天没有实时数据,是否测试参数改成是,测试一下下单结果,实盘一点要改成否

eae661cb233aa8c82a4c97ce52aeac0f.png

点击模型交易导入策略就可以

1fa7aea26a8ca4937d5f5f9db0a54c08.png

点击运行

5ee851816f9d64114cc0df485d74dde8.png

策略目前全部平仓了,没有买入没有问题

44f6f8699067b875214bab3a4c4adb6b.png

0f1a1b6ec648bed54b5c1c7c71f436a1.png

没有问题参数是否测试改否挂实盘就可以

f6b37a9f5b13204c178219b784934152.png

点击运行就可以

29096d92ea779ff57be651bf76503f9b.png

源代码我全部上传了可以知识星球下载

61b34fda5c1aec3059950eebca2f1194.jpg

不懂的问我就可以,加我备注入群可以加入量化群

69bc723d3ab3d72eb7b508b8be979a0c.jpg

"四大搅屎棍策略"深度原理剖析

策略哲学基础

市场无效性假设

该策略基于行为金融学理论,认为A股市场存在系统性行为偏差:

  • 散户主导市场导致非理性波动
  • 机构跟风效应加剧行业轮动
  • 政策敏感性催生结构性机会

小市值溢价理论

策略核心信仰小市值效应在中国市场的持续性:

  • 小市值公司成长性更高
  • 机构覆盖度低,存在定价错误
  • 流动性溢价带来超额收益

行业轮动机制深度解析

行业宽度计算原理

# 关键技术指标:行业宽度
df_bias = (df_close.iloc[:, -p_count:] > df_ma20) 
df_ratio = (df_bias.groupby('industry_code').sum() * 100.0) / df_bias.groupby('industry_code').count()

数学原理

  • 计算每个行业内股价在20日均线以上的股票比例
  • 比例越高代表行业整体趋势越强
  • 使用滚动窗口计算确保无未来函数

行为金融学解释

  • 当行业宽度高时,说明资金集中流入该行业
  • 反映了机构调仓行为市场共识形成
  • 宽度指标比单纯价格涨幅更能反映行业热度

"搅屎棍"行业的心理学基础

四个被排除的行业具有共同特征:

1. 银行(801780)

  • 市场地位:权重股,拉升指数但个股不涨
  • 资金效应:吸金效应强,挤压小盘股流动性
  • 行为模式:银行股大涨通常伴随市场风格切换

2. 有色金属(801050)

  • 周期性:强周期行业,波动剧烈
  • 外部依赖:受大宗商品价格影响大
  • 资金性质:通常为避险或通胀对冲资金

3. 钢铁(801040)

  • 政策敏感性:供给侧改革影响显著
  • 同质化:个股差异小,板块联动强
  • 流动性:大盘股,消耗大量资金

4. 煤炭(801950)

  • 传统行业:成长性差,估值天花板低
  • 环保压力:长期政策压制
  • 季节性:受天气和政策周期影响

核心逻辑:当这些传统大盘股行业走强时,意味着:

  • 风险偏好下降,资金避险
  • 市场风格向价值股切换
  • 小盘股的资金面承压

多因子选股模型详解

基本面因子筛选

query(
    valuation.code,
).filter(
    valuation.code.in_(choice),
    indicator.roe > 0.15,      # 净资产收益率 > 15%
    indicator.roa > 0.10,      # 总资产收益率 > 10%
).order_by(
    valuation.market_cap.asc() # 按市值升序排列
).limit(g.stock_num)

ROE因子(>15%)

  • 经济意义:衡量股东权益的回报率
  • 阈值设定:15%确保公司具备持续盈利能力
  • 排除效应:过滤掉盈利能力差的僵尸企业

ROA因子(>10%)

  • 经济意义:衡量总资产的使用效率
  • 双重验证:与ROE结合,防止高杠杆扭曲
  • 质量保证:确保盈利来自真实经营能力

小市值因子

  • 学术基础:Fama-French三因子模型
  • A股特性:小盘股溢价在中国市场显著
  • 逆向思维:在机构关注度低的领域寻找机会

技术面过滤机制

流动性过滤

def filter_paused_stock(stock_list):
    return [stock for stock in stock_list if not current_data[stock].paused]
  • 停牌风险:避免资金被锁定
  • 信息不对称:复牌后可能补跌

风险警示过滤

python

deffilter_st_stock(stock_list):return[stock for stock in stock_list            ifnot current_data[stock].is_st            and'ST'notin current_data[stock].name            and'*'notin current_data[stock].name            and'退'notin current_data[stock].name]
  • 退市风险:ST/*ST/退市预警股票
  • 极端事件:避免黑天鹅事件冲击

特殊板块过滤

python

deffilter_kcbj_stock(stock_list):for stock in stock_list[:]:if stock[0]=='4'or stock[0]=='8'or stock[:2]=='68'or stock[0]=='3':
  • 科创板(68开头):波动率大,定价机制不同
  • 北交所(4/8开头):流动性差,机构参与度低
  • 创业板(3开头):虽保留但通过其他条件严格控制

价格限制过滤

python

deffilter_limitup_stock(context, stock_list):return[stock for stock in stock_list if stock in context.portfolio.positions.keys()or last_prices[stock][-1]< current_data[stock].high_limit]
  • 涨停限制:避免追高被套
  • 持仓例外:已持仓的涨停股继续持有享受溢价

上市时间过滤

python

deffilter_new_stock(context, stock_list):return[stock for stock in stock_list ifnot yesterday - get_security_info(stock).start_date < datetime.timedelta(days=375)]
  • 次新股风险:估值泡沫,波动剧烈
  • 稳定期要求:上市满375天,财务数据完整

交易执行算法深度分析

仓位管理策略

等权重分配

python

value = context.portfolio.cash / buy_numfor stock in target_B:if stock notinlist(context.portfolio.positions.keys()):if open_position(stock, value):
  • 风险分散:避免单个股票过度影响组合
  • 再平衡机制:每周调仓实现动态平衡
  • 资金利用:满仓操作,追求收益最大化

调仓逻辑

python

for stock in g.hold_list:if(stock notin target_B)and(stock notin g.yesterday_HL_list):         position = context.portfolio.positions[stock]         close_position(position)
  • 严格纪律:不在目标列表立即卖出
  • 涨停例外:昨日涨停股享受持有特权
  • 动量延续:承认涨停股的短期动量效应

涨停板特殊处理机制

行为金融学基础

python

defcheck_limit_up(context):if current_data.iloc[0,0]< current_data.iloc[0,1]:         log.info("[%s]涨停打开,卖出"%(stock))else:         log.info("[%s]涨停,继续持有"%(stock))

涨停板现象的心理学解释

  • 注意力效应:涨停吸引市场关注
  • 羊群行为:投资者跟风买入
  • 处置效应:获利了结压力在涨停打开时集中释放

策略应对逻辑

  • 尾盘观察:14:00检查,避免盘中波动误判
  • 严格止损:涨停打开立即卖出,锁定收益
  • 动量延续:连续涨停享受超额收益

风险控制体系

系统性风险控制

市场环境识别

通过行业宽度和"搅屎棍"行业监控市场状态:

  • 牛市环境:小盘股普涨,行业宽度扩散
  • 熊市环境:资金避险,"搅屎棍"行业走强
  • 震荡环境:行业轮动加快,需要严格筛选

风格切换预警

当银行、有色等大盘股行业进入强势前列时:

  • 降低仓位:直接空仓,避免风格切换损失
  • 等待时机:直到小盘股友好环境再现

个股风险控制

多层过滤机制

  1. 行业层面:避开不利行业环境
  2. 基本面层面:ROE/ROA质量要求
  3. 技术面层面:均线位置、涨跌停状态
  4. 流动性层面:停牌、ST风险排除

交易执行风险控制

python

set_slippage(FixedSlippage(0))set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003))
  • 零滑点假设:理想化条件,实际需要调整
  • 真实成本:考虑印花税和佣金影响
  • 最小佣金:避免小金额交易成本过高

策略优势与局限

核心优势

  1. 多维度验证:行业、基本面、技术面三重筛选
  2. 行为金融应用:充分利用市场非有效性
  3. 严格风控:多层过滤,系统性风险识别
  4. 中国特色:涨停板策略贴合A股实际

这个策略体现了深度市场理解严格量化纪律的结合,是典型的基于中国特色的多因子选股策略。

最新评论

浏览过的版块

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表