极值波动策略

设想得很好,在每次波动的极值点进行操做,用买入和卖出价格两个数组记录买入和卖出价格。这样能够保证每一个操做都盈利。数组

以一次价格低点为例,从低到高,查询卖出列表,若是匹配,说明前期的某个卖出操做已经能够盈利,则买入,并删除卖出数组中的记录。从低到高搜索,能够保证把最高的卖出价格留到后面,增长操做的容量。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

分析缘由:买卖的控制,尽管保证了每次买卖本身盈利了,但对于整体,或者两个列表上“挂着”的交易来讲,多是一种亏损。 搜索

相关文章
相关标签/搜索