
Esta estratégia é um sistema de negociação quantitativa que combina o sinal de cruzamento do MACD de vários níveis de tempo com o nível de pressão de suporte dinâmico de 52 semanas de alta e baixa. A estratégia confirma os sinais de negociação através do cruzamento dos indicadores MACD de dois períodos de tempo, o dia e o dia, e usa a linha de pressão de suporte dinâmico de 52 semanas de alta e baixa para auxiliar na tomada de decisões de negociação mais robustas.
A estratégia baseia-se principalmente na seguinte lógica central:
A estratégia constrói um sistema de negociação de acompanhamento de tendências completo, combinando sinais de cruzamento de MACD de vários quadros temporais com uma linha de pressão de suporte dinâmico de 52 semanas de alta e baixa. A vantagem da estratégia reside na confiabilidade da confirmação de sinais e na integridade do controle de risco, mas ainda é necessário prestar atenção ao risco de mercados turbulentos e de atraso.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MACD Bitcoin strategy con 52W High/Low (linee estese)", overlay=true)
// === MACD SETTINGS ===
fastLength = 12
slowLength = 26
signalSmoothing = 9
// Funzione per ottenere i valori MACD
getMACD(source, timeframe) =>
[macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)
[macdLine, signalLine]
// Valori MACD Settimanali
[macdWeekly, signalWeekly] = request.security(syminfo.tickerid, "W", getMACD(close, "W"), lookahead=barmerge.lookahead_on)
// Valori MACD Giornalieri
[macdDaily, signalDaily] = getMACD(close, "D")
// Variabile per lo stop loss
var float lowOfSignalCandle = na
// Condizione per l'ingresso
longConditionWeekly = ta.crossover(macdWeekly, signalWeekly)
exitConditionDaily = ta.crossunder(macdDaily, signalDaily)
// Imposta Stop Loss sulla candela giornaliera
if (exitConditionDaily)
lowOfSignalCandle := low
// Condizione di ingresso nel trade
enterTradeCondition = macdWeekly > signalWeekly and ta.crossover(macdDaily, signalDaily)
if (enterTradeCondition)
strategy.entry("MACD Long", strategy.long)
if (not na(lowOfSignalCandle))
strategy.exit("Stop Loss", "MACD Long", stop=lowOfSignalCandle)
if (strategy.position_size == 0)
lowOfSignalCandle := na
// // === 52 WEEK HIGH/LOW SETTINGS ===
// // Input per selezionare tra Highs/Lows o Close
// high_low_close = input.string(defval="Highs/Lows", title="Base 52 week values on candle:", options=["Highs/Lows", "Close"])
// // Calcolo dei valori delle 52 settimane
// weekly_hh = request.security(syminfo.tickerid, "W", ta.highest(high, 52), lookahead=barmerge.lookahead_on)
// weekly_ll = request.security(syminfo.tickerid, "W", ta.lowest(low, 52), lookahead=barmerge.lookahead_on)
// weekly_hc = request.security(syminfo.tickerid, "W", ta.highest(close, 52), lookahead=barmerge.lookahead_on)
// weekly_lc = request.security(syminfo.tickerid, "W", ta.lowest(close, 52), lookahead=barmerge.lookahead_on)
// // Selezione dei valori in base all'input
// high_plot = high_low_close == "Highs/Lows" ? weekly_hh : weekly_hc
// low_plot = high_low_close == "Highs/Lows" ? weekly_ll : weekly_lc
// // === LINEE ORIZZONTALI ESTESE FINO AL PREZZO ATTUALE ===
// var line highLine = na
// var line lowLine = na
// // Linea Orizzontale per il 52W High
// if (na(highLine))
// highLine := line.new(bar_index, high_plot, bar_index + 1, high_plot, color=color.green, width=2, style=line.style_dashed, extend=extend.right)
// else
// line.set_y1(highLine, high_plot)
// line.set_y2(highLine, high_plot)
// // Linea Orizzontale per il 52W Low
// if (na(lowLine))
// lowLine := line.new(bar_index, low_plot, bar_index + 1, low_plot, color=color.red, width=2, style=line.style_dashed, extend=extend.right)
// else
// line.set_y1(lowLine, low_plot)
// line.set_y2(lowLine, low_plot)
// // Etichette per le linee orizzontali
// var label highLabel = na
// var label lowLabel = na
// if (na(highLabel))
// highLabel := label.new(bar_index, high_plot, "52W High", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.small)
// else
// label.set_y(highLabel, high_plot)
// label.set_x(highLabel, bar_index)
// if (na(lowLabel))
// lowLabel := label.new(bar_index, low_plot, "52W Low", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.small)
// else
// label.set_y(lowLabel, low_plot)
// label.set_x(lowLabel, bar_index)
// // Tracciamento delle Linee Estese
// plot(high_plot, title="52W High", color=color.green, style=plot.style_linebr)
// plot(low_plot, title="52W Low", color=color.red, style=plot.style_linebr)