返回列表 发布新帖

量化研究---全新一代索普大QMT雪球交易系统

22 0

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

这套系统的目标是自动跟踪你在雪球平台上创建或关注的投资组合,当这些组合调仓时,系统能自动在你的股票账户中执行相应的买卖操作。其核心流程可以概括为: 获取信号:通过技术手段,获取雪球组合的实时调仓变动。 传递指令:将变动信息传递给QMT量化交易软件。 自动执行:QMT根据接收到的指令,在你的实盘账户中完成下单 主要功能 自动化跟单:核心功能是实现全自动跟单,无需手动操作。一旦雪球组合调仓,你的实盘账户就会同步进行交易。 多策略组合:你可以同时跟随多个雪球组合,或者将雪球跟单与其他策略(如聚宽的量化策略、通达信的短线预警)结合起来,在同一个QMT账户中运行

这个是简单的教程,后面我会给详细的使用教程,点击量化网页下载就导入qmt就可以,需要会员下载,下载前先注册,邀请码找我要http://14.103.193.242:9999/xms_quants.html

http://14.103.193.242:9999/xms_quants.html

用户注册

b1237411865bee2d79f0ab2bd5f35523.png

点击会员下载就可以

e4ca8192385737615469c2a67de3816f.png

有详细的教程点击教程就可以https://gitee.com/quants/big_qmt_xueqiu_trader

https://gitee.com/quants/big_qmt_xueqiu_trader

dd1d39338a60efd1d1965942577a6c38.png

教程就参考网页,我整理直接导入qmt运行,具体怎么样使用参考网页教程

5681cde32ba3265c6429e28b8ae57635.png

05d6501b1d842b3dea388fb2c85d3f49.png

点击导入策略

a06f64e86978e136877b9d2bfbd9e48c.png

源代码版本

802878924567e2ef30f871df754a5aa3.png

设置账户组合代码等

0598b5f2cc40c5bfcd65e23fb4982f5a.png

点击一下运行看看有没有问题,没有问题,代码提示不用管有错误处理

4098c29406308ef97b479700880a02ae.png

挂模型交易就可以

f01dfafb84989b80b8edabac764927f3.png

5fb12c9d8249a81837eaa60b9bf5fbeb.png

调仓一下组合看看

看一下下单分析。获取到的数 b572813fe83030470c91169538c80ca2.png

4fded908f60e4ba3cab6cb78fb4fd805.png

下面是安比例调整买卖分析

bcb7dc67d3808336cc97343b32c61c40.png

下单的结果

fb29ffb03d683645820987e5a188ed11.png

失败的当前时间不给委托正常的

4f38642c81d607cff12c2c683b0e9e22.png

实时分析运行可以挂服务器,这里委托检测我包含了废单避免废单一直下,安教程修改交易时间,4,9,14就没有废单这个问题

79e5a164d8c10cde1c2c832429b23a3b.png

大qmt不熟悉我还开发了mini板块的

7eca631728533a788dd90856d4028e44.png

121930fab181d0a11529d553310adcfd.png

源代码我全部上传了知识星球可以下载,网页邀请码找我要就可以

6a04a29a1cb4d5683db2b5b728ba2558.jpg

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

5c2b5d97fa780b2332c7bc29dd8dc798.jpg

需要的可以找我开户申请使用系统

5f344e7ccae849e169adea60c5a2da59.png

部分源代码框架参考,完整代码知识星球,网页也可以下载

#encoding:gbk
'''
索普量化雪球交易系统源代码
先模拟盘测试熟悉
作者:索普量化
微信:xms_quants1
修改账户参数就可以改成自己的
"账户":"222",
数值  描述
-1  无效(只对于algo_passorder起作用)
0   卖5价
1   卖4价
2   卖3价
3   卖2价
4   卖1价
5   最新价
6   买1价
7   买2价(组合不支持)
8   买3价(组合不支持)
9   买4价(组合不支持)
10  买5价(组合不支持)
'''
import pandas as pd
import numpy as np
import talib
import time 
from datetime import datetime
import math
import pandas as pd
import requests
import json
import random
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
pd.set_option('display.float_format', lambda x: '%.2f' % x)
#记录交易数据
class A:
    pass
