返回列表 发布新帖

量化研究---推出全新一代的量化交易系统

24 0

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

这几天星期在前面的优化代码的框架,上线了miniqmt,大qmt的工具策略,同时写了详细的教程,在一个一个的代码检查完善,很多代码还是我2年前写的代码,以前写的代码太烂了,我在建立量化网页,把策略全部完善上传量化网页,目前完善了全部的工具策略,明天完善一下日内T0的模块

量化网页http://14.103.193.242:9999/xms_quants.html

http://14.103.193.242:9999/xms_quants.html

使用前需要先注册,邀请码找就可以

2b1db9e81379d989a2c4ef7bc3993208.png

b7245e6bf5117b89a16b4077f35f2da9.png

普通用户注册

29b14d67ed08b29ba0037f97135d5852.png

会员账户注册

98487cce1b3d25361bb25c19b44f64ed.png

我目前完善了全部的工具策略,还在弄东方财富发实盘,bigquat等九完成了,目前完成的大qmt策略给了详细的使用教程点击就可以

615aca6c763e281088abe8aaeccc5a34.png

05a8070d17a801fd566204727eb4d753.png

mini的

41aff3b43a6acd2803a2dabf78ff1c87.png

mini的比较复杂

43a347970f3fb7a2b60207a2e9800582.png

590dd690e7dde2324a4072237582d47b.png

cae32776f3c93f58d97d702285f39f8c.png

明天我会写每一个模块的使用教程,也可以参考网页的教程,我全部上传了,网页的邀请码找我要就可以,全部内容上传了知识星球下载就可以

e3e74283f79e136cabad51b9296d2a57.jpg

不懂的问我就可以,网页的邀请码找我要就可以,备注邀请码,找我朋友开户可以申请使用量化系统

ab535437eef3607d50f9889f06cadf67.jpg

感受一下miniqmt的框架,底层是我开发的框架,实盘还是非常复杂的

