Торговая стратегия William Alligator с многоуровневым подтверждением в сочетании с RSI

RSI SMA 威廉鳄鱼指标 相对强弱指标 交叉确认
Дата создания: 2025-08-19 12:00:45 Последнее изменение: 2025-08-19 12:00:45
Копировать: 0 Количество просмотров: 274
2
Подписаться
319
Подписчики

Торговая стратегия William Alligator с многоуровневым подтверждением в сочетании с RSI Торговая стратегия William Alligator с многоуровневым подтверждением в сочетании с RSI

Обзор

Стратегия является многоуровневой системой подтверждения торговли, основанной на William Alligator и относительно сильном RSI, и предназначена для 15-минутных временных циклов. Стратегия генерирует торговый сигнал, оценивая позиционную связь цены с треугольниками РСИ, а также числовые значения RSI.

Стратегический принцип

Основные принципы стратегии основаны на комплексном использовании индексов Уильяма Стрельца и RSI. Индикатор Уильяма Стрельца состоит из трёх равномерных линий: кристаллическая линия (синий, 13-циклическая SMA, 8-циклическая задержка), зубная линия (красная, 8-циклическая SMA, 5-циклическая задержка) и липовая линия (зеленая, 5-циклическая SMA, 3-циклическая задержка).

Когда липса находится над зубной линией, а зубная - над косой линией, это указывает на то, что рынок находится в восходящем тренде; наоборот, когда липса находится ниже зубной линии, а зубная - ниже косой линии, это указывает на то, что рынок находится в нисходящем тренде. В то же время, эта стратегия также подтверждается в сочетании с индикатором RSI, RSI больше, чем 55 часов поддержки, и меньше, чем 45 часов поддержки, что дает дополнительный сигнал подтверждения для торговых решений.

В процессе выполнения стратегии система будет контролировать несколько условий остановки: для многоочередных позиций, когда RSI опускается ниже 50 и закрытие цены опускается ниже зубной или губной линии; для пустых позиций, когда RSI опускается ниже 50 и закрытие цены опускается ниже зубной или губной линии.

Стратегические преимущества

  1. Механизм многократного подтверждения: Эта стратегия требует одновременного выполнения четырех условий для входа, эффективно уменьшает ложные сигналы и повышает качество торгов. Трехлинейный ряд индикатора Вильгельма Скрипаля подтверждает направление тенденции, а значение RSI подтверждает динамику.

  2. Четкие правила входа и выхода“Стратегия обеспечивает четкие сигналы входа и выхода, уменьшает субъективные суждения и делает процесс торговли более регламентированным и дисциплинированным”.

  3. Идеальный контроль риска: Стратегия устанавливает множество условий для остановки, включая обратные сигналы на основе RSI, изменения в отношении цены к зубной линии и изменения в отношении местоположения губной линии к зубной линии. Этот многоуровневый механизм управления риском помогает своевременно остановить убытки и контролировать максимальный риск для отдельных сделок.

  4. Визуализация отзывовСтратегия: на графике помечены сигналы покупки, продажи, остановки и прибыль, и в реальном времени на таблице показано, как выполняются все условия, что значительно повышает уровень визуализации процесса торговли.

  5. Высокая степень адаптации: Хотя параметры стратегии настроены по умолчанию, все ключевые параметры могут быть скорректированы с помощью ввода, что позволяет трейдерам оптимизировать их в соответствии с различными рыночными условиями или личными предпочтениями.

