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


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

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ETF交易成本和股票交易成本是投资者在进行交易时需要考虑的重要因素。下面是它们之间的对比: 1. ETF交易成本: ETF(Exchange Traded Fund)是一种基金产品,可以像股票一样在证券交易所上市交易ETF交易成本包括以下几个方面: - 佣金费用:购买或卖出ETF时,需要支付券商的佣金费用。 - 申购赎回费用:有些ETF在申购或赎回时可能会收取一定的费用。 - 摊销费用:ETF通常会有管理费和运营费用,这些费用会通过摊销方式计入ETF的净值,间接影响投资者的收益。 2. 股票交易成本: 股票交易成本主要包括以下几个方面: - 佣金费用:购买或卖出股票时,需要支付券商的佣金费用。 - 印花税:某些国家或地区对股票交易征收印花税,这也是股票交易成本的一部分。 对比: - 佣金费用:一般来说,ETF的佣金费用相对较低,因为ETF可以像股票一样在交易所上市交易,可以享受到股票交易的佣金水平。而股票的佣金费用可能会因为券商的不同而有所差异。 - 申购赎回费用:ETF在申购或赎回时可能会收取一定的费用,这是ETF交易成本的一部分。而股票交易没有这个费用。 - 摊销费用:ETF通常会有管理费和运营费用,这些费用会通过摊销方式计入ETF的净值,间接影响投资者的收益。股票交易没有这个费用。 - 印花税:某些国家或地区对股票交易征收印花税,这是股票交易成本的一部分。而ETF交易一般不涉及印花税。 总体来说,相对于股票交易ETF交易成本相对较低。但具体的交易成本还需要根据不同的券商、产品和交易所规定来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值