策略探索1:微笑曲線結合BOLL線 應用於ETF
阿新 • • 發佈:2022-04-04
這個策略適用於如下假設:
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線再進行微調。
繼續研究。