该策略是一个基于价格下跌幅度进行加仓,并在达到固定盈利目标时平仓的网格交易策略。策略的核心逻辑是在市场下跌到预设幅度时进行买入,在价格反弹达到目标利润时进行整体平仓,通过不断重复这个过程来获取收益。这种策略特别适合在震荡市场中捕捉短期反弹机会。
策略采用了网格交易和定向止盈的复合机制: 1. 初始建仓:在设定的开始时间后,系统会在第一次触发时以当前价格进行首次建仓。 2. 加仓机制:当价格相对于初始建仓价格下跌超过预设的跌幅(默认5%)时,进行追加买入。 3. 平仓机制:当价格相对于初始建仓价格上涨超过预设的盈利目标(默认5%)时,系统会对所有持仓进行平仓。 4. 统计跟踪:系统会实时统计交易次数和累计利润,并在图表上动态显示。
这是一个结构简单但实用的网格交易策略,通过预设的下跌幅度进行分批建仓,在达到目标盈利时统一平仓。策略的核心优势在于其执行的确定性和风险的分散性,但在使用时需要注意市场环境的选择和参数的优化。通过增加动态止损、改进仓位管理等方式,策略还有较大的优化空间。在实盘使用时,建议先进行充分的回测,并结合市场实际情况进行参数调整。
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Buy Down 5%, Sell at 5% Profit", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)
// Inputs
initial_date = input(timestamp("2024-01-01 00:00:00"), title="Initial Purchase Date")
profit_target = input.float(5.0, title="Profit Target (%)", minval=0.1) // Target profit percentage
rebuy_drop = input.float(5.0, title="Rebuy Drop (%)", minval=0.1) // Drop percentage to rebuy
// Variables
var float initial_price = na // Initial purchase price
var int entries = 0 // Count of entries
var float total_profit = 0 // Cumulative profit
var bool active_trade = false // Whether an active trade exists
// Entry Condition: Buy on or after the initial date
if not active_trade
initial_price := close
strategy.entry("Buy", strategy.long)
entries += 1
active_trade := true
// Rebuy Condition: Buy if price drops 5% or more from the initial price
rebuy_price = initial_price * (1 - rebuy_drop / 100)
if active_trade and close <= rebuy_price
strategy.entry("Rebuy", strategy.long)
entries += 1
// Exit Condition: Sell if the price gives a 5% profit on the initial investment
target_price = initial_price * (1 + profit_target / 100)
if active_trade and close >= target_price
strategy.close_all(comment="Profit Target Hit")
active_trade := false
total_profit += profit_target
// Display information on the chart
plotshape(series=close >= target_price, title="Target Hit", style=shape.labelup, location=location.absolute, color=color.green, text="Sell")
plotshape(series=close <= rebuy_price, title="Rebuy", style=shape.labeldown, location=location.absolute, color=color.red, text="Rebuy")
// Draw statistics on the chart
var label stats_label = na
if (na(stats_label))
stats_label := label.new(x=bar_index, y=close, text="", style=label.style_none, size=size.small)
label.set_xy(stats_label, bar_index, close)
label.set_text(stats_label, "Entries: " + str.tostring(entries) + "\nTotal Profit: " + str.tostring(total_profit, "#.##") + "%")