美文网首页简友广场多才多艺
量化 | 基础框架(中)

量化 | 基础框架(中)

作者: opcc | 来源:发表于2021-09-01 08:16 被阅读0次

    策略

    收益多少就靠策略好坏了,策略又是建立在各种指标之上。有个叫TA-Lib的库是专门用于金融数据分析的,提供很多常用指标和K线模式识别。

    import talib
    close_p = stock_zh_a_daily_hfq_df.close.values
    #MAType: 0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 6=KAMA, 7=MAMA, 8=T3
    ma = talib.MA(close_p, timeperiod=3, matype=0)
    print([round(i,2) for i in ma])
    
    图片

    策略的结果就是返回这一周期的数据是否满足条件,如果满足,就执行买卖操作。具体策略编写在回测系统里一并说,现在就了解它的作用。回测系统
    首先它需要对数据进行切片,一般是日K线,用for循环遍历历史数据,然后分析每天的数据是否满足策略。这里还有个窗口概念,比如分析当日数据时,还需要前5日的数据,那么每次循环的窗口是[i-5,i]。当满足买卖条件时,按指定的仓位或数量算出剩余资金,并记录盈亏数,如有其它评价指标需要某些数据,就在此设置。此外还有手续费、滑点等仿真参数设置。

    def Sar(df,ma,sar,cash):
        ma = df['close'].rolling(window=ma).mean()
        #sar = mySAR(df,s/100,m/100)
        status = md = lastc = shou = count = win = 0
        cash0 = cash
        m1 = np.empty(len(df))
        m2 = np.empty(len(df))
        m1[:] = m2[:] = np.nan
        for k in range(len(df)):
            if ma[k]>=sar[k] and ma[k-1]<sar[k-1] \
            and status==0 and np.isnan(m2[k-1]): 
                lastc = df.close[k]
                shou = int(cash0/lastc/100)
                buy = df.close[k]*shou*100
                status = 1 
                cash0 -= buy*1.007
                count += 1
                m1[k] = df.low[k]
                print('买入:%s'%cash0)
            if (ma[k]<=sar[k] and ma[k-1]>sar[k-1] or k==len(df)-1) and status==1:
                sell = df.close[k]*shou*100
                status = 0
                cash0 += sell
                chajia = df.close[k]-lastc
                lastmd = round((chajia)/lastc*100,2)
                if lastmd < md:
                    md = lastmd
                if chajia > 0:
                    win +=1
                m2[k] = df.high[k]
                print('卖出:%s'%cash0)
        if count == 0:
            sl = 0
        else:
            sl = round(win/count*100,2)
            lrl = round((cash0-cash)/cash*100,2)
        print('利润率:%s%%'%lrl)
        print('最大回撤:%s%%'%md)
        print('胜率:%s%%'%sl)
        return m1,m2
    
    图片

    请原谅我的英文拼音混用。另外策略直接写在回测函数里了,规范来说应该单拿出来作为一个函数,我这里是为了单独一个策略写的回测。这个简单回测里也没有加仓减仓的操作,只是一次性买入卖出。

    相关文章

      网友评论

        本文标题:量化 | 基础框架(中)

        本文链接:https://www.haomeiwen.com/subject/iqqxwltx.html