
Esta estratégia é uma estratégia de negociação de grade que aumenta as posições com base na extensão do declínio de preço e fecha posições quando uma meta de lucro fixa é atingida. A lógica central da estratégia é comprar quando o mercado cai para uma faixa predefinida e fechar a posição geral quando o preço se recupera para atingir o lucro-alvo, além de obter lucros repetindo esse processo constantemente. Essa estratégia é particularmente adequada para capturar oportunidades de recuperação de curto prazo em mercados voláteis.
A estratégia usa um mecanismo composto de negociação em grade e obtenção de lucro direcional:
Esta é uma estratégia de negociação de grade simples, mas prática, que cria posições em lotes de acordo com o intervalo de declínio predefinido e fecha todas as posições quando o lucro alvo é atingido. A principal vantagem da estratégia está na certeza de execução e na diversificação de riscos, mas ao utilizá-la, deve-se prestar atenção à seleção do ambiente de mercado e à otimização dos parâmetros. Ainda há muito espaço para otimização da estratégia, adicionando stop loss dinâmico, melhorando o gerenciamento de posições, etc. Ao usá-lo em negociações reais, é recomendável realizar primeiro um backtesting suficiente e ajustar os parâmetros com base nas condições reais do mercado.
/*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, "#.##") + "%")