極值波動策略

設想得很好,在每次波動的極值點進行操做,用買入和賣出價格兩個數組記錄買入和賣出價格。這樣能夠保證每一個操做都盈利。數組

以一次價格低點爲例,從低到高,查詢賣出列表,若是匹配,說明前期的某個賣出操做已經能夠盈利,則買入,並刪除賣出數組中的記錄。從低到高搜索,能夠保證把最高的賣出價格留到後面,增長操做的容量。spa

若是賣出列表沒有對應操做,則查詢買入列表,若是臨近範圍已經有買入記錄,則不買,防止在某個價位反覆買入,若是該區間沒有買入記錄,則買入,並記錄。核心策略以下:blog

#分佈判斷,若是可行,修改g.long或g.short,返回True
#使用g.orderprice和g.mm判斷
def distcheck(): 
    jl=1   #預設的盈利距離
    idx=int(g.orderprice/g.step) #求出區間索引
    buycnt=len([x for x in g.buy if x>0])
    sellcnt=len([x for x in g.sell if x>0])
    
    if g.mm==1:  #買入
        #if buycnt-sellcnt>0:
            #return False
        for i in range((idx+jl),len(g.sell)):    #遍歷尋找
            if g.sell[i]>0:
                print("買入%.2f(%.2f)"%(g.orderprice,g.sell[i]))
                g.sell[i]=0
                return True
        if g.buy[idx]==0:
            g.buy[idx]=g.orderprice
            print("買入%.2f"%(g.orderprice))
            return True
    if g.mm==-1:  #賣出
        #if sellcnt-buycnt>0:
            #return False
        for i in range((idx-jl),0,-1):    #遍歷尋找
            if g.buy[i]>0:
                print("賣出%.2f(%.2f)"%(g.orderprice,g.buy[i]))
                g.buy[i]=0
                return True
        if g.sell[idx]==0:
            g.sell[idx]=g.orderprice
            print("賣出%.2f"%(g.orderprice))
            return True
            
    return False

這是回測的結果:索引

image

很不理想,這種操做,可能致使分化,買入列表最後都是一些高價,賣出列表都是低價,這是最後階段的列表get

image

不管是調整區間,仍是調整盈利預期,仍是保持兩個列表平衡,都不能有效改善。it

分析緣由:買賣的控制,儘管保證了每次買賣本身盈利了,但對於整體,或者兩個列表上「掛着」的交易來講,多是一種虧損。 搜索

相關文章
相關標籤/搜索