学习链接:
一:https://www.jianshu.com/p/820cb5300fc1
二:https://www.jianshu.com/p/5e5b368eea53
三:https://www.jianshu.com/p/fe22393024d2
1.os.path.join()函数
https://www.cnblogs.com/an-ning0920/p/10037790.html
2.url.request.urlretrieve()函数
https://blog.csdn.net/pursuit_zhangyu/article/details/80556275
3.sys.stdout.write()用法
sys.stdout的形式就是print的一种默认输出格式

import sys i=1 file_num=2 sys.stdout.write('\r>> read json file %d/%d' % (i, file_num)) #屏幕显示>> read json file 1/21/2 sys.stdout.flush() #-> 这句代码的意思是刷新输出 print('%d/%d' % (i, file_num))#屏幕打印输出1/2
4.os.mkdir(path,mode)
https://www.runoob.com/python/os-mkdir.html
#os.mkdir(path,mode) 方法用于以数字权限模式创建目录。
# 默认的模式为 0777 (八进制)。path -- 要创建的目录,可以是相对或者绝对路径。
# mode -- 要为目录设置的权限数字模式。
5.python用mpl_finance中的candlestick_ohlc画分时图
https://blog.csdn.net/boystray/article/details/82740772

matplotlib.finance独立出来成为mpl_finance,而mpl_finance中的candlestick_ochl和candlestick_ohlc一般用来画股票的K线图。我需要分析分时图,也就是一分钟的行情,这个时候就不能直接用candlestick_ochl函数,因为candlestick_ochl中x轴最小的单位是日期,不是分钟。 经过对mpl_finance的源代码进行分析,问题在于matplotlib的date2num将日期转换为浮点数,浮点数的整数部分表示日期,小数部分代表小时和分钟。比如下面4个时间段是连续的分钟。 可以看出date2num函数计算之后,4个时间的整数部分都是736954,导致在X轴上这4个时间段都重叠在一起,无法区分了。要达到的效果是每一个分钟也能成为一个整数,这样就可以显示出来了。那么一天是24小时,每小时60分钟,那么一天就是1440分钟,将date2num计算的浮点数乘以1440就可以将每一分钟转为整数,那么就可以在x轴上。 最后还需要对x轴格式化,因为自己对x轴进行了处理(乘以1440),采用默认的格式化是乱码。需要自定义x轴的格式化函数。 完整例子如下: import pandas as pd from pandas import DataFrame import matplotlib.pyplot as plt import matplotlib.dates as dates import mpl_finance as mpf from matplotlib.ticker import Formatter import numpy as np dfcvs = DataFrame([ ["2018/09/17-21:34", 3646, 3650,3644,3650], ["2018/09/17-21:35", 3650, 3650,3648,3648], ["2018/09/17-21:36", 3650, 3650,3648,3650], ["2018/09/17-21:37", 3652, 3654,3648,3652] ]) dfcvs.columns = ['时间','开盘','最高','最低','收盘'] dfcvs['时间']=pd.to_datetime(dfcvs['时间'],format="%Y/%m/%d-%H:%M") #matplotlib的date2num将日期转换为浮点数,整数部分区分日期,小数区分小时和分钟 #因为小数太小了,需要将小时和分钟变成整数,需要乘以24(小时)×60(分钟)=1440,这样小时和分钟也能成为整数 #这样就可以一分钟就占一个位置 dfcvs['时间']=dfcvs['时间'].apply(lambda x:dates.date2num(x)*1440) data_mat=dfcvs.as_matrix() fig,ax=plt.subplots(figsize=(1200/72,480/72)) fig.subplots_adjust(bottom=0.1) mpf.candlestick_ohlc(ax,data_mat,colordown='#53c156', colorup='#ff1717',width=0.2,alpha=1) #将x轴的浮点数格式化成日期小时分钟 #默认的x轴格式化是日期被dates.date2num之后的浮点数,因为在上面乘以了1440,所以默认是错误的 #只能自己将浮点数格式化为日期时间分钟 #参考https://matplotlib.org/examples/pylab_examples/date_index_formatter.html class MyFormatter(Formatter): def __init__(self, dates, fmt='%Y%m%d %H:%M'): self.dates = dates self.fmt = fmt def __call__(self, x, pos=0): 'Return the label for time x at position pos' ind = int(np.round(x)) #ind就是x轴的刻度数值,不是日期的下标 return dates.num2date( ind/1440).strftime(self.fmt) formatter = MyFormatter(data_mat[:,0]) ax.xaxis.set_major_formatter(formatter) for label in ax.get_xticklabels(): label.set_rotation(90) label.set_horizontalalignment('right')
6.plt.grid() 是否显示网格线

