python量化交易常见函数


学习链接:

一: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
View Code

 

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')
           
View Code

 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呢????)
View Code

 7.pyalgotrade板块

下面列出了pyalgotrade常用的几个子模块,其中又以数据采集和策略最为重要,程序可繁可简,最简单的代码二三十行即可实现。

数据采集pyalgotrade.barfeed 提供了一些常用的数据采集类,开发者也可基于采集基类自定义采集类。
策略pyalgotrade.strategy 继承策略基类,开发者在其中实现具体策略:编写逻辑,确定买入、卖出时间,金额等等。
分析pyalgotrade.stratanalyzer 评价策略的运行结果,如:盈利/亏损金额、次数、单位回报率等等。
技术指标pyalgotrade.technical 常用的技术指标,无需安装其它软件即可使用。
绘图pyalgotrade. plotter 绘图工具,主要用于直观地分析和显示策略的结果。
经纪商pyalgotrade.broker
设置交易费用等细节,用于执行订单。

作者:xieyan0811
链接:https://www.jianshu.com/p/fe22393024d2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Code
相关概念

夏普比率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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Code

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM