自己做量化交易軟體(41)自編仿通達信公式及自編因子公式的計算速度比較及因子公式結果排名
自編仿通達信指標公式是對單只股票計算,如果對一批股票計算,只能用回圈來逐個處理,
自編因子指標公式是對一批股票同步計算,因此可以想象速度肯定會很快,
我們下面做一個速度計算比較,為了能精確計算速度,我們預先讀取滬深300指數的300只股票行情,再進行計算比較,
因Python的顯示對速度影響很大,我們只顯示計算所花費的時間,
計算結果比較請看上一篇博客《自己做量化交易軟體(40)小白量化實戰13–Alpha101及自編因子公式》
下面給出全部程式,和最后計算速度比較結果,
# 仿通達信單只股票計算和因子公式計算速度比較
#購買<零基礎搭建量化投資系統>正版書,送小白量化軟體源代碼,
# https://item.jd.com/61567375505.html
#獨狼荷蒲qq:2775205
#通通python量化群:524949939
#電話微信:18578755056
#微信公眾號:獨狼股票分析
import time
import numpy as np
import pandas as pd
from scipy.stats import rankdata
import HP_tdx as htdx #小白量化通達信行情庫
from HP_formula2 import * #小白量化仿通達信公式函式庫
#連接行情主站
htdx.TdxInit(ip='183.60.224.178',port=7709)
#獲取板塊的所有股票代碼
bkn='滬深300'
codes=htdx.getblock2(bkn) #回傳板塊中的股票
print(bkn,' 板塊的所有股票 :',codes)
print('開始獲取行情資料!')
#小白量化資料池
stocks_dict = {} #小白量化資料池
for c in codes:
stock =htdx. get_security_bars(nCategory=5,nMarket = 0,code=c,nCount=800)
# 小白量化仿通達信公式資料格式化
mydf=stock.reset_index(level=None, drop=True ,col_level=0, col_fill='')
CLOSE=mydf['close']
LOW=mydf['low']
HIGH=mydf['high']
OPEN=mydf['open']
VOL=mydf['volume']
C=mydf['close']
L=mydf['low']
H=mydf['high']
O=mydf['open']
V=mydf['volume']
mydf['rtn']=100*(C-REF(C,1))/C #收益率,又稱回報率
mydf['vwap']=SUM(C*V, 10)/SUM(V, 10) #成交量加權平均價
#加入小白量化資料池
stocks_dict[c] = mydf
#創建小白量化股票資料池
mdf=MDF(stocks_dict)
print('獲取行情資料結束!獲取了%d 只股票資料,'%len(codes))
# 1.首先計算單只股票KDJ指標的速度
## KDJ指標,只能個股計算
def KDJ(N=9, M1=3, M2=3):
RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
K = SMA(RSV,M1,1)
D = SMA(K,M2,1)
J = 3*K-2*D
return K, D, J
#獲取股票池中股票代碼表
codes=mdf.get_code()
start=time.time() #獲取開始時間
gpc= {} #小白量化資料池
#回圈計算單只股票的KDJ指標值
for c in codes:
mydf=mdf.get_data(c)
# 小白量化仿通達信公式資料格式化
#mydf=mydf.reset_index(level=None, drop=True ,col_level=0, col_fill='')
CLOSE=mydf['close']
LOW=mydf['low']
HIGH=mydf['high']
OPEN=mydf['open']
VOL=mydf['volume']
# C=mydf['close']
# L=mydf['low']
# H=mydf['high']
# O=mydf['open']
# V=mydf['volume']
#計算個股KDJ指標值
mydf['k'],mydf['d'],mydf['j']=KDJ() #KDJ指標
#資料加入股票資料池
gpc[c] = mydf
end=time.time() #獲取結束時間
print('全部股票回圈計算仿通達信指標公式所需時間:')
print('時間:',round(start,2),round(end,2),'花費時間:',round(end-start,4),'秒')
#創建小白量化股票資料池
mdf2=MDF(gpc)
# 2. 計算股票自編因子公式mKDJ指標的速度
#創建小白量化股票資料池,以股票代碼為key的字典
#小白量化因子資料初始化
mCLOSE=mdf.to_df('close')
mLOW=mdf.to_df('low')
mHIGH=mdf.to_df('high')
mOPEN=mdf.to_df('open')
mVOL=mdf.to_df('volume')
mRTN=mdf.to_df('rtn')
mVWAP=mdf.to_df('vwap')
##下面是Alpha因子及自編因子公式的演示
# mKDJ因子指標,不能計算單只股票
def mKDJ(N=9, M1=3, M2=3):
"""
mKDJ 因子隨機指標
"""
RSV = (mCLOSE - mLLV(mLOW, N)) / (mHHV(mHIGH, N) - mLLV(mLOW, N)) * 100
K = mEMA(RSV, (M1 * 2 - 1))
D = mEMA(K, (M2 * 2 - 1))
J = K * 3 - D * 2
return K, D, J
start2=time.time() #獲取開始時間
# 計算mKDJ因子公式
mK,mD,mJ=mKDJ()
end2=time.time() #獲取回圈結束時間
print('全部股票計算因子指標公式所需時間:')
print('時間:',round(start2,2),round(end2,2),'花費時間:',round(end2-start2,4),'秒')
程式計算結果:
開始獲取行情資料!
獲取行情資料結束!獲取了300 只股票資料,
全部股票回圈計算仿通達信指標公式所需時間:
時間: 1613804417.7 1613804422.77 花費時間: 5.067 秒
全部股票計算因子指標公式所需時間:
時間: 1613804424.25 1613804424.37 花費時間: 0.127 秒
從上面比較可知,因子公式計算一批股票資料值有很快的速度,
另外因子公式的第2個強項就是快速對指標計算結果排序,
可在上面程式加入下面幾行代碼,
#獲取最后一行結果
result=mK.tail(1)
#獲取排名代碼
print('獲取最后一行結果,并獲取排名在前20名的股票代碼')
codes3=get_rank(result,20)
print(codes3)
程式最后運行的結果如下:
滬深300 板塊的所有股票 :,,,
開始獲取行情資料!
獲取行情資料結束!獲取了300 只股票資料,
全部股票回圈計算仿通達信指標公式所需時間:
時間: 1613804644.75 1613804649.39 花費時間: 4.644 秒
全部股票計算因子指標公式所需時間:
時間: 1613804650.81 1613804650.93 花費時間: 0.127 秒
獲取最后一行結果,并獲取排名在前20名的股票代碼
['600763', '300015', '000708', '002493', '600519', '000568', '600309', '002594', '300347', '600176', '603259', '603799', '600346', '600436', '601166', '600809', '601888', '002601', '688036', '000786']
是不是自編因子公式是對自編仿通達信公式的超越,應用范圍更加廣泛,
請持續關注我的博客,我的進步,就是你的進步!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/261851.html
標籤:AI
