極值波動策略

  • 2019 年 10 月 8 日
  • 筆記

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

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

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

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

這是回測的結果:

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

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

分析原因:買賣的控制,儘管保證了每次買賣自己盈利了,但對於總體,或者兩個列表上「掛著」的交易來說,可能是一種虧損。