a=A()
def init(c):
    c.text={
        "策略名称":"索普量化雪球交易系统源代码",
        "标记":"作者:索普量化,微信:xms_quants1",
        "账户类型":"STOCK",
        "账户":"55001947",
        "授权码":"0xd5e814335dd5e19830fd29e14462070f4716b85fea8c34da8378dd0b707e1893607490ea1eeaba8b7c2304ebcccbae30bef3c42e3d262a04268b8894362d977f76f691526c8f11e49822b79974c3b1954b4182647597b76b29be63be246109cd57f60cf0c7d57c1ff80240e67b001f98c536dd06927ceda8d04b932055a49ff0abbd",
        "雪球U值":"1342909666",
        "雪球token":"40740f5997af8ab74f171faf60502b8158c827ac",
        "是否测试":"否",
        "测试长度":2,
        "错误随机等待时间":15,
        "买入价格编码":4,
        "卖出价格编码":6,
        "买入黑名单":"600031.SH,600111.SH",
        "卖出黑名单":"600031.SH,600111.SH",
        "剔除代码":"688,40",
        "组合名称":"测试1",
        "组合代码":"ZH3368671",
        "组合金额模式说明":"总金额/自定义/比例",
        "组合金额模式":"自定义",
        "组合比例":"0.1,0.1",
        "组合金额":"50000,60000",
        "不同组合间隔时间":1,
        "不成交撤单时间":300,
        "时间设置":"时间设置********",
        "交易时间段":4,
        "交易开始时间":9,
        "交易结束时间":24,
        "是否参加集合竞价":"是",
        "开始交易分钟":0,
        "通知发送方式说明":"QQ/企业微信/钉钉",
        "通知发送方式":"QQ",
        "发送QQ":"1153@qq.com",
        "接收QQ":"153@qq.com",
        "QQ掩码":"jjfgdhklgguebdje",
        "企业微信token":"1,1",
        "钉钉token":"1,1"
        
    }
    #账户
    c.account=c.text['账户']
    #账户类型
    c.account_type=c.text['账户类型']
    if c.account_type=='stock' or c.account_type=='STOCK':
        c.buy_code=23
        c.sell_code=24
    else:
        #融资融券
        c.buy_code=33
        c.sell_code=34
    c.buy_price_code=c.text['买入价格编码']
    c.sell_price_code=c.text['卖出价格编码']
    c.st_name=c.text['策略名称']
    c.not_sell_list=c.text['卖出黑名单'].split(',')
    #循环模式3秒
    c.run_time("get_updata_trader","3nSecond","2024-07-25 13:20:00")
    #撤单
    cacal_time=c.text['不成交撤单时间']
    c.run_time("run_order_trader_func","{}nSecond".format(cacal_time),"2024-07-25 13:20:00")
def handlebar(c):
    #run_tarder_func(c)
    pass
    
