返回列表 发布新帖

小果大qmt聚宽系统

1091 0
发表于 2025-2-12 09:53:54 | 显示全部楼层 阅读模式
小果大qmt聚宽系统
miniqmt教程https://gitee.com/li-xingguo11111/joinquant_trader_miniqmt 作者 全部内容在知识星球
介绍
小果大qmt聚宽系统 小果大 QMT 聚宽跟单系统是一种在金融量化交易领域具有一定创新性和实用性的交易辅助工具,以下是具体介绍:
系统概述
该系统旨在实现聚宽平台的策略与 QMT 平台的对接,使投资者能够在 QMT 平台上跟踪和执行聚宽平台上的优质策略,充分发挥两个平台的优势。 主要功能
策略同步:能够将聚宽平台上的策略实时同步到 QMT 平台,投资者无需手动修改代码或策略,即可在 QMT 上使用聚宽的策略进行交易。 多种跟单模式:支持成交模式、持股模式等多种跟单方式,满足不同投资者的需求。例如,成交模式跟单可按照策略的成交信号进行跟单操作;持股模式跟单则可根据策略的持仓情况来调整自己的持仓。 数据获取与处理:可以从聚宽平台获取相关数据,并在 QMT 平台上进行处理和分析,为交易决策提供数据支持。 风险控制:具备一定的风险控制功能,如设置止损、止盈等参数,帮助投资者控制交易风险。 账户管理:可以对多个交易账户进行管理和监控,方便投资者进行资金管理和风险分散。 优势特点
提高交易效率:通过自动化的跟单系统,减少了人工操作的时间和成本,提高了交易的效率和准确性。 降低技术门槛:对于不熟悉编程和量化交易的投资者来说,使用该系统可以更容易地利用聚宽平台上的优质策略进行交易,降低了参与量化交易的技术门槛。 策略多样性:聚宽平台上拥有丰富的策略资源,投资者可以根据自己的需求和风险偏好选择合适的策略进行跟单,增加了投资的多样性。 灵活性:系统具有一定的灵活性,投资者可以根据自己的需求对跟单参数进行调整和优化,以适应不同的市场环境和交易需求。 应用场景
适合个人投资者:对于那些希望通过量化交易获取收益,但缺乏编程能力和量化交易经验的个人投资者来说,小果大 QMT 聚宽跟单系统提供了一个简单便捷的解决方案。 专业投资机构:一些专业的投资机构也可以利用该系统来拓展投资策略的来源,提高交易的效率和效果,同时降低研发成本。 综上所述,小果大QMT聚宽跟单系统是一款功能强大、易于使用的量化交易辅助工具,它能够帮助投资者更好地利用聚宽平台上的优质策略进行交易,提高交易效率和盈利能力。
软件架构
软件架构说明
安装教程
直接导入大qmt使用
使用说明一服务器使用
1打开服务器连接http://124.220.32.224:8025/ 2输入用户名称就是策略的授权码比如xg_test 3获取实时数据 4历史数据 5清空数据
二聚宽设置
1点击策略列表,随便选择一个策略,建立策略也可以比如我的跟单测试 2把下面的代码放在策略开头就可以,其他的全部不需要改动
'''小果聚宽跟单系统原理替代,继承聚宽的交易函数类读取下单类的函数参数把交易数据发送到服务器把下面的全部源代码复制到聚宽策略的开头就可以实盘前先模拟盘测试一下数据把下面的内容全部复制到策略的开头就可以作者微信15117320079'''import requestsimport jsonimport pandas as pdurl='http://124.220.32.224'port=8025#记得把这个改成自己的一个策略一个,策略的名称找作者建立password='123456'class joinquant_trader:    def __init__(self,url='http://124.220.32.224',port=8025,password='123456'):        '''        获取服务器数据        '''        self.url=url        self.port=port        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@63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad",            "outputs":{"id":"joinquant_trader_table","property":"data@63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad"},            "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@63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad",            "outputs":{"id":"joinquant_trader_table","property":"data@63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad"},            "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 wrapperdef 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 wrapperdef 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 wrapperfrom jqdata import *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)

