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