震动宝盒量化交易策略是一个利用 Darvas 箱体通道来捕捉市场趋势的短线交易策略。该策略主要依赖震动宝盒指标来判断市场走势和寻找交易机会。当价格突破宝盒上沿时,做多;当价格跌破宝盒下沿时,做空。同时,该策略还利用多种辅助指标来提高策略的稳定性。
以上多个指标综合判断之后进行入场。止损价格为宝盒的对边。止盈 EXIT 则利用 RVI 的方向性来关闭订单。
可以通过适当收紧止损位来降低风险。另外,辅助指标的参数也需要测试调整,使其起到最好的筛选作用。
震动宝盒量化交易策略总体来说是一种较为活跃的短线交易策略。它能及时捕捉市场的趋势变化,利用宝盒通道开仓;而辅助指标的配合则能提高决策的准确性。该策略风险收益特征积极,值得采用并不断优化。
/*backtest start: 2023-11-26 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © xxy_theone // https://www.youtube.com/watch?v=YYxlnFOX9sQ // This strategy script has been made to backtest the strategy explained in the video above //@version=5 strategy(shorttitle = "Darvas Box Test", title="TradeIQ Darvas Box Test", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, currency=currency.USD) // === INPUT BACKTEST RANGE === var GRP1 = "Backtest Range" fromDate = input(timestamp("7 Mar 2022 00:00 +0000"), "From", group=GRP1) toDate = input(timestamp("19 Mar 2022 23:59 +0000"), "To", group=GRP1) window() => true var GRP3 = "Darvas Box" boxp=input(5, "Box Length", group=GRP3) LL = ta.lowest(low,boxp) k1=ta.highest(high,boxp) k2=ta.highest(high,boxp-1) k3=ta.highest(high,boxp-2) NH = ta.valuewhen(high>k1[1],high,0) box1 =k3<k2 TopBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, NH, 0) BottomBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, LL, 0) plot(TopBox, linewidth=3, color=color.green, title="TBbox") plot(BottomBox, linewidth=3, color=color.red, title="BBbox") var GRP4 = "MavilimW" fmal=input(3,"First Moving Average length", group=GRP4) smal=input(5,"Second Moving Average length", group=GRP4) tmal=fmal+smal Fmal=smal+tmal Ftmal=tmal+Fmal Smal=Fmal+Ftmal M1= ta.wma(close, fmal) M2= ta.wma(M1, smal) M3= ta.wma(M2, tmal) M4= ta.wma(M3, Fmal) M5= ta.wma(M4, Ftmal) MAVW= ta.wma(M5, Smal) col1= MAVW>MAVW[1] col3= MAVW<MAVW[1] colorM = col1 ? color.blue : col3 ? color.red : color.yellow plot(MAVW, color=colorM, linewidth=2, title="MAVW") var GRP5 = "Relative Vigor Index" len = input.int(10, title="Length", minval=1, group=GRP5) rvi = math.sum(ta.swma(close-open), len)/math.sum(ta.swma(high-low),len) sig = ta.swma(rvi) offset = input.int(0, "Offset", minval = -500, maxval = 500, group=GRP5) //plot(rvi, color=#008000, title="RVGI", offset = offset) //plot(sig, color=#FF0000, title="Signal", offset = offset) var longStopSet = false long = ta.crossover(close,TopBox) and close > MAVW ? true : false longClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossunder(rvi,sig) ? true : false strategy.entry("Long Position", strategy.long, when = long and window() and strategy.position_size==0 and strategy.closedtrades<100) if(longStopSet==false and strategy.position_size > 0) strategy.exit("exit", "Long Position", stop=BottomBox) longStopSet := true if(strategy.position_size==0) longStopSet := false strategy.close("Long Position", when = longClose) var shortStopSet = false short = ta.crossunder(close,BottomBox) and close < MAVW ? true : false shortClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossover(rvi,sig) ? true : false strategy.entry("Short Position", strategy.short, when = short and window() and strategy.position_size==0 and strategy.closedtrades<100) if(shortStopSet==false and strategy.position_size < 0) strategy.exit("exit", "Short Position", stop=TopBox) shortStopSet := true if(strategy.position_size==0) shortStopSet := false strategy.close("Short Position", when = shortClose)