def get_trader_adjust_data(c,name='西蒙斯测试',zh='ZH3368671'):
    '''
    获取交易
    '''
    test=c.text['是否测试']
    n=c.text['测试长度']
    buy_not_list=c.text['买入黑名单'].split(',')
    now_date=str(datetime.now())[:10]
    u=c.text['雪球U值']
    token=c.text['雪球token']
    sp_time=c.text['错误随机等待时间']
    now_date=str(datetime.now())[:10]
    api=xueqie_data(u=u,xq_a_token=token,assembly_id=zh)
    stats,df=api.get_hist_move()
    if stats==False:
        random_n=random.randint(1,sp_time)
        time.sleep(random_n)
        print(name,'速度太快随机等待时间{}****************'.format(random_n))
    else:
        pass
    if df.shape[0]>0:
        df['updated_at']=pd.to_datetime(df['updated_at'],unit='ms')
        df['created_at']=pd.to_datetime(df['created_at'],unit='ms')
        df['updated_at']=df['updated_at'].apply(lambda x:str(x)[:10])
        df['id']=df['id'].astype(str)
        df['更新时间']=df['updated_at']
        df['名称']=df['stock_name']
        df['证券代码']=df['stock_symbol'].apply(lambda x: str(x)[2:]+'.'+str(x)[:2])
        df['买入黑名单']=df['证券代码'].apply(lambda x: '是' if x in buy_not_list else '不是')
        df['prev_weight_adjusted']=df['prev_weight_adjusted'].fillna(0)
        df['调整比例']=df['target_weight']-df['prev_weight_adjusted']
        df['交易类型'] =df['调整比例'].apply(lambda x: 'buy' if x > 0 else '不变' if x == 0 else 'sell')
        df=df.sort_values(by='created_at',ascending=True)
        df['组合名称']=name
        df['组合id']=zh
        df['投资备注']=c.st_name+','+name+','+df['id']
        df=df[['名称',"证券代码",'调整比例','交易类型','id',
                '组合名称','组合id','投资备注','更新时间']]
        df['买入黑名单']=df['证券代码'].apply(lambda x :"是" if x in buy_not_list else '不是')
        df=df[df['买入黑名单']=='不是']
        if test=='是':
            print('开启测试模型,实盘改成是不开启测试')
            df=df[-n:]
        else:
            df=df[df['更新时间']==now_date]
    else:
        df=pd.DataFrame()
    if df.shape[0]>0:
        print('*****{}今天有跟单数据*********'.format(now_date))
        print(df)
    else:
        print('*****{}今天没有跟单数据*********'.format(now_date))
    return df
def select_data_type(stock='600031.SH'):
    '''
    选择数据类型
    '''
    stock=str(stock)
    if stock[:2] in ['11','12'] or stock[:3] in ['123','110','113','123','127','128','118','132','120']:
        return 'bond'
    elif stock[:2] in ['51','15','50','16','18','52']:
        return 'fund'
    else:
        return 'stock'
def get_price(c,stock='512480.SH'):
    '''
    获取最新价格
    '''
    tick=c.get_full_tick(stock_code=[stock])
    price=tick[stock]['lastPrice']
    return price
def user_def_order_percent(c,
        name='西蒙斯测试',
        total=50000,
        trader_type='buy',
        stock='513100.SH',
        price=1.78,
        ratio=0.1):
    '''
    自定义组合总金额百分比调整函数
    '''
    volue=total*ratio
    amount=volue/price
    amount=adjust_amount(c,stock,amount)
    buy_value=amount*price
    if amount>=10:
        account=get_account(c,c.account,c.account_type)
        position=get_position(c,c.account,c.account_type)
        if position.shape[0]>0:
            position=position[position['证券代码']==stock]
            if position.shape[0]>0:
                hold_amount=position['持仓量'].tolist()[-1]
                av_amount=position['可用数量'].tolist()[-1]
            else:
                hold_amount=0
                av_amount=0
        else:
            hold_amount=0
            av_amount=0
        av_cash=account['可用金额']
        if trader_type=='buy':
            if check_is_buy(c,c.account,c.account_type,stock=stock,amount=amount,price=price):
                print('{}{} 组合资金{} 调整比例{} 买入 {} '.format(name,stock,total,ratio,amount))
                return trader_type,amount
            else:
                print('{} {} 买入不了{} 组合资金{} 调整比例{},可用金额{} 小于买入市值{}'.format(name,stock,amount,total,ratio,av_cash,buy_value))
                return '',0
        elif  trader_type=='sell':
            if check_is_sell(c,c.account,c.account_type,stock=stock,amount=amount):
                print('{} {} 组合资金{} 调整比例{} 卖出{} '.format(name,stock,total,ratio,amount))
                return trader_type,amount
            else:
                print('{} {} 卖出不了,可用数量{} 小于卖出数量{}'.format(name,stock,av_amount,amount))
                return '',0
        elif trader_type=='不变':
            print('{} 没有变化'.format(stock))
            return '',0
        else:
            print('{} 未知道的交易类型'.format(stock))
            return '',0
    else:
        print('{} 低于最低交易数量'.format(stock))
        return '',0

回复

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

客服专线

400-080-8112

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