ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

QUANTAXIS探索(二)策略运行

QUANTAXIS探索(二)策略运行 有了数据后QUANTAXIS源码探索一数据使用)就可以进行回测了。另外发现quantaxis的的QADEMO库有不少案例为学习提供了不少方便。地址QADEMO。一、回测过程QUANTAXIS使用松耦合的架构也内置了一些类可供继承。首先完成一个回测有几方面的要素/模块。行情源策略主体订单管理交易管理账户管理。行情源不断推送行情策略收到行情进行处理发送订单后台撮合交易交易的结果反映到账户。券商的交易软件把这些功能综合在一起提供了一个前端。下面用模拟手工在软件里下单的方式看策略执行的过程importQUANTAXISasQA# 1 登录交易软件UserQA.QA_User(usernamexxx,passwordXXX)#比如海通证券交易软件的用户名和密码# 2 初始化经纪商BrokerQA.QA_BacktestBroker()#比如海通证券# 3 准备下单新建一个组合并分配资金# QA里一个用户多个组合一个组合多个账户一个账户一个策略。倒过来看一个策略需要分配一定的资金形成账户的概念多个策略形成组合的概念多个组合就综合成软件里能看到的持仓。code000001test_portfolioUser.new_portfolio(test)accountsh_portfolio.new_account(account_cookieadmin_test,init_cash2000000)# 4 在数据库中初始化QA.QA_SU_save_strategy(test,test_day,account.account_cookie,if_saveTrue)# 5 获得行情推送dataQA.QA_fetch_stock_day_adv(code,start,end).to_qfq()#第1天day1next(data.panel_gen)#第一只股票的行情itemnext(day1.security_gen)# 6 下单orderaccount.send_order(codeitem.code[0],timeitem.date[0],amount1000,towardsQA.ORDER_DIRECTION.BUY,price0,order_modelQA.ORDER_MODEL.MARKET,amount_modelQA.AMOUNT_MODEL.BY_AMOUNT)# 7 经纪商接收交易指令Broker.receive_order(QA.QA_Event(orderorder,market_datadata.data.iloc[0]))# 8 撮合交易并返回给订单信息# 查询执行完的交易trade_mesBroker.query_orders(account.account_cookie,filled)# 获得订单的交易信息并返回给订单restrade_mes.loc[order.account_cookie,order.realorder_id]order.trade(res.trade_id,res.trade_price,res.trade_amount,res.trade_time)# 9 结算账户信息更新# 结算account.settle()# 查看持仓account.history_table# 查看可卖出的证券account.sell_available因此只需要迭代行情加入策略逻辑就能推动回测循环foritemsinDATA.panel_gen:foriteminitems.security_gen:# 获得股票数据item.date[0]/code/open/high/low/close# 加入策略逻辑# account.send_order# Broker.receive_order# order.trade# account.settle()二、回测类QAStrategy模块封装了常用的策略逻辑可以单独安装pip install QAStrategy单标的股票类的回测只需要继承QAStrategyStockBase并根据回测周期需要重写on_dailyclose/on_bar/on_tick等。fromQAStrategy.qastockbaseimportQAStrategyStockBaseclasstest_strategy(QAStrategyStockBase):defuser_init(self):#如果需要初始化额外的数据可在此定义defon_bar(self,data):# 获取数据data.name/open/high/low/close/volume/amount#name[0]为日期,name[1]为代码# 策略逻辑#...回测运行test_strategy(code[000001],frequenceday,start2021-01-01,end2021-01-05).run_backtest()
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进