15天搭建ETF量化交易系统Day8—强化自动交易模块

news2024/11/17 16:20:55

56a83e5bb4430535c21669d9c1227826.png

搭建过程

22b9dafa073ba298462a223a51371632.png

每个交易者都应该形成一套自己的交易系统。

很多交易者也清楚知道,搭建自己交易系统的重要性。现实中,从0到1往往是最难跨越的一步。
授人鱼不如授人以渔,为了帮助大家跨出搭建量化系统的第一步,我们决定推出这个主题系列。
这个系列中,我们用Python从0开始一步步搭建出一套ETF量化交易系统(选择ETF标的是因为对于普通交易者来说,ETF相对于选强势股难度要小,而且没有退市风险)。大家可以跟随着我们的实现路径来一起学习,从过程中掌握方法。
掌握了方法之后,你可以换成期货系统、比特币系统、美股系统,然后在实战中不断去完善自己的系统了。
搭建一套ETF量化交易系统涉及多个模块和组件的协同工作,包括数据源模块、量化策略模块、可视化模块、数据库模块、回测评估模块、自动交易模块等等。
DAY1链接如下:15天搭建ETF量化交易系统Day1—数据源模块
DAY2链接如下:15天搭建ETF量化交易系统Day2—图形显示模块
DAY3链接如下:15天搭建ETF量化交易系统Day3—上手经典回测框架
DAY4链接如下:15天搭建ETF量化交易系统Day4—玩转海龟交易策略
DAY5链接如下:15天搭建ETF量化交易系统Day5—打造实盘量化机器人
DAY6链接如下:15天搭建ETF量化交易系统Day6—打通同花顺自动交易
DAY7链接如下:15天搭建ETF量化交易系统Day7—全自动化交易系统
在量化系统自动交易时,我们已经实现了最基本的一些交易操作,比如:买入股票、卖出股票、查询当前账户、查询持仓个股等等。
但是,实际上有更复杂的场景,比如下单后无法成交等。
DAY8我们需要对“自动交易模块”增加一些扩展的功能来满足更复杂的需求。

6f4c929340d835e2b7e5beb80e18becd.png

扩展功能

f106eff07592e08496320bc91e7a7e29.png

在下单价格上叠加滑点。

在下单时,由于市场价格变动、流动性不足等各方面因素,会导致下单的价格和实际价格之间出现差异,这个就是所谓的滑点(Slippage) 。

比如,在快速上涨的市场中,下达买入订单时,当前价格已经上涨;在快速下跌的市场中,下达卖出订单时,当前价格已经下跌。

当然,滑点也有可能往自己有利的方向滑动,比如在波动较大的市场中,现价会低于下单的买入价格,或者高于下单的卖出价格。

因此,在进行实盘交易时,我们必须要关注滑点的影响。

我们提供设置滑点的接口:

def add_slippage(self, price=1.11, trader_type='buy'):    '''
    在价格基础上增加滑点
    '''
    if trader_type == 'buy':
        price = price * (1+self.slippage)      
    else:
        price = price * (1-self.slippage)     
    return price

检查是否是交易时间,未开盘、已收盘、周末时间不进行交易。

def check_is_trader_period(self):
    '''
    检测是不是交易时间
    '''
    cur_time = datetime.now() # 当前时间
    start_time = datetime(cur_time.year, cur_time.month, cur_time.day, 9, 30)
    end_time = datetime(cur_time.year, cur_time.month, cur_time.day, 15, 0)


    if cur_time.weekday() >= 5: # 5代表星期六,6代表星期日  
        print(u"周末,时间{0}".format(cur_time.strftime("%Y-%m-%d_%H:%M:%S")))
        return False  
    if (cur_time > start_time) and (cur_time < end_time) :
        print(u"执行一次,时间{0}".format(cur_time.strftime("%Y-%m-%d_%H:%M:%S")))
        return True
    else:
        print(u"休息一下,时间{0}".format(cur_time.strftime("%Y-%m-%d_%H:%M:%S")))
        return False

检查是否有足够资金可以买入。当资金不足时需要考虑减少买入数量,或者选择价格更低的股票买入。

