Ejemplo n.º 1
0
def VWAP_sta(qx):
    ''' vwap 成交量加權平均價策略分析函數
    
    Args:
        qx (zwQuantX): zwQuantX數據包 
    預設參數範例:
    qx.staVars=[5,0.01,'2014-01-01','']    
    '''

    stknum = 0
    xtim, xcod = qx.xtim, qx.stkCode
    #
    vwap = zwx.stkGetPrice(qx, 'vwap')
    if vwap > 0:
        dprice = zwx.stkGetVars(qx, 'close')
        kvwap = qx.staVars[1]
        xnum = zwx.xusrStkNum(qx, xcod)
        dcash = qx.qxUsr['cash']
        dval = xnum * dprice
        #----
        if (dprice > vwap * (1 + kvwap)) and (dval < (dcash * qx.stkKCash)):
            stknum = 100
        if (dprice < vwap * (1 - kvwap)) and (dval > 0):
            stknum = -100
        #
        if stknum != 0:
            #print(xtim,stknum,'xd',xcod,dprice,dcash)
            pass

    return stknum
Ejemplo n.º 2
0
def VWAP_sta(qx):
    ''' vwap 成交量加权平均价策略分析函数
    
    Args:
        qx (zwQuantX): zwQuantX数据包 
    默认参数示例:
    qx.staVars=[5,0.01,'2014-01-01','']    
    '''

    
    stknum=0;
    xtim,xcod=qx.xtim,qx.stkCode
    #
    vwap=zwx.stkGetPrice(qx,'vwap')
    if vwap>0:
        dprice=zwx.stkGetVars(qx,'close')
        kvwap=qx.staVars[1];
        xnum=zwx.xusrStkNum(qx,xcod);
        dcash=qx.qxUsr['cash'];
        dval = xnum * dprice;
        #----
        if (dprice>vwap*(1+kvwap))and(dval<(dcash*qx.stkKCash)):
            stknum=100;
        if (dprice<vwap*(1-kvwap))and(dval>0):
            stknum=-100;
        #
        if stknum!=0:    
            #print(xtim,stknum,'xd',xcod,dprice,dcash)    
            pass;
        
        
    return stknum            
Ejemplo n.º 3
0
def VWAP_sta(qx):
    ''' vwap 成交量加权平均价策略分析函数
    
    Args:
        qx (zwQuantX): zwQuantX数据包 
    默认参数示例:
    qx.staVars=[5,0.01,'2014-01-01','']    
    '''

    
    stknum=0;
    xtim,xcod=qx.xtim,qx.stkCode
    #
    vwap=zwx.stkGetPrice(qx,'vwap')
    if vwap>0:
        dprice=zwx.stkGetVars(qx,'close')
        kvwap=qx.staVars[1];
        xnum=zwx.xusrStkNum(qx,xcod);
        dcash=qx.qxUsr['cash'];
        dval = xnum * dprice;
        #----
        if (dprice>vwap*(1+kvwap))and(dval<(dcash*qx.stkKCash)):
            stknum=100;
        if (dprice<vwap*(1-kvwap))and(dval>0):
            stknum=-100;
        #
        if stknum!=0:    
            #print(xtim,stknum,'xd',xcod,dprice,dcash)    
            pass;
        
        
    return stknum            
Ejemplo n.º 4
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)
Ejemplo n.º 5
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)
Ejemplo n.º 6
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)
Ejemplo n.º 7
0
def BBANDS_sta(qx):
    ''' 布林帶策略分析函數
    
    Args:
        qx (zwQuantX): zwQuantX數據包 
   預設參數範例:
   qx.staVars=[40,'2014-01-01','']    
   
   '''

    stknum = 0
    xtim, xcod = qx.xtim, qx.stkCode
    dup = zwx.stkGetVars(qx, 'boll_up')
    dlow = zwx.stkGetVars(qx, 'boll_low')
    #print(xtim,stknum,'xd',xcod,dup,dlow)
    if dup > 0:
        dprice = zwx.stkGetPrice(qx, 'dprice')
        kprice = zwx.stkGetPrice(qx, 'kprice')
        dnum = zwx.xusrStkNum(qx, xcod)
        dcash = qx.qxUsr['cash']
        #print(xtim,stknum,dnum,'xd',dcash,dprice,'b,%.2f,%.2f' %(dlow,dup))
        if (dnum == 0) and (dprice < dlow):
            stknum = int(dcash / dprice * qx.stkKCash)
            dsum = stknum * kprice
            if qx.debugMod > 0:
                print(
                    xtim, stknum, dnum, '++,%.2f,%.2f,%.2f,$,%.2f,%.2f' %
                    (dprice, dlow, dup, kprice, dsum))
        elif (dnum > 0) and (dprice > dup):
            stknum = -1
            dsum = dnum * kprice
            if qx.debugMod > 0:
                print(
                    xtim, stknum, dnum, '--,%.2f,%.2f,%.2f,$,%.2f,%.2f' %
                    (dprice, dlow, dup, kprice, dsum))

        #
        if stknum != 0:
            #print(xtim,stknum,'xd',xcod,dprice,dcash)
            pass

    return stknum
Ejemplo n.º 8
0
def BBANDS_sta(qx):
    ''' 布林带策略分析函数
    
    Args:
        qx (zwQuantX): zwQuantX数据包 
   默认参数示例:
   qx.staVars=[40,'2014-01-01','']    
   
   '''


    stknum=0;
    xtim,xcod=qx.xtim,qx.stkCode
    dup=zwx.stkGetVars(qx,'boll_up')
    dlow=zwx.stkGetVars(qx,'boll_low')
    #print(xtim,stknum,'xd',xcod,dup,dlow)    
    if dup>0:
        dprice=zwx.stkGetPrice(qx,'dprice')
        kprice=zwx.stkGetPrice(qx,'kprice')
        dnum=zwx.xusrStkNum(qx,xcod)
        dcash=qx.qxUsr['cash'];
        #print(xtim,stknum,dnum,'xd',dcash,dprice,'b,%.2f,%.2f' %(dlow,dup))    
        if (dnum==0)and(dprice<dlow):
            stknum = int(dcash /dprice*qx.stkKCash);dsum=stknum*kprice
            if qx.debugMod>0:
                print(xtim,stknum,dnum,'++,%.2f,%.2f,%.2f,$,%.2f,%.2f' %(dprice,dlow,dup,kprice,dsum))    
        elif (dnum>0)and(dprice>dup):
            stknum = -1;dsum=dnum*kprice
            if qx.debugMod>0:
                print(xtim,stknum,dnum,'--,%.2f,%.2f,%.2f,$,%.2f,%.2f' %(dprice,dlow,dup,kprice,dsum))    
            
        #
        if stknum!=0:    
            #print(xtim,stknum,'xd',xcod,dprice,dcash)    
            pass;
        
    return stknum
def tur10(qx):
    '''
    策略说明
     Args:
        qx (zwQuantX): zwQuantX数据包

    '''
    stknum=0;
    xtim,xcod=qx.xtim,qx.stkCode;
    dprice=zwx.stkGetVars(qx,'dprice')
    xnum=zwx.xusrStkNum(qx,xcod);
    #
    ksma='ma_%d' %qx.staVars[1]
    dsma=qx.xbarWrk[ksma][0]
    #
    if (dprice>dsma)and(xnum==0):
        stknum=10;
        print('buy',xtim,dprice,dsma,xnum);
    if (dprice<=dsma)and(xnum>0):
        stknum=-1;
        print('sell',xtim,dprice,dsma,xnum);
    #
    return stknum