from trader_tool.unification_data import unification_data
from trader_tool.trader_frame import trader_frame
import pandas as pd 
import time
from datetime import datetime
import schedule
import json
from trader_tool.base_func import base_func
import os
from trader_tool.xg_tdx import xg_tdx
from trader_tool.seed_trader_info import seed_trader_info
import random
import math
from trader_tool.decode_trader_password import decode_trader_password
class joinquant_trader:
    def __init__(self,
                trader_tool='ths',
                exe='C:/同花顺软件/同花顺/xiadan.exe',
                tesseract_cmd='C:/Program Files/Tesseract-OCR/tesseract',
                qmt_path='D:/国金QMT交易端模拟/userdata_mini',
                qmt_account='55009640',
                qmt_account_type='STOCK',
                data_api='qmt'):
        '''
        索普通达信文本预警交易系统
        作者:索普量化
        微信:xms_quants1
        时间:20251024
        '''
        print('################################################################################################')
        print("""
        风险提示:
        1.以下为量化交易模型,主要内容来源于互联网学习加工,分享的核心是交易思路框架,标的范围和参数仅为学习输出的举例,不能直接运用于交易。
        2.思路框架仅供学习参考,各位投资者朋友需根据自己的需求搭建自己的交易体系和具体策略。
        3.量化交易过程中可能涉及数据准确性、系统BUG、操作不当等风险,交易之前请务必自行充分学习。股市有风险,投资需谨慎和自主决策!
              """)
        print('################################################################################################')
        self.data_api=data_api
        self.exe=exe
        self.tesseract_cmd=tesseract_cmd
        self.trader_tool=trader_tool
        self.qmt_path=qmt_path
        self.qmt_account=qmt_account
        self.qmt_account_type=qmt_account_type
        order_frame=trader_frame(
            trader_tool=self.trader_tool,
            exe=self.exe,
            tesseract_cmd=self.tesseract_cmd,
            qmt_path=self.qmt_path,
            qmt_account=self.qmt_account,
            qmt_account_type=self.qmt_account_type,
            )
        self.trader=order_frame.get_trader_frame()
        data=unification_data(trader_tool=self.trader_tool,data_api=self.data_api)
        self.data=data.get_unification_data()
        self.path=os.path.dirname(os.path.abspath(__file__))
        self.password=decode_trader_password()
        with open('{}/策略配置.json'.format(self.path),'r+',encoding='utf-8') as f:
            com=f.read()
        text=json.loads(com)
        test=text['是否测试']
        if test=='是':
            print('开启测试模型,实盘记得关闭')
        else:
            self.del_text_data()
    def connact(self):
        '''
        链接交易
        '''
        try:
            self.trader.connect()
            return True
        except Exception as e:
            print("运行错误:",e)
            print('{}连接失败'.format(self.trader_tool))
            return False
    def save_data(self):
        account=self.trader.balance()
        account.to_excel(r'{}/账户数据/账户数据.xlsx'.format(self.path))
        print(account)
        position=self.trader.position()
        position.to_excel(r'{}/持股数据/持股数据.xlsx'.format(self.path))
        print(position)
    def del_text_data(self):
        '''
        清空通达信数据接收最新的数据
        '''
        with open('{}/策略配置.json'.format(self.path),'r+',encoding='utf-8') as f:
            com=f.read()
        text=json.loads(com)
        path=text['通达信警告保存路径']
        try:
            with open(r'{}'.format(path),'r+',encoding='utf-8') as f:
                com=f.truncate(0)
            f.close
        except Exception as e:
            print(e)
    def select_data_type(self,stock='600031'):
        '''
        选择数据类型
        '''
        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 adjust_stock(self,stock='600031.SH'):
        '''
        调整代码
        '''
        if stock[-2:]=='SH' or stock[-2:]=='SZ' or stock[-2:]=='sh' or stock[-2:]=='sz':
            stock=stock.upper()
        else:
            if stock[:3] in ['600','601','603','605','688','689',
                ] or stock[:2] in ['11','51','58']:
                stock=stock+'.SH'
            else:
                stock=stock+'.SZ'
        return stock
    def get_price(self,stock='513100'):
        '''
        获取价格
        '''
        price=self.data.get_spot_data(stock=stock)['最新价']
        return price
    def get_hist_tdx_text(self,path='C:/Users/lxg123456/Desktop/预警.txt'):
        '''
        日线预警数据
        '''
        with open('{}/策略配置.json'.format(self.path),'r+',encoding='utf-8') as f:
            com=f.read()
        text=json.loads(com)
        columns_name=text['数据行名称'].split(',')
        try:
            with open(r'{}'.format(path),'r+',encoding='utf-8') as f:
                com=f.readlines()
        except Exception as e:
            with open(r'{}'.format(path),'r+',encoding='gbk') as f:
                com=f.readlines()
        result_list=[]
        if len(com)<0:
            df=pd.DataFrame()
            print('没有警告内容****')
        else:
            for i in com:
                result_list.append(str(i).strip().split('\t'))
            df=pd.DataFrame(result_list)
            if df.shape[0]>0:
                df.columns=columns_name
            else:
                df=pd.DataFrame()
        return df
    def get_tdx_spot_data(self,path='C:/Users/lxg123456/Desktop/实时预警.txt'):
        '''
        读取实时预警数据
        #["证券代码","证券名称","预警时间","价格","涨跌幅","成交量","买卖条件"]
        #['信号日期', '信号时间', '股票代码', '4', '方向', '5', '触发价格', '7', '8', '处理时间']
        '''
        with open('{}/策略配置.json'.format(self.path),'r+',encoding='utf-8') as f:
            com=f.read()
        text=json.loads(com)
        columns_name=text['数据行名称'].split(',')
        try:
            with open(r'{}'.format(path),'r+',encoding='utf-8') as f:
                com=f.readlines()
        except Exception as e:
            with open(r'{}'.format(path),'r+',encoding='gbk') as f:
                com=f.readlines()
        result_list=[]
        if len(com)>0:
            for j in com:
                j=j.strip()
                result=j.split('|')[:-1]
                if len(result)==11:
                    result_list.append(result)
                else:
                    pass
            df=pd.DataFrame(result_list)
            columns=['信号日期',1,'证券代码',3,'买卖条件',5,'价格',7,8,'触发时间','处理时间']
            df.columns=columns
            df['信号日期']=df['信号日期'].apply(lambda x: str(x)[:4]+'-'+str(x)[4:6]+'-'+str(x)[-2:])
            df['信号日期']=df['信号日期']+' '+df['触发时间']
            df['证券名称']=df['证券代码']
            df['涨跌幅']=None
            df['成交量']=None
            df['预警时间']=df['信号日期']
            select=columns_name
            df=df[select]
        else:
            df=pd.DataFrame()
        return df
    def params_tdx_text(self):
        '''
        分析通达信内容
        '''
        with open('{}/策略配置.json'.format(self.path),'r+',encoding='utf-8') as f:
            com=f.read()
        text=json.loads(com)
        path=text['通达信警告保存路径']
        tarder_type=text['交易品种']
        del_list=text['剔除预警标开头'].split(',')
        data_type=text['预警类型']
        st_name=text['策略名称']
        buy_con=text['买入警告条件'].split(',')
        buy_name=text['买入持股同步板块'].split(',')
        buy_name_dict=dict(zip(buy_con,buy_name))
        try:
            if data_type=='实时预警':
                print('实时预警***********************')
                df=self.get_tdx_spot_data(path)
            else:
                print('日线预警***********************')
                df=self.get_hist_tdx_text(path)
        except Exception as e:
            print(e,'有错误,检查预警类型和文件是不是一样')
            df=pd.DataFrame()
        if df.shape[0]>0:
            now_date=str(datetime.now())[:10]
            df['时间']=df['预警时间'].apply(lambda x:str(x)[:10])
            test=text['是否测试']
            if test=='是':
                print('开启测试模式实盘记得关闭**********')
                df=df
            else:
                df=df[df['时间']==now_date]
            df['证券代码']=df['证券代码'].apply(lambda x:str(x)[:6])
            #加上时间参数可以盘中多次交易
            #df['投资备注']=c.st_name+','+df['证券代码']+','+df['买卖条件']+','+df['预警时间']
            df['板块英文']=df['买卖条件'].apply(lambda x: buy_name_dict.get(x,'QT'))
            df['投资备注']=st_name+df['证券代码']+df['板块英文']
            df['同步板块']=df['买卖条件'].apply(lambda x: buy_name_dict.get(x,'QT'))
            df=df.drop_duplicates(subset=['投资备注'],keep='last')
        else:
            df=pd.DataFrame()
        if df.shape[0]>0:
            df['品种']=df['证券代码'].apply(lambda x:self.select_data_type(x))
            df['选择']=df['品种'].apply(lambda x:'是' if x in tarder_type else '不是')
            df=df[df['选择']=='是']
            df['剔除']=df['证券代码'].apply(lambda x: '是' if str(x).startswith(tuple(del_list)) else '不是')
            if df.shape[0]>0:
                df=df[df['剔除']=='不是']
            else:
                df=pd.DataFrame()
        else:
            df=pd.DataFrame()
        return df
    def get_**ysis_buy_sell_data(self):
        '''
        分析买卖数据
        '''
        with open('{}/策略配置.json'.format(self.path),'r+',encoding='utf-8') as f:
            com=f.read()
        text=json.loads(com)
        buy_condi=text['买入警告条件'].split(',')
        sell_condi=text['卖出警告条件'].split(',')
        df=self.params_tdx_text()
        if df.shape[0]>0:
            df['买入']=df['买卖条件'].apply(lambda x: '是' if x in buy_condi else '不是')
            df['卖出']=df['买卖条件'].apply(lambda x: '是' if x in sell_condi else '不是')
        else:
            df=pd.DataFrame()
        return df
    def check_not_trader_data(self):
        '''
        检查单子是不是委托了
        包含了废单避免废单一直下
        '''
        with open('{}/策略配置.json'.format(self.path),'r+',encoding='utf-8') as f:
            com=f.read()
        text=json.loads(com)
        st_name=text['策略名称']
        trader_log=self.trader.today_entrusts()
        if trader_log.shape[0]>0:
            trader_log['策略']=trader_log['委托备注'].apply(lambda x: str(x)[:len(st_name)])
            trader_log=trader_log[trader_log['策略']==st_name]
            if trader_log.shape[0]>0:
                maker_list=trader_log['委托备注'].tolist()
            else:
                maker_list=[]
        else:
            maker_list=[]
        
        return maker_list
        
    def get_trader_stock_data(self):
        '''
        获取股票池数据
        '''
        with open('{}/策略配置.json'.format(self.path),'r+',encoding='utf-8') as f:
            com=f.read()
        text=json.loads(com)
        tarder_type=text['交易品种'].split(',')
        del_list=text['剔除预警标开头'].split(',')
        hold_limit=text['持股限制']
        #读取持股
        hold_stock=self.trader.position()
        if hold_stock.shape[0]>0:

回复

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

客服专线

400-080-8112

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