def check_stock_is_av_buy(self,stock='128036',price='156.700',amount=10, hold_limit=100):
    '''
    检查是否可以买入
    '''
    #stock=self.adjust_stock(stock=stock)
    price=float(price)
    buy_value=price*amount


    cash_df=self.get_balance()
    hold_data=self.get_position()
    "篇幅有限,此处省略"

检查是否有足够仓位可以卖出。

def check_stock_is_av_sell(self,stock='128036',amount=10):
        '''
        检查是否可以卖出
        '''
        hold_data=self.get_position()
        "篇幅有限,此处省略"

下单个股后,查询当日委托中个股的成交情况。每次下单后,首先要确认订单是否加入到委托列表中。其次要监测委托单是否已经成交。如果长时间无法成交,可以考虑是否要撤单,是否要修改交易单。

def check_entrusts_order(self, stock='513030', trader_type='买入'):
    '''
    检查委托单中个股成交情况
    '''
    df=self.today_entrusts()
    if df.shape[0]>0:
        df=df[df['证券代码']==stock]
        if df.shape[0]>0:
            df1=df[df['操作']==trader_type]
            return true, df1
        else:
            print('{} 没有委托生成!'.format(stock))
            return False,'{} 没有委托生成!'.format(stock)
    else:
        print('今日无委托单!')
        return False,'今日无委托单!'

提交订单后,支持撤单。撤单时,可以一次全撤单,也可以根据合同编号把指定的委托单撤除。

def cancel_entrust(self, tarder_type='全撤'):
    '''
    撤单buy/sell 获取的 entrust_no
    '''
    self.user.refresh()
    if tarder_type=='全撤':
        self.user.cancel_all_entrusts()
    else:
        self.user.cancel_entrust(tarder_type)

一键清仓。一键清仓功能可以让我们在市场行情不利或达到预期收益时,迅速退出市场,避免进一步的损失或锁定收益。

def clear_all_position(self):
    pass
    "篇幅有限,此处省略"

92a07a3f5605e0e561f880e62bfb23ce.png

封装成类

9169cced5e4b45d5e7f8354bfed61ed3.png

之前我们把基础交易的功能封装成一个类,以供系统整体的调用。类名为ThsTrader,其中包括了“连接客户端”、“获取资金状况”、“获取当前仓位”、“查询当日成交”、“买入”、“卖出”等方法。

接下来,我们把本期扩展的功能添加到这个类中,丰富类的功能。

class ThsTrader:


    def __init__(self,
                exe=r'C:\同花顺软件\同花顺\xiadan.exe',
                tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract',
                is_slippage=True,
                slippage=0.01):
        pass


    def add_slippage(self, price=1.11, trader_type='buy'):
        '''
        在价格基础上增加滑点
        '''
        pass


    def check_is_trader_period(self):
        '''
        检测是不是交易时间
        '''
        pass
        
    def get_balance(self):
        '''
        获取资金状况
        '''
        pass


    def get_position(self):
        '''
        获取持股
        '''
        pass


    def clear_all_position(self):
        '''
        一键清仓
        '''   
        pass
   
    def today_trades(self):
        '''
        当日成交
        '''
        pass


    def today_entrusts(self):
        '''
        当日委托
        '''
        pass


    def cancel_entrust(self, tarder_type='全撤'):
        '''
        撤单buy/sell 获取的 entrust_no
        '''
        pass
            
    def check_entrusts_order(self, stock='513030', trader_type='买入'):
        '''
        检查委托单中个股成交情况
        '''
        pass


    def check_stock_is_av_sell(self,stock='128036',amount=10):
        '''
        检查是否可以卖出
        '''
        pass
 
    def check_stock_is_av_buy(self,stock='128036',price='156.700',amount=10, hold_limit=100):
        '''
        检查是否可以买入
        '''
        pass


    def make_buy(self, security='600031', price=16.5, amount=100):
        pass


    def make_sell(self, security='300780', price=14, amount=100):
        pass


    def connect(self, client='universal_client'):
        pass


    def exit(self):
        '''
        退出
        '''
        pass

4349a67bcfe6c3d2bd0489120f016abd.png

总结

e3ffff7e8e60aefc6d078a876fd41a68.png

有了更强大的交易模块之后,我们的系统当然可以应对更复杂的交易场景了。接下来我们继续完善这个系统,打造一个可以赚钱的ETF交易系统。!

说明

