zoukankan      html  css  js  c++  java
  • 极值波动策略

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

    以一次价格低点为例,从低到高,查询卖出列表,如果匹配,说明前期的某个卖出操作已经可以盈利,则买入,并删除卖出数组中的记录。从低到高搜索,可以保证把最高的卖出价格留到后面,增加操作的容量。

    如果卖出列表没有对应操作,则查询买入列表,如果临近范围已经有买入记录,则不买,防止在某个价位反复买入,如果该区间没有买入记录,则买入,并记录。核心策略如下:

    #分布判断,如果可行,修改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

    很不理想,这种操作,可能导致分化,买入列表最后都是一些高价,卖出列表都是低价,这是最后阶段的列表

    image

    无论是调整区间,还是调整盈利预期,还是保持两个列表平衡,都不能有效改善。

    分析原因:买卖的控制,尽管保证了每次买卖自己盈利了,但对于总体,或者两个列表上“挂着”的交易来说,可能是一种亏损。

  • 相关阅读:
    SQL 生成可配置流水号
    安卓程序进入后台和前台的判断
    Android代码故事第一回,平均间隔的按钮
    安卓冷知识:LayoutParams
    初识Android NDK
    搬家
    LaTeX表格紧跟文字 (不影响下方文本对齐)
    FlagCounter被封杀?自己实现一个简单的多国访客计数器
    Python+OpenCV竖版古籍文字分割
    Ubuntu18.04 显卡驱动+Cuda安装踩坑记录 以及Ubuntu虚拟内存的添加
  • 原文地址:https://www.cnblogs.com/jetz/p/11375820.html
Copyright © 2011-2022 走看看