实战:基于技术分析的Python算法交易.docx
《实战:基于技术分析的Python算法交易.docx》由会员分享,可在线阅读,更多相关《实战:基于技术分析的Python算法交易.docx(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实战:基于技术分析的Python算法交易译者|Tianyu出品|AI科技大本营ID:rgznai100本文是用Python做交易策略回测系列文章的第四篇。上个局部介绍了以下几个方面内容介绍了zipline回测框架并展示了怎样回测根本的策略导入自定义的数据并使用zipline评估交易策略的表现这篇文章的目的是介绍怎样基于技术分析TA,TechnicalAnalysis来创立交易策略。在此引用维基百科的解释技术分析是指“基于对市场的历史数据、成交价格、交易量的研究来预测价格走势的一套方法。在本文中我会介绍怎样使用流行的Python库TA-Lib和zipline回测框架来计算TA指标。我会创立5种策
2、略然后研究哪种策略在投资期限内表现最好。安装我用到的库有以下几个pyfolio0.9.2numpy1.14.6matplotlib3.0.0pandas0.22.0json2.0.9empyrical0.5.0zipline1.3.0辅助函数在构造策略之前我要先定义几个辅助函数此处我只介绍其中一个因为它是最重要的一个。这个函数用来设置回测的起始时间因为我祈望所有策略开场施行的时间保持一致设置为2016年度的第一天。不过有些基于技术指标的策略需要一定数量的历史数据也就是所谓的warm-up阶段。请一定记住一点没有任何交易决策会发生在回测期的起始时间之前。defget_start_date(tic
3、ker,start_date,days_prior):start_date_dtdatetime.strptime(start_date,%Y-%m-%d)prior_to_start_date_dtstart_date_dt-relativedelta(days2*days_prior)prior_to_start_dateprior_to_start_date_dt.strftime(%Y-%m-%d)yahoo_financialsYahooFinancials(ticker)dfyahoo_financials.get_historical_price_data(prior_to_st
4、art_date,start_date,daily)dfpd.DataFrame(dftickerprices)formatted_dateifdf.iloc-1start_date:days_prior1new_start_datedf.iloc-days_priorreturnnew_start_date策略本篇文章中我们要解决的问题如下投资者有10000元的本金投资时限为2016-2017投资者仅投资Tesla的股票假设不存在交易本钱即交易佣金为零不存在做空行为投资者只能出售他们拥有的股票当投资者购置股票时他们会花掉全部本金之所以选择这段时期是因为2018年度中后的Quandl数据集还没
5、有更新我们祈望代码可以尽可能简化。关于怎样将数据载入zipline的更多细节请参考到我之前的文章。买入以及持有的策略我们首先来看最根本的策略买入以及持有。详细的思路是我们买入一定的资产在整个投资期间不进展任何操作。因此在投资第一天我们使用全部本金尽可能多地购置Tesla的股票接下来什么事情都不做。这种简单的策略可以作为其他高级策略的基准假设某种复杂的策略相比于基准策略反而损失了更多的钱那么讲明这种策略毫无用途。%zipline-start2016-1-1-end2017-12-31-capital-base10000.0-obuy_and_hold.pkl#importsfromzipline
6、.apiimportorder_percent,symbol,recordfromzipline.financeimportcommission#parametersSELECTED_STOCKTSLAdefinitialize(context):context.assetsymbol(SELECTED_STOCK)context.has_orderedFalsecontext.set_commission(commission.PerShare(cost0.0,min_trade_cost0)defhandle_data(context,data):#tradinglogicifnotcon
7、text.has_ordered:order_percent(context.asset,1)context.has_orderedTruerecord(pricedata.current(context.asset,price)接下来我们载入有关该策略表现的DataFramebuy_and_hold_resultspd.read_pickle(buy_and_hold.pkl)这里可能会出现ending_cash为负的情况原因是我们想要买入的股份是当天收盘时计算的于是使用的是收盘价格。然而这笔交易是次日执行的价格可能会发生大幅变化。在zipline中交易不会因为金额缺乏而被拒但我们可以通过负
8、的余额将其终止。我们可以想些方法防止这种情况的发生例如手动计算第二天要买入的股份并考虑股价上涨等因素以防止这种情况发生。我们使用一个辅助函数将该策略的细节进展可视化投资组合的变化交易价格序列和每天的收益情况。我们还使用了另一个辅助函数来观察策略的表现该函数将用于最后一局部buy_and_hold_resultspd.read_pickle(buy_and_hold.pkl)为了简洁起见我们不会展示每种策略的全部步骤因为它们的执行方式都是一样的。简单的挪动平均策略我们采用的第二种策略基于简单的挪动平均数方法SMA,SimpleMovingAverage。该策略的逻辑可以归纳为以下几步当20天的S
9、MA价格上升时买入股份当20天的SMA价格下降时卖掉全部股份用前19天以及当天的数据计算挪动平均数次日执行交易决策这是我们第一次调用预设辅助函数的地方计算起始日期以使投资者能在2016年度的第一个交易日制定交易决策。get_start_date(TSLA,2016-01-04,19)#2021-12-04在下面的策略中我们使用修改后的日期作为起始日期%zipline-start2021-12-4-end2017-12-31-capital-base10000.0-osimple_moving_average.pkl#importsfromzipline.apiimportorder_perce
10、nt,record,symbol,order_targetfromzipline.financeimportcommission#parametersMA_PERIODS20SELECTED_STOCKTSLAdefinitialize(context):context.time0context.assetsymbol(SELECTED_STOCK)context.set_commission(commission.PerShare(cost0.0,min_trade_cost0)context.has_positionFalsedefhandle_data(context,data):con
11、text.time1record(timecontext.time)ifcontext.timeMA_PERIODS:returnprice_historydata.history(context.asset,fieldsprice,bar_countMA_PERIODS,frequency1d)maprice_history.mean()#crossupif(price_history-2ma)(price_history-1ma)(notcontext.has_position):order_percent(context.asset,1.0)context.has_positionTru
12、e#crossdownelif(price_history-2ma)(price_history-1ma)(context.has_position):order_target(context.asset,0)context.has_positionFalserecord(pricedata.current(context.asset,price),moving_averagema)注意data.current(context.asset,price)等同于price_history-1.下列图展示了该策略下列图展示了20天的挪动平均价格序列。我们还对每一次交易做了标注即在记号之后的第一个交易
13、日执行此笔交易。挪动平均穿插挪动平均穿插策略MovingAverageCrossover可以看作是上一种策略的拓展版用两个不同规格的挪动窗口来代替单个的窗口。100天的挪动平均数序列中要隔很久才会出现价格的突变而20天的挪动平均数序列发生突变的速度要快很多。该策略的逻辑如下当较快的挪动平均值穿越较慢的挪动平均值时我们买入股份当较慢的挪动平均值穿越较快的挪动平均值时我们卖出股份一定要记住一点在这种策略中许多不同长度窗口的组合构成了速度不同的挪动平均数。对于该策略我们需要另外载入100天的数据以便于准备warm-up阶段。%zipline-start2021-8-11-end2017-12-31-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实战 基于 技术 分析 Python 算法 交易
限制150内