此系列为连载专栏,完整代码会上传知识星球《玩转股票量化交易》!作为会员们的学习资料。

想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利!

非星球会员需要的话,需要单独联系我购买!

知识星球介绍点击:知识星球《玩转股票量化交易》精华内容概览

fc3156cb7ea5c4f130d6b1ec18f04744.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1838920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

硬盘分区无法访问:深度解析与解决之道

一、硬盘分区无法访问的现象描述 在日常使用电脑的过程中&#xff0c;有时会遇到硬盘分区无法访问的情况。这通常表现为双击分区时系统提示“无法访问”、“磁盘未格式化”或“需要格式化”等错误消息&#xff0c;导致分区内的文件无法读取或操作。这种情况可能会给用户带来极…

echarts dataZoom用按钮代替鼠标滚轮实现同样效果

2024.06.19今天我学习了echarts dataZoom如何用按钮来控制放大缩小的功能&#xff0c; 效果如下&#xff1a; 通过控制按钮来实现图表放大缩小数据的效果。 步骤如下&#xff1a; 一、写缩放按钮&#xff0c;以及图表数据。 二、设置初始位置的变量&#xff0c;我这边是七个…

【前端项目笔记】3 用户管理

用户管理相关功能实现 涉及表单、对话框、Ajax数据请求 基本页面 用户列表开发 在router.js中导入Users.vue 解决用户列表小问题 选中&#xff08;激活&#xff09;子菜单后刷新不显示高亮 给二级菜单绑定单击事件&#xff0c;点击链接时把对应的地址保存到sessionSto…

WPS相同字体但是部分文字样式不一样解决办法

如下图&#xff0c;在使用wps编辑文档的时候发现有些电脑的文字字体很奇怪&#xff0c;但是把鼠标移到这个文字的位置&#xff0c;发现它和其他正常文字的字体是一样的&#xff0c;都是仿宋_GB2312 正常电脑的文字如下图所示 打开C:\Windows找到Fonts这个文件夹 把仿宋_GB2312这…

【免费API推荐】:解锁无限创意,让您的应用更具竞争力(8)

热门高效的免费实用类API是当今开发者们追逐的宝藏。这些API提供了各种热门功能和服务&#xff0c;能够帮助开发者轻松地为应用程序增添实用性和吸引力。无论是人脸识别、自然语言处理、机器学习还是图像处理&#xff0c;这些热门高效的免费API提供了强大的功能和高效的性能&am…

格雷母线技术革新:推动斗轮堆取料机进入精准操作时代

随着工业4.0时代的到来&#xff0c;智能化、自动化已成为工业发展的必然趋势。特别是在港口、电力、冶金等行业中&#xff0c;散料装卸机械的智能化水平直接关系到整个生产流程的效率与安全。斗轮堆取料机作为这些行业中的关键设备&#xff0c;其操作方式的革新显得尤为重要。 …

Apple Watch开发入门知识,还是很有必要的

随着现在 Apple 生态圈的发展&#xff0c;越来越多的 App 会把自己的简化版从 iOS 迁移至 WatchOS&#xff08;支付宝、微信、手Q、头条、QQ音乐、网易云音乐等等&#xff0c;都有Watch版App&#xff09;。官方开发文档&#xff1a;Setting up a watchOS project | Apple Devel…

NPDP含金量、考试内容、报考要求、适合人群?

01.NPDP核心价值解读 NPDP认证的核心价值在于整合产品开发管理的理论与实践&#xff0c;包含新产品开发策略、研发流程管理、市场研究、销规划、团队管理、项目管理等等&#xff0c;理论体系和知识内容穿插在产品发展的全过程。 对于职场打工人来说&#xff0c;拥有NPDP证书证…

csrf+xss组合拳

csrfxss组合拳 一、环境搭建 靶场cms文章管理系统 二、流程开始 这是系统前端 系统管理后台 而我们要打到后台管理员的cookie&#xff0c;结合前端存储型的xss完全可以实现&#xff0c;那后端怎么被打到cookie呢&#xff0c;我们来从这里添加用户开始分析数据包来说明 看看…

【CT】LeetCode手撕—手撕快排