Стратегический риск

  1. Частые сделки на небольшом рынкеПри небольших рыночных колебаниях цены могут часто пересекать рыбную линию, а RSI также может колебаться около критических значений, что приводит к чрезмерному количеству торговых сигналов и частым входам и выходам, что увеличивает торговые издержки. Решение заключается в добавлении условий подтверждения или продлении времени наблюдения.

  2. Опасность скольжения в быстром и резком движенииПри появлении значительных новостей на рынке, которые приводят к быстрому и значительному колебанию цены, фактическая цена сделки может иметь большую разрыв с ценой, которая была на момент подачи сигнала, что увеличивает риск скольжения. Рекомендуется использовать эту стратегию с осторожностью или приостановить ее до появления значительных данных.

  3. Цели прибыли консервативныСтратегия устанавливает целевую прибыль на 2 минимальные единицы изменения, что может быть слишком консервативным и не позволяет в полной мере уловить тенденционную ситуацию на рынке с большой волатильностью. Можно рассмотреть возможность динамической корректировки целевой прибыли в зависимости от волатильности рынка или использовать стратегию по зачистке запасов.

  4. Отставание по показателямИндекс William Herschel и RSI имеют определенную отсталость и могут не успеть вовремя уловить повороты, когда рынок быстро меняется. Рекомендуется использовать вспомогательные суждения в сочетании с другими ведущими показателями или анализом поведения цен.

  5. Параметр Чувствительность: Стратегическая производительность чувствительна к параметрам, особенно к установке порога RSI. Различные комбинации параметров могут работать по-разному в разных рыночных условиях, и необходимо найти оптимальную комбинацию параметров путем обратной связи.

