
该策略名为”DCA Booster (1 minute)“,是一个在1分钟时间框架上运行的高频交易策略。该策略结合了布林带和DCA(Dollar-Cost Averaging,美元成本平均法)两种技术,目的是利用市场波动进行多次买卖,试图获得利润。策略的主要思路是:当价格连续两个周期低于布林带下轨时,开始按照DCA方式分批建仓;当价格上穿布林带上轨时,平掉所有仓位。同时,该策略允许金字塔式加仓,即如果价格持续下跌,策略会继续加仓。
“DCA Booster (1 minute)“是一个结合布林带和DCA的高频交易策略,通过在价格低于布林带下轨时分批建仓,在价格上穿布林带上轨时平仓,以此来捕捉市场波动,试图获利。该策略允许金字塔加仓,但同时也面临着市场剧烈波动和过度暴露的风险。通过引入止损、优化加仓逻辑、结合其他指标以及参数优化等方法,可以进一步改进该策略的表现。
/*backtest
start: 2024-02-27 00:00:00
end: 2024-03-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("DCA Booster (1 minute)",
overlay=true )
// Parameters for Bollinger Bands
length = input.int(50, title="BB Length")
mult = input.float(3.0, title="BB Mult")
// Bollinger Bands calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev
// Variables for DCA
cantidad_dolares = 50000
orden1 = cantidad_dolares / close
orden2 = orden1 * 1.2
orden3 = orden2 * 1.3
orden4 = orden3 * 1.5
orden5 = orden4 * 1.5
// Variables for tracking purchases
var comprado1 = false
var comprado2 = false
var comprado3 = false
var comprado4 = false
var comprado5 = false
// Buy conditions
condicion_compra1 = close < lower and close[1] < lower[1] and not comprado1
condicion_compra2 = close < lower and close[1] < lower[1] and comprado1 and not comprado2
condicion_compra3 = close < lower and close[1] < lower[1] and comprado2 and not comprado3
condicion_compra4 = close < lower and close[1] < lower[1] and comprado3 and not comprado4
condicion_compra5 = close < lower and close[1] < lower[1] and comprado4 and not comprado5
// Variables de control
var int consecutive_closes_below_lower = 0
var int consecutive_closes_above_upper = 0
// Entry logic
if condicion_compra1 and barstate.isconfirmed
consecutive_closes_below_lower := consecutive_closes_below_lower + 1
if consecutive_closes_below_lower >= 2
strategy.entry("Compra1", strategy.long, qty=orden1)
comprado1 := true
consecutive_closes_below_lower := 0
if condicion_compra2 and barstate.isconfirmed
consecutive_closes_below_lower := consecutive_closes_below_lower + 1
if consecutive_closes_below_lower >= 2
strategy.entry("Compra2", strategy.long, qty=orden2)
comprado2 := true
consecutive_closes_below_lower := 0
if condicion_compra3 and barstate.isconfirmed
consecutive_closes_below_lower := consecutive_closes_below_lower + 1
if consecutive_closes_below_lower >= 2
strategy.entry("Compra3", strategy.long, qty=orden3)
comprado3 := true
consecutive_closes_below_lower := 0
if condicion_compra4 and barstate.isconfirmed
consecutive_closes_below_lower := consecutive_closes_below_lower + 1
if consecutive_closes_below_lower >= 2
strategy.entry("Compra4", strategy.long, qty=orden4)
comprado4 := true
consecutive_closes_below_lower := 0
if condicion_compra5 and barstate.isconfirmed
consecutive_closes_below_lower := consecutive_closes_below_lower + 1
if consecutive_closes_below_lower >= 2
strategy.entry("Compra5", strategy.long, qty=orden5)
comprado5 := true
consecutive_closes_below_lower := 0
// Sell conditions
if close > upper and comprado1 and barstate.isconfirmed
strategy.close("Compra1")
comprado1 := false
if close > upper and comprado2 and barstate.isconfirmed
strategy.close("Compra2")
comprado2 := false
if close > upper and comprado3 and barstate.isconfirmed
strategy.close("Compra3")
comprado3 := false
if close > upper and comprado4 and barstate.isconfirmed
strategy.close("Compra4")
comprado4 := false
if close > upper and comprado5 and barstate.isconfirmed
strategy.close("Compra5")
comprado5 := false