設想得很好,在每次波動的極值點進行操做,用買入和賣出價格兩個數組記錄買入和賣出價格。這樣能夠保證每一個操做都盈利。數組
以一次價格低點爲例,從低到高,查詢賣出列表,若是匹配,說明前期的某個賣出操做已經能夠盈利,則買入,並刪除賣出數組中的記錄。從低到高搜索,能夠保證把最高的賣出價格留到後面,增長操做的容量。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
這是回測的結果:索引
很不理想,這種操做,可能致使分化,買入列表最後都是一些高價,賣出列表都是低價,這是最後階段的列表get
不管是調整區間,仍是調整盈利預期,仍是保持兩個列表平衡,都不能有效改善。it
分析緣由:買賣的控制,儘管保證了每次買賣本身盈利了,但對於整體,或者兩個列表上「掛着」的交易來講,多是一種虧損。 搜索