Exemple #1
0
def zwBackTest(qx):
    '''
    zwQuant,回溯测试主程序
    【输入】
    	qx (zwQuantx): zwQuantx数据包
    	
    【输出】
         无
         '''
    # 增加数据源波动率参数
    zwx.stkLibSetDVix()
    # 计算回溯时间周期,也可以在此,根据nday调整回溯周期长度
    # 或者在 qt_init数据初始化时,通过qx.qxTimSet(xtim0,xtim9),设置回溯周期长度
    nday = qx.periodNDay
    if qx.debugMod > 0:
        xcod = zw.stkLibCode[0]
        print(zw.stkLib[xcod].tail())
        print('nday', nday)
        # nday=3;
        fss = 'tmp\\' + qx.prjName + '_' + xcod + '.csv'
        zw.stkLib[xcod].to_csv(fss)
        # --------------
    # 按时间循环,进行回溯测试
    for tc in range(nday):
        tim5 = qx.DTxtim0 + dt.timedelta(days=tc)
        xtim = tim5.strftime('%Y-%m-%d')  # print('tc',tc,xtim)
        # 每个测试时间点,开始时,清除qx相关参数
        qx.qxTim0SetVar(xtim)
        # qx.prQxUsr();#qx.xtim=xtim;
        xpriceFlag = False
        # 有效交易标志Flag
        # 按设定的股票代码列表,循环进行回溯测试
        for xcod in zw.stkLibCode:
            qx.stkCode = xcod
            # print('xcod',xcod)
            # xdatWrk是当前xcod,=stkLib[xcod]
            # xbarWrk是当前时间点的stkLib[xcod]
            # 注意,已经包括了,qt_init里面的扩充数据列
            qx.xbarWrk, qx.xdatWrk = zwx.xbarGet8TimExt(xcod, qx.xtim)
            # print(xcod,'xbar\n',qx.xbarWrk)
            if not qx.xbarWrk[qx.priceWrk].empty:
                # -----dvix 波动率检查
                dvix = zwx.stkGetVars(qx, 'dvix')
                # dvixFlag=False;
                dvixFlag = zwt.xinEQ(dvix, qx.dvix_k0,
                                     qx.dvix_k9) or (dvix
                                                     == 0) or (np.isnan(dvix))
                if dvixFlag:
                    xpriceFlag = True
                    # 调用回溯子程序,如果是有效交易,设置成功交易标志xtrdFlag
                    zwBackTest100(qx)
                else:
                    print('@dvix', xcod, xtim, dvix)
                    pass

        # 如果所有股票代码列表循环完毕,成功交易标志为真
        # 在当前测试时间点终止,设置有关交易参数
        if xpriceFlag:
            qx.wrkNDay += 1
            qx.qxTim9SetVar(qx.xtim)
Exemple #2
0
def zwBackTest(qx):
    '''
    zwQuant,回溯测试主程序
    【输入】
    	qx (zwQuantx): zwQuantx数据包
    	
    【输出】
         无
         '''
    # 增加数据源波动率参数  # 就是增加一列dvix数据
    zwx.stkLibSetDVix()
    # 计算回溯时间周期,也可以在此,根据nday调整回溯周期长度
    # 或者在 qt_init数据初始化时,通过qx.qxTimSet(xtim0,xtim9),设置回溯周期长度
    nday = qx.periodNDay
    if qx.debugMod > 0:
        xcod = zw.stkLibCode[0]
        print(zw.stkLib[xcod].tail())
        print('nday', nday)
        fss = 'tmp\\' + qx.prjName + '_' + xcod + '.csv'
        zw.stkLib[xcod].to_csv(fss)
        # --------------
    # 按时间循环,进行回溯测试
    for tc in range(nday):
        tim5 = qx.DTxtim0 + dt.timedelta(days=tc)
        if hasattr(qx,'timFun'):
            qx.timFun(qx,tim5)  # 运行绑定的关于某个时间点的主函数

        xtim = tim5.strftime('%Y-%m-%d')  # print('tc',tc,xtim)
        # 每个测试时间点,开始时,清除qx相关参数
        qx.qxTim0SetVar(xtim)  # qx.prQxUsr() #qx.xtim=xtim
        xpriceFlag = False  # 有效交易标志Flag
        # 按设定的股票代码列表,循环进行回溯测试
        for xcod in zw.stkLibCode:
            qx.stkCode = xcod  # print('xcod',xcod)
            # xdatWrk是当前xcod,=stkLib[xcod]
            # xbarWrk是当前时间点的stkLib[xcod]
            # 注意,已经包括了,qt_init里面的扩充数据列
            qx.xbarWrk, qx.xdatWrk = zwx.xbarGet8TimExt(xcod, qx.xtim)
            # print(xcod,'xbar\n',qx.xbarWrk)
            if not qx.xbarWrk[qx.priceWrk].empty:
                # -----dvix 波动率检查
                dvix = zwx.stkGetVars(qx, 'dvix')  # dvixFlag=False
                dvixFlag = zwt.xinEQ(dvix, qx.dvix_k0, qx.dvix_k9) or (dvix == 0) or (np.isnan(dvix))
                if dvixFlag:
                    xpriceFlag = True
                    # 调用回溯子程序,如果是有效交易,设置成功交易标志xtrdFlag
                    zwBackTest100(qx)
                else:
                    print('@dvix', xcod, xtim, dvix)
                    pass

        # 如果所有股票代码列表循环完毕,成功交易标志为真
        # 在当前测试时间点终止,设置有关交易参数
        if xpriceFlag:
            qx.wrkNDay += 1
            qx.qxTim9SetVar(qx.xtim)
    # print('')
    qx.update_usr_qxLib(qx,qx.qxLib)