import matplotlib as mpl import matplotlib.pyplot as plt plt.grid() # 显示网格线 1=True=默认显示;0=False=不显示 plt.grid(1) # 显示网格线 plt.grid(True) # 显示网格线 plt.grid(b=True) # 显示网格线 plt.grid(b=1) # 显示网格线 plt.grid(b=True, axis='x') #只显示x轴网格线 plt.grid(b=True, axis='y') #只显示y轴网格线 plt.grid(b=1, which='major') # 默认就是major,例如x轴最大值为3.5(这个值占比极小,不影响作图的话),这部分图像不会显示;若which='both'则显示;若设置为minor则不显示网格(其实这里有点不懂,,既然不显示,那为什么不直接设置为b=0呢????)
7.pyalgotrade板块

下面列出了pyalgotrade常用的几个子模块,其中又以数据采集和策略最为重要,程序可繁可简,最简单的代码二三十行即可实现。 数据采集pyalgotrade.barfeed 提供了一些常用的数据采集类,开发者也可基于采集基类自定义采集类。 策略pyalgotrade.strategy 继承策略基类,开发者在其中实现具体策略:编写逻辑,确定买入、卖出时间,金额等等。 分析pyalgotrade.stratanalyzer 评价策略的运行结果,如:盈利/亏损金额、次数、单位回报率等等。 技术指标pyalgotrade.technical 常用的技术指标,无需安装其它软件即可使用。 绘图pyalgotrade. plotter 绘图工具,主要用于直观地分析和显示策略的结果。 经纪商pyalgotrade.broker 设置交易费用等细节,用于执行订单。 作者:xieyan0811 链接:https://www.jianshu.com/p/fe22393024d2 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关概念 夏普比率Sharpe Ratio 夏普比率综合考虑了收益和风险,公式如下: 其中E(Rp)是预期报酬率,Rf是无风险利率,op是标准差,等号上面是收益,等号下面是风险,因此,该值越大越好。当在几种策略之间选择时,也可以考虑夏普比率。 最大回撤率 在指定周期内,产品净值走到最低点时的收益率回撤幅度的最大值,即:最坏情况下的亏损比例。 成交量加权平均价策略VWAP 对于较大的交易,如果全部按当前市价下单,会对市场造成巨大的冲击,更好的方法是小批量分时下单。VWAP的目标是最小化冲击成本,使交易价格等于一段时间内的平均价格。在机构和庄家大资金进货、出货操作时需要考虑冲击问题,一般散户很少使用。 Bar 在一定时间段内的时间序列构成了一根 K 线(蜡烛图),单根K线被称为 Bar。 评价指标 评价函数在pyalgotrade.stratanalyzer子模块中,下面列出了几个常用的评价指标类: pyalgotrade.stratanalyzer.returns.Returns() 收益率 pyalgotrade.stratanalyzer.sharpe.SharpeRatio() 夏普比率 pyalgotrade.stratanalyzer.drawdown.DrawDown() 回撤率 pyalgotrade.stratanalyzer.trades.Trades() 具体交易 trade提供的信息最多,一般关注 getCount():总的交易次数 getProfitableCount():盈利的交易次数 getUnprofitableCount():亏损的交易次数 getEvenCount():不赚不亏的交易次数 getAll():返回numpy.array的数据,内容是每次交易的盈亏 getProfits():返回numpy.array的数据,内容是每次盈利交易的盈利 getLosses():返回numpy.array的数据,内容是每次亏损交易的亏损额 getAllReturns():返回numpy.array的数据,内容是每次交易的盈利(百分比) getPositiveReturns():返回numpy.array的数据,内容是每次盈利交易的收益 getNegativeReturns():返回numpy.array的数据,内容是每次亏损交易的损失 作者:xieyan0811 链接:https://www.jianshu.com/p/fe22393024d2 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
pyalgotrade模块源码详解
https://blog.csdn.net/weixin_33834075/article/details/85088607
8.MA\SMA
https://www.douban.com/note/628768846/
9.ewm(),用于计算EMA
https://blog.csdn.net/weixin_41494909/article/details/99670246
10.聚宽api文档
https://www.joinquant.com/help/api/help#JQData:get_price-获取行情数据
12.枚举函数enum
https://www.cnblogs.com/skaarl/p/10279428.html