3设置策略授权码和带我去用户名称保持一样,一个策略一个授权码,授权码要唯一,可以找作者要 保持一样xg_test 和服务器要一样
三聚宽测试测试
1点击测试测试一下 2交易的情况 3对比服务器 4策略源代码
'''小果聚宽跟单系统原理替代,继承聚宽的交易函数类读取下单类的函数参数把交易数据发送到服务器把下面的全部源代码复制到聚宽策略的开头就可以实盘前先模拟盘测试一下数据把下面的内容全部复制到策略的开头就可以作者微信15117320079'''import requestsimport jsonimport pandas as pdurl='http://124.220.32.224'port=8025#记得把这个改成自己的一个策略一个,策略的名称找作者建立password='xg_test'class joinquant_trader:    def __init__(self,url='http://124.220.32.224',port=8025,password='123456'):        '''        获取服务器数据        '''        self.url=url        self.port=port        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@63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad",            "outputs":{"id":"joinquant_trader_table","property":"data@63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad"},            "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@63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad",            "outputs":{"id":"joinquant_trader_table","property":"data@63d85b6189e42cba63feea36381da615c31ad8e36ae420ed67f60f3598efc9ad"},            "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 wrapperdef 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 wrapperdef 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 wrapperfrom jqdata import *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)# 初始化函数,设定基准等等def initialize(context):    # 设定沪深300作为基准    set_benchmark('000300.XSHG')    # 开启动态复权模式(真实价格)    set_option('use_real_price', True)    # 输出内容到日志 log.info()    log.info('初始函数开始运行且全局只运行一次')    # 过滤掉order系列API产生的比error级别低的log    # log.set_level('order', 'error')    ### 股票相关设定 ###    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')    ## 运行函数(reference_security为运行时间的参考标的;传入的标的只做种类区分,因此传入'000300.XSHG'或'510300.XSHG'是一样的)      # 开盘前运行    run_daily(before_market_open, time='before_open', reference_security='000300.XSHG')      # 开盘时运行    run_daily(market_open, time='open', reference_security='000300.XSHG')      # 收盘后运行    run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')## 开盘前运行函数def before_market_open(context):    # 输出运行时间    log.info('函数运行时间(before_market_open):'+str(context.current_dt.time()))    # 给微信发送消息(添加模拟交易,并绑定微信生效)    # send_message('美好的一天~')    # 要操作的股票:平安银行(g.为全局变量)    g.security = '513100.XSHG'## 开盘时运行函数def market_open(context):    log.info('函数运行时间(market_open):'+str(context.current_dt.time()))    security = g.security    # 获取股票的收盘价    close_data = get_bars(security, count=5, unit='1d', fields=['close'])    # 取得过去五天的平均价格    MA5 = close_data['close'].mean()    # 取得上一时间点价格    current_price = close_data['close'][-1]    pre_close=close_data['close'][-2]    # 取得当前的现金    cash = context.portfolio.available_cash    # 如果上一时间点价格高出五天平均价1%, 则全仓买入    if (current_price >pre_close ) and (cash > 0):        # 记录这次买入        log.info("价格高于均价 1%%, 买入 %s" % (security))        # 用所有 cash 买入股票        order_value(security, cash)    # 如果上一时间点价格低于五天平均价, 则空仓卖出    elif current_price < pre_close and context.portfolio.positions[security].closeable_amount > 0:        # 记录这次卖出        log.info("价格低于均价, 卖出 %s" % (security))        # 卖出所有股票,使这只股票的最终持有量为0        order_target(security, 0)       ## 收盘后运行函数def after_market_close(context):    log.info(str('函数运行时间(after_market_close):'+str(context.current_dt.time())))    #得到当天所有成交记录    trades = get_trades()    for _trade in trades.values():        log.info('成交记录:'+str(_trade))    log.info('一天结束')    log.info('##############################################################')

四大qmt实盘设置
1打开导入策略点击编辑输入账户 2输入账户 3点击运行测试一下具体内容看参数说明 4注意是否测试这个参数实盘改成否,测试的时候选择是 5输入授权码和服务器保存一样,多策略用逗号隔开
五挂实盘交易
点击模型交易 点击实盘运行就可以 策略日志 跟单对接交易
六聚宽挂模拟盘
点击模拟交易挂就可以
七全部源代码#encoding:gbk'''声明:源代码只用作学习使用,不做商业用途小果聚宽跟单交易系统作者:小果时间:20240120教程 https://gitee.com/li-xingguo11111/joinquant_trader_miniqmt实盘时间设置在下面的text里面改"交易时间段":4,"交易开始时间":9,"交易结束时间":14,测试时间设置"时间设置":"时间设置********","交易时间段":8,"交易开始时间":0,"交易结束时间":24,"是否参加集合竞价":"否","开始交易分钟":0,实盘需要把txet下面的参数是否测试改成否"是否开启测试":"否",下面的参数测试的时候改成否,实盘改成是"是否开启临时id记录":"是"高频使用循环模式,低频使用定时'''import pandas as pdimport numpy as npimport talibimport requestsimport jsonfrom datetime import datetimeimport mathimport timetext={

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

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