目录 题目1-思路-快排1-1 快排的核心思想快速排序算法步骤优美的调整区间 1-2 ⭐快排的实现 2- 实现⭐912. 排序数组——题解思路 3- ACM 实现 题目 原题连接&#xff1a;912. 排序数组 1-思路-快排 1-1 快排的核心思想 选择一个基准 基准左侧的元素都小于该元素基准右侧的元…

乾坤微服务的使用

前言&#xff1a; 在这里整理下用乾坤来开发微服务的一些资料。 使用好处&#xff1a; 使用乾坤可以实现什么效果呢&#xff1f;众所周知&#xff0c;前端的框架五花八门&#xff0c;react/vue/angular等各领风骚&#xff0c;那么如果我们有需要把不同技术栈的项目整合起来&…

为何Proteus用户争相拥抱SmartEDA?揭秘背后的强大吸引力!

在电路设计与仿真领域&#xff0c;Proteus一度以其稳定性能和丰富功能赢得了众多用户的青睐。然而&#xff0c;近年来&#xff0c;越来越多的Proteus用户开始转向SmartEDA&#xff0c;这一新兴电路仿真软件正迅速崭露头角&#xff0c;成为行业内的翘楚。那么&#xff0c;究竟是…

MySQL数据库的列类型

数值 tinyint 十分小的数据 1个字节 smallint 较小的数据 2个字节 mediumint 中等大小的数据 3个字节 int 标准的整数 4个字节&#xff08;常用&#xff09; bigint …

ARM架构简明教程

目录 一、ARM架构 1、RISC指令集 2、ARM架构数据类型的约定 2.1 ARM-v7架构数据类型的约定 2.2 ARM-v8架构数据类型的约定 3、CPU内部寄存器 4、特殊寄存器 4.1 SP寄存器 4.2 LR寄存器 4.3 PC寄存器 二、汇编 1、汇编指令&#xff08;常用&#xff09; 2、C函数的…

屏蔽房是做什么用的?为什么需要定期检测?

屏蔽房对于不了解的人来说&#xff0c;可能光看名字不知道是做什么的&#xff0c;但是对于一些企业或者机构&#xff0c;却是再熟悉不过的了。和名字一样&#xff0c;屏蔽房是对空间内的信号以及一些外界环境条件进行隔绝&#xff0c;在一些有特殊要求的企业机构中&#xff0c;…

刚刚发布!这4本期刊已剔除SCI收录,附完整目录下载

科睿唯安于6月19日更新了SCIE、SSCI、AHCI、ESCI四大数据库最新收录期刊目录。 2024年第一版——2024年1月24日更新 2024年第二版——2024年2月19日更新 2024年第三版——2024年3月18日更新 2024年第四版——2024年4月15日更新 2024年第五版——2024年5月20日更新 2024年…

疯狂买买买!你的支付环境真的安全吗?

在日常生活中&#xff0c;移动电话为我们带来了更多的方便。然而&#xff0c;我们在享受手机支付的便捷之余&#xff0c;也应充分认识到风险&#xff0c;增强防范意识&#xff0c;慧眼识诈。 小亿提醒&#xff1a;大家在购物之余&#xff0c;务必要注意手机支付的安全性&#…

二维码分班查询系统你还不会用?

分班查询系统&#xff0c;已经成为许多学校管理分班流程的得力助手。当新学期伊始&#xff0c;学校需要进行分班&#xff0c;而传统的手工分班方式不仅耗时&#xff0c;还容易出错。这时&#xff0c;一个智能的分班查询系统就显得尤为重要。 作为老师&#xff0c;您可能已经意识…

电脑开机黑屏怎么办?教你3招轻松解决

电脑开机黑屏是一种常见但令人沮丧的问题。无论是台式机还是笔记本电脑&#xff0c;用户都可能遇到这种情况&#xff0c;导致无法正常使用电脑。黑屏问题可能由多种原因引起&#xff0c;包括硬件故障、软件冲突、驱动问题等。本文将介绍电脑开机黑屏怎么办的三种方法&#xff0…

Geoserver源码解读三 GeoServerBasePage

一、概述 org.geoserver.web.GeoServerBasePage 类&#xff0c;在Geoserver中是所有页面类的基类&#xff0c;也是单独存在的一个主UI界面入口文件。拿到源码后可以在里面进行肆意的魔改&#xff0c;也可以单独创建一个工程写根据它扩展。下面以登录的代码作为切入点&#xff0…