
Esta estratégia é um sistema de negociação quantitativa baseado no indicador RSI e no princípio da regressão do valor médio. Capta oportunidades de reversão do mercado identificando situações de sobrevenda e sobrevenda no mercado, combinando a amplitude de flutuação dos preços e a posição de fechamento. A ideia central da estratégia é encontrar oportunidades de retorno após a ocorrência de situações extremas no mercado e gerenciar o risco através da definição de condições rigorosas de entrada e de stop loss dinâmico.
A estratégia usa um mecanismo de filtragem múltipla para determinar os sinais de negociação: primeiro, é necessário que o preço crie 10 novos baixos de ciclo, indicando que o mercado está em um estado de sobrevenda; em seguida, é necessário que o alcance de flutuação dos preços no dia seja de cerca de 10 dias de negociação, indicando que a flutuação do mercado está aumentando; finalmente, a reversão potencial é confirmada por julgar se o preço de fechamento está no quarto superior do intervalo de preços do dia.
Esta é uma estratégia de retorno do valor médio de uma estrutura completa e lógica clara. Através de filtragem de condições múltiplas e gestão de stop loss dinâmica, a estratégia, ao mesmo tempo em que controla o risco, é capaz de capturar efetivamente as oportunidades de rebote do mercado. Embora existam algumas limitações, o desempenho geral da estratégia ainda tem espaço para ser melhorado com otimização e aperfeiçoamento razoáveis.
/*backtest
start: 2024-11-04 00:00:00
end: 2024-12-04 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Larry Conners SMTP Strategy", overlay=true, margin_long=100, margin_short=100)
// --- Inputs ---
// Corrected the input type declaration by removing 'type='
tickSize = input.float(0.01, title="Tick Size (e.g., 1/8 for stocks)")
// --- Calculate conditions ---
// 1. Today the market must make a 10-period low
low10 = ta.lowest(low, 10)
is10PeriodLow = low == low10
// 2. Today's range must be the largest of the past 10 bars
rangeToday = high - low
maxRange10 = ta.highest(high - low, 10)
isLargestRange = rangeToday == maxRange10
// 3. Today's close must be in the top 25 percent of today's range
rangePercent = (close - low) / rangeToday
isCloseInTop25 = rangePercent >= 0.75
// Combine all buy conditions
buyCondition = is10PeriodLow and isLargestRange and isCloseInTop25
// --- Buy Entry (on the next day) ---
var float buyPrice = na
var bool orderPending = false
var float stopLoss = na // Initialize stopLoss at the top level to avoid 'Undeclared identifier' errors
if (buyCondition and strategy.position_size == 0)
buyPrice := high + tickSize
stopLoss := low
orderPending := true
// Condition to place buy order the next day or the day after
if orderPending and ta.barssince(buyCondition) <= 2
strategy.entry("Buy", strategy.long, stop=buyPrice)
orderPending := false
// --- Stop-Loss and Trailing Stop ---
if (strategy.position_size > 0)
stopLoss := math.max(stopLoss, low) // Move stop to higher lows (manual trailing)
strategy.exit("Exit", from_entry="Buy", stop=stopLoss)
// --- Plotting ---
// Highlight buy conditions
bgcolor(buyCondition ? color.new(color.green, 50) : na)
//plotshape(series=buyCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="Buy Setup")
// Plot Stop-Loss level for visualization
//plot(strategy.position_size > 0 ? stopLoss : na, color=color.red, linewidth=2, title="Stop-Loss Level")