Направление оптимизации стратегии

  1. Динамический RSI: текущая стратегия использует фиксированные рубежи RSI ((55 и 45), можно рассмотреть возможность корректировки этих рубежей в зависимости от динамики волатильности рынка. Используйте более мягкие рубежи в высоко волатильных рынках, используйте более строгие рубежи в низко волатильных рынках, чтобы адаптироваться к различным рыночным условиям.

  2. Добавление фильтров транзакцийВведение подтверждения объема торгов, фильтрации волатильности или индикатора силы тренда, фильтрации слабых сигналов в колеблющихся рынках, вхождение в рынок только при четкой тенденции, повышение шансов на победу.

  3. Оптимизация стратегий по борьбе с туберкулезомВ настоящее время фиксированная 2-тиковая стоп-стратегия слишком проста, можно рассмотреть возможность применения динамической стоп-стратегии, такой как стоп-трек или стоп-стоп на основе ATR (средняя реальная величина колебаний), чтобы получить больше прибыли в условиях сильного тренда.

  4. Фильтр времениДополнительная функция фильтрации времени, чтобы избежать ненужных рисков в периоды с низкой ликвидностью или необычными колебаниями, например, в течение 15 минут до начала и после начала торгов или в период публикации важных данных.

  5. Оптимизация управления капиталомВ настоящее время в стратегии используется фиксированная доля средств ((100%) для торговли, можно рассматривать возможность динамического изменения размеров позиций в зависимости от рыночной волатильности или изменения чистой стоимости счетов, для более научного управления средствами.

Подвести итог

Многоуровневая подтверждающая торговая стратегия, объединенная с RSI, представляет собой хорошо структурированную, логически четкую торговую систему, которая создает многоуровневую торговую рамку для принятия решений путем интеграции способности определять тенденции индикатора William Whale и функции подтверждения динамики RSI. Основные преимущества этой стратегии заключаются в многоуровневом механизме подтверждения и хорошем контроле риска, но она также сталкивается с такими проблемами, как избыток шокирующих рыночных сигналов, риск проскальзывания и консервативность прибыльных целей.

Эта стратегия может способствовать дальнейшему повышению ее стабильности и прибыльности путем динамической корректировки RSI, добавления торговых фильтров, оптимизации стратегии стоп-стоп, добавления временных фильтров и улучшения управления капиталом. В целом, это количественная торговая стратегия с практической ценностью, подходящая для трейдеров, которые имеют некоторое знание технических показателей и хотят получить стабильную прибыль на рынке фьючерсов.

Исходный код стратегии
/*backtest
start: 2024-08-19 00:00:00
end: 2025-08-18 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"ETH_USDT","balance":5000}]
*/

//@version=5
strategy("Natural Gas Alligator RSI Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// =====================================
// INPUTS
// =====================================
// Williams Alligator Settings (default)
jaw_length = input.int(13, title="Jaw Length", minval=1)
jaw_offset = input.int(8, title="Jaw Offset", minval=0)
teeth_length = input.int(8, title="Teeth Length", minval=1)
teeth_offset = input.int(5, title="Teeth Offset", minval=0)
lips_length = input.int(5, title="Lips Length", minval=1)
lips_offset = input.int(3, title="Lips Offset", minval=0)

// RSI Settings (default)
rsi_length = input.int(14, title="RSI Length", minval=1)

// Natural Gas tick size (typically 0.001)
tick_size = input.float(0.001, title="Tick Size", minval=0.0001, step=0.0001)

// =====================================
// INDICATORS
// =====================================
// Williams Alligator
jaw = ta.sma(hl2, jaw_length)[jaw_offset]
teeth = ta.sma(hl2, teeth_length)[teeth_offset]
lips = ta.sma(hl2, lips_length)[lips_offset]

// RSI
rsi = ta.rsi(close, rsi_length)

// =====================================
// PLOT INDICATORS
// =====================================
plot(jaw, "Alligator Jaw", color=color.blue, linewidth=2)
plot(teeth, "Alligator Teeth", color=color.red, linewidth=2)
plot(lips, "Alligator Lips", color=color.green, linewidth=2)

// RSI (plotted in separate pane)
hline(50, "RSI Mid Line", color=color.gray, linestyle=hline.style_dashed)
hline(55, "RSI Buy Level", color=color.green, linestyle=hline.style_dotted)
hline(45, "RSI Sell Level", color=color.red, linestyle=hline.style_dotted)
plot(rsi, "RSI", color=color.purple)

// =====================================
// STRATEGY CONDITIONS
// =====================================

// Buy Conditions
buy_condition_1 = close > lips
buy_condition_2 = lips > teeth
buy_condition_3 = teeth > jaw
buy_condition_4 = rsi > 55

buy_signal = buy_condition_1 and buy_condition_2 and buy_condition_3 and buy_condition_4

// Sell Conditions
sell_condition_1 = close < lips
sell_condition_2 = lips < teeth
sell_condition_3 = teeth < jaw
sell_condition_4 = rsi < 45

sell_signal = sell_condition_1 and sell_condition_2 and sell_condition_3 and sell_condition_4

// Stop Loss Conditions for Long Position
long_stop_condition_1 = rsi < 50
long_stop_condition_2 = ta.crossunder(close, teeth)
long_stop_condition_3 = lips < teeth

long_stop_loss = long_stop_condition_1 or long_stop_condition_2 or long_stop_condition_3

// Stop Loss Conditions for Short Position
short_stop_condition_1 = rsi > 50
short_stop_condition_2 = ta.crossover(close, teeth)
short_stop_condition_3 = lips > teeth

short_stop_loss = short_stop_condition_1 or short_stop_condition_2 or short_stop_condition_3

// =====================================
// STRATEGY EXECUTION
// =====================================

// Variables to track entry prices
var float long_entry_price = na
var float short_entry_price = na

// Long Entry
if buy_signal and strategy.position_size == 0
    strategy.entry("Long", strategy.long)
    long_entry_price := close
    alert("Buy Signal Generated", alert.freq_once_per_bar)

// Short Entry
if sell_signal and strategy.position_size == 0
    strategy.entry("Short", strategy.short)
    short_entry_price := close
    alert("Sell Signal Generated", alert.freq_once_per_bar)

// Long Exit Conditions
if strategy.position_size > 0
    // Take Profit: 2 ticks above entry
    long_take_profit = long_entry_price + (2 * tick_size)
    
    if close >= long_take_profit
        strategy.close("Long", comment="Take Profit")
        alert("Take Profit - Long Position Closed", alert.freq_once_per_bar)
        long_entry_price := na
    
    // Stop Loss
    if long_stop_loss
        strategy.close("Long", comment="Stop Loss")
        alert("Stop Loss - Long Position Closed", alert.freq_once_per_bar)
        long_entry_price := na

// Short Exit Conditions
if strategy.position_size < 0
    // Take Profit: 2 ticks below entry
    short_take_profit = short_entry_price - (2 * tick_size)
    
    if close <= short_take_profit
        strategy.close("Short", comment="Take Profit")
        alert("Take Profit - Short Position Closed", alert.freq_once_per_bar)
        short_entry_price := na
    
    // Stop Loss
    if short_stop_loss
        strategy.close("Short", comment="Stop Loss")
        alert("Stop Loss - Short Position Closed", alert.freq_once_per_bar)
        short_entry_price := na

// =====================================
// CHART LABELS AND ALERTS
// =====================================

// Buy Signal Label
if buy_signal and strategy.position_size == 0
    label.new(bar_index, low - (high - low) * 0.1, "BUY\nSIGNAL", 
              color=color.green, style=label.style_label_up, 
              textcolor=color.white, size=size.small)

// Sell Signal Label
if sell_signal and strategy.position_size == 0
    label.new(bar_index, high + (high - low) * 0.1, "SELL\nSIGNAL", 
              color=color.red, style=label.style_label_down, 
              textcolor=color.white, size=size.small)

// Stop Loss Labels
if strategy.position_size > 0 and long_stop_loss
    label.new(bar_index, high + (high - low) * 0.1, "STOP\nLOSS", 
              color=color.orange, style=label.style_label_down, 
              textcolor=color.white, size=size.small)

if strategy.position_size < 0 and short_stop_loss
    label.new(bar_index, low - (high - low) * 0.1, "STOP\nLOSS", 
              color=color.orange, style=label.style_label_up, 
              textcolor=color.white, size=size.small)

// Take Profit Labels
if strategy.position_size > 0 and not na(long_entry_price) and close >= (long_entry_price + (2 * tick_size))
    label.new(bar_index, high + (high - low) * 0.1, "TAKE\nPROFIT", 
              color=color.blue, style=label.style_label_down, 
              textcolor=color.white, size=size.small)

if strategy.position_size < 0 and not na(short_entry_price) and close <= (short_entry_price - (2 * tick_size))
    label.new(bar_index, low - (high - low) * 0.1, "TAKE\nPROFIT", 
              color=color.blue, style=label.style_label_up, 
              textcolor=color.white, size=size.small)

// =====================================
// TABLE FOR CURRENT CONDITIONS
// =====================================
var table info_table = table.new(position.top_right, 2, 8, bgcolor=color.white, border_width=1)

if barstate.islast
    table.cell(info_table, 0, 0, "Condition", bgcolor=color.gray, text_color=color.white)
    table.cell(info_table, 1, 0, "Status", bgcolor=color.gray, text_color=color.white)
    
    table.cell(info_table, 0, 1, "Close > Lips", bgcolor=color.white)
    table.cell(info_table, 1, 1, buy_condition_1 ? "✓" : "✗", text_color=buy_condition_1 ? color.green : color.red)
    
    table.cell(info_table, 0, 2, "Lips > Teeth", bgcolor=color.white)
    table.cell(info_table, 1, 2, buy_condition_2 ? "✓" : "✗", text_color=buy_condition_2 ? color.green : color.red)
    
    table.cell(info_table, 0, 3, "Teeth > Jaw", bgcolor=color.white)
    table.cell(info_table, 1, 3, buy_condition_3 ? "✓" : "✗", text_color=buy_condition_3 ? color.green : color.red)
    
    table.cell(info_table, 0, 4, "RSI > 55", bgcolor=color.white)
    table.cell(info_table, 1, 4, buy_condition_4 ? "✓" : "✗", text_color=buy_condition_4 ? color.green : color.red)
    
    table.cell(info_table, 0, 5, "RSI < 45", bgcolor=color.white)
    table.cell(info_table, 1, 5, sell_condition_4 ? "✓" : "✗", text_color=sell_condition_4 ? color.red : color.green)
    
    table.cell(info_table, 0, 6, "Current RSI", bgcolor=color.white)
    table.cell(info_table, 1, 6, str.tostring(math.round(rsi, 2)), text_color=color.black)
    
    table.cell(info_table, 0, 7, "Position", bgcolor=color.white)
    position_text = strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "NONE"
    position_color = strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : color.gray
    table.cell(info_table, 1, 7, position_text, text_color=position_color)