def zwBackTest(qx):
    '''
    zwQuant,回溯測試主程式
    【輸入】
    	qx (zwQuantx): zwQuantx封包
    	
    【輸出】
         無
    '''
    # 增加資料來源波動率參數  # 就是增加一列dvix資料
    zwx.stkLibSetDVix()
    # 計算回溯時間週期,也可以在此,根據nday調整回溯週期長度
    # 或者在 qt_init資料初始化時,通過qx.qxTimSet(xtim0,xtim9),設定回溯週期長度
    nday = qx.periodNDay
    if qx.debugMod > 0:
        xcod = zw.stkLibCode[0]
        print(zw.stkLib[xcod].tail())
        print('nday', nday)
        fss = 'tmp\\' + qx.prjName + '_' + xcod + '.csv'
        zw.stkLib[xcod].to_csv(fss)
        # --------------
    # 按時間迴圈,進行回溯測試
    for tc in range(nday):
        tim5 = qx.DTxtim0 + dt.timedelta(days=tc)
        if hasattr(qx,'timFun'):
            qx.timFun(qx,tim5)  # 運行綁定的關於某個時間點的主函數

        xtim = tim5.strftime('%Y-%m-%d')  # print('tc',tc,xtim)
        # 每個測試時間點,開始時,清除qx相關參數
        qx.qxTim0SetVar(xtim)  # qx.prQxUsr() #qx.xtim=xtim
        xpriceFlag = False  # 有效交易標誌Flag
        # 按設定的股票代碼列表,迴圈進行回溯測試
        for xcod in zw.stkLibCode:
            qx.stkCode = xcod  # print('xcod',xcod)
            # xdatWrk是當前xcod,=stkLib[xcod]
            # xbarWrk是當前時間點的stkLib[xcod]
            # 注意,已經包括了,qt_init裡面的擴充資料列
            qx.xbarWrk, qx.xdatWrk = zwx.xbarGet8TimExt(xcod, qx.xtim)
            # print(xcod,'xbar\n',qx.xbarWrk)
            if not qx.xbarWrk[qx.priceWrk].empty:
                # -----dvix 波動率檢查
                dvix = zwx.stkGetVars(qx, 'dvix')  # dvixFlag=False
                dvixFlag = zwt.xinEQ(dvix, qx.dvix_k0, qx.dvix_k9) or (dvix == 0) or (np.isnan(dvix))
                if dvixFlag:
                    xpriceFlag = True
                    # 調用回溯副程式,如果是有效交易,設定成功交易標誌xtrdFlag
                    zwBackTest100(qx)
                else:
                    print('@dvix', xcod, xtim, dvix)
                    pass

        # 如果所有股票代碼清單迴圈完畢,成功交易標誌為真
        # 在當前測試時間點終止,設定有關交易參數
        if xpriceFlag:
            qx.wrkNDay += 1
            qx.qxTim9SetVar(qx.xtim)
    # print('')
    qx.update_usr_qxLib(qx,qx.qxLib)
import zwSys as zw         #zw.zwQuant
from .from .import zwTools as zwt
import zwQTBox as zwx

#======================
    

xlst=['aeti','egan','glng','simo']   
zwx.stkLibRd(xlst,'dat\\');
print(zw.stkLibCode)


xcod='aeti';xtim='2011-01-03'
x1=zwx.xbarGet8Tim(xcod,xtim);
print('x1\n',x1)

xcod='aeti';xtim='2012-01-03'
x2=zwx.xbarGet8Tim(xcod,xtim);
print('x2\n',x2)

#def xbarGet8Tim(xcod,xtim):
#def xbarGet8TimExt(xcod,xtim):
x2,df2=zwx.xbarGet8TimExt(xcod,xtim);
print('x2\n',x2)

print('df')
print(df2.head())
print(df2.tail())