def zwBackTest100(qx): ''' zwBackTest100(qx): zwQT回溯测试子函数,测试一只股票xcod,在指定时间xtim的回溯表现数据 会调用qx.staFun指定的策略分析函数,获取当前的股票交易数目 qx.stkNum 并且根据股票交易数目 qx.stkNum,判定是不是有效的交易策略 【输入】 qx (zwQuantx): zwQuantx数据包 #qx.stkCode,当前交易的股票代码 #qx.xtim,当前交易的时间 【输出】 无 ''' #----运行策略函数,进行策略分析 qx.stkNum=qx.staFun(qx); #---- if qx.stkNum!=0: #----检查,是不是有效交易 xfg,qx.xtrdChk=zwx.xtrdChkFlag(qx) if xfg: #----如果是有效交易,加入交易列表 zwx.xtrdLibAdd(qx) #qx.prQCap(); elif qx.trdNilFlag: zwx.xtrdLibNilAdd(qx)
def zwBackTest100(qx): ''' zwBackTest100(qx): zwQT回溯测试子函数,测试一只股票xcod,在指定时间xtim的回溯表现数据 会调用qx.staFun指定的策略分析函数,获取当前的股票交易数目 qx.stkNum 并且根据股票交易数目 qx.stkNum,判定是不是有效的交易策略 【输入】 qx (zwQuantx): zwQuantx数据包 #qx.stkCode,当前交易的股票代码 #qx.xtim,当前交易的时间 【输出】 无 ''' # ----运行策略函数,进行策略分析 qx.stkNum = qx.staFun(qx) # ---- if qx.stkNum != 0: # ----检查,是不是有效交易 xfg, qx.xtrdChk = zwx.xtrdChkFlag(qx) if xfg: # ----如果是有效交易,加入交易列表 zwx.xtrdLibAdd(qx) # qx.prQCap() elif qx.trdNilFlag: zwx.xtrdLibNilAdd(qx)
def zwBackTest100(qx): ''' zwBackTest100(qx): zwQT回溯測試子函數,測試一檔股票xcod,在指定時間xtim的回溯表現資料 會調用qx.staFun指定的策略分析函數,獲取當前的股票交易數目 qx.stkNum 並且根據股票交易數目 qx.stkNum,判定是不是有效的交易策略 【輸入】 qx (zwQuantx): zwQuantx數據包 #qx.stkCode,當前交易的股票代碼 #qx.xtim,當前交易的時間 【輸出】 無 ''' # ----運行策略函數,進行策略分析 qx.stkNum = qx.staFun(qx) # ---- if qx.stkNum != 0: # ----檢查,是不是有效交易 xfg, qx.xtrdChk = zwx.xtrdChkFlag(qx) if xfg: # ----如果是有效交易,加入交易清單 zwx.xtrdLibAdd(qx) # qx.prQCap() elif qx.trdNilFlag: zwx.xtrdLibNilAdd(qx)
# -*- coding: utf-8 -*- import numpy as np import pandas as pd import zwSys as zw #zw.zwQuant import zwQTBox as zwx #====================== pd.set_option('display.width', 450) qx = zw.zwQuantX('xbar', 1000000) #100w qx.priceCalc, qx.priceWrk, qx.priceBuy = 'close', 'close', 'close' xlst = ['aeti', 'egan', 'glng', 'simo'] zwx.stkLibRd(xlst, 'dat\\') #print(zw.stkCode) # xtim = '2011-01-03' qx.qxTim0SetVar(xtim) qx.qxUsr = zwx.qxObjSet(qx.xtim0, 0, qx.money, 0) # qx.stkCode = 'simo' qx.stkNum = 100 xfg, qx.xtrdChk = zwx.xtrdChkFlag(qx) zwx.xtrdLibAdd(qx) qx.qxTim9SetVar(xtim) qx.prQLib()
'设置绘图 和 数据输出格式' '设置数据源目录等场所,读取股票数据' qx.rdat=rdat zwx.stkLibRd(xlst,rdat) '设置大盘指数' '读取股票数据 qx.qxTimSet(xtim0,xtim9)' def zwBackTest100(qx):回溯测试只函数,单一股票,单一时间点的测试 #----运行策略函数,进行策略分析 qx.stkNum=qx.staFun(qx); if qx.stkNum!=0: #----检查,是不是有效交易 xfg,qx.xtrdChk=zwx.xtrdChkFlag(qx) if xfg: #----如果是有效交易,加入交易列表 zwx.xtrdLibAdd(qx) elif qx.trdNilFlag: zwx.xtrdLibNilAdd(qx) def zwBackTest(qx):回溯测试主程序 '增加数据源波动率参数:dvix ' '计算回溯时间周期,也可以在此,根据nday调整回溯周期长度。或者在qt_init数据初始化时,通过qx.qxTimSet(xtim0,xtim9),设置回溯周期长度' '按时间循环,进行回溯测试' for tc in range(nday) '每个测试时间点,开始时,清除qx相关参数' '按设定的股票代码列表,循环进行回溯测试' for xcod in zw.stkLibCode: qx.stkCode=xcod qx.xbarWrk = qx.stkLib[xcod][xtim] qx.xdatWrk = qx.stkLib[xcod] if not qx.xbarWrk[qx.priceWrk].empty: dvixFlag=zwt.xinEQ(dvix,qx.dvix_k0,qx.dvix_k9)or(dvix==0)or(np.isnan(dvix)) # np.isnan(dvix)是在考虑缺失值的情况,dvix==0 这个老大估计是搞错了。