1. 程式人生 > 其它 >策略探索1:微笑曲線結合BOLL線 應用於ETF

策略探索1:微笑曲線結合BOLL線 應用於ETF

這個策略適用於如下假設:

1.  ETF價格是以大波段震盪的,總有波峰和波谷。

2.  資金是可以持續買入的,總有錢在手。

 

波段有三種情況:

1.  上升趨勢:

 

 

 

2.  平盤寬幅震盪(長週期看這種情況比較多, 包含了1,3兩種情況, 微笑曲線主要是應用於這種情況)

 

3.  下降趨勢

 

 

策略中的主要引數為:

1.  買點開始點B到買入結束點B‘, 期間越跌買入越多,越漲買入越少(定投)。B點可以參考BOLL線底部和從最高點跌落下來的百分比(參考歷史經驗資料)

2.  賣點開始點S到賣出結束點S‘,期間越漲越賣,由於A股的特性一般賣點的時間都比較短,所以考慮按持股比例賣出。

 

演算法:

引數:週期 DurationInDays天, 最高點 HighestValue, 買入起始點 BuyPoint = HighestValue *  DropPercentForBuy,  賣出起始點 SellPoint = HighestValue * DropPercentForSell

初始買入股數: InitBuyQty, 持續買入加倉比例: BuyIncreasePercent , 賣出比例:SellPercent

   if (current_price < (1-g.dropPercentForBuy) * g.highestValue) and (cash > 0):
        
if current_price < previous_price: g.buyQty = g.buyQty * (g.buyIncreasePercent + 1) else: g.buyQty = g.buyQty / (g.buyIncreasePercent + 1) # The buy qty must be devided by 100 g.buyQty = math.ceil(g.buyQty / 100) * 100 log.info("Buying %s",(g.buyQty))
if g.buyQty > 0: order(security, g.buyQty) elif (current_price > (1-g.dropPercentForSell) * g.highestValue) and (security in context.portfolio.positions) and (context.portfolio.positions[security].closeable_amount > 0): sellQty = int(context.portfolio.positions[security].closeable_amount * g.sellPercent /100 / 100) * 100 if sellQty > 0: log.info("Selling :" + str(sellQty)) order(security, -1 * sellQty)

 接下來就是篩選合適的ETF和調整相應的引數來進行回測

酒 ETF: 週期選擇140天, 跌30%開始持續買入,上升到次高點的10%開始持續賣出

神奇的是Drop比例大概是停止在黃金分割點 61.8%附近

回測:

 

 

 

 這個收益並不理想, 所以還需要在大波段之間,根據BOLL線再進行微調。

繼續研究。