Эта стратегия является количественной торговой системой, основанной на индикаторе RSI и принципах среднего реверсии. Она определяет возможности реверсии рынка путем обнаружения условий перекупления и перепродажи в сочетании с анализом диапазона цен и закрытия ценовой позиции.
Стратегия использует несколько механизмов фильтрации для определения торговых сигналов: во-первых, цена должна достичь минимума за 10 периодов, что указывает на состояние перепроданного рынка; во-вторых, диапазон цен на день должен быть самым большим за последние 10 торговых дней, что указывает на повышенную волатильность рынка; наконец, он подтверждает потенциальные сигналы обратного движения, проверяя, находится ли цена закрытия в верхнем квартиле диапазона дня. Вход выполняется с помощью подтверждения прорыва, идя длинный, если цена превышает предыдущий максимум в течение 2 дней после выполнения торговых условий. Стоп-лосс реализуется с помощью механизма задержки для защиты прибыли.
Это хорошо структурированная стратегия реверсии среднего с четкой логикой. Благодаря фильтрации нескольких условий и динамическому управлению стоп-лоссами стратегия эффективно захватывает возможности перепроданного рынка при одновременном контроле риска. Хотя она имеет некоторые ограничения, общая производительность может быть улучшена путем разумной оптимизации и усовершенствования. Инвесторам рекомендуется корректировать параметры на основе специфических характеристик рынка и их толерантности к риску при применении стратегии в живой торговле.
/*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")