
Стратегия является многоуровневой системой подтверждения торговли, основанной на William Alligator и относительно сильном RSI, и предназначена для 15-минутных временных циклов. Стратегия генерирует торговый сигнал, оценивая позиционную связь цены с треугольниками РСИ, а также числовые значения RSI.
Основные принципы стратегии основаны на комплексном использовании индексов Уильяма Стрельца и RSI. Индикатор Уильяма Стрельца состоит из трёх равномерных линий: кристаллическая линия (синий, 13-циклическая SMA, 8-циклическая задержка), зубная линия (красная, 8-циклическая SMA, 5-циклическая задержка) и липовая линия (зеленая, 5-циклическая SMA, 3-циклическая задержка).
Когда липса находится над зубной линией, а зубная - над косой линией, это указывает на то, что рынок находится в восходящем тренде; наоборот, когда липса находится ниже зубной линии, а зубная - ниже косой линии, это указывает на то, что рынок находится в нисходящем тренде. В то же время, эта стратегия также подтверждается в сочетании с индикатором RSI, RSI больше, чем 55 часов поддержки, и меньше, чем 45 часов поддержки, что дает дополнительный сигнал подтверждения для торговых решений.
В процессе выполнения стратегии система будет контролировать несколько условий остановки: для многоочередных позиций, когда RSI опускается ниже 50 и закрытие цены опускается ниже зубной или губной линии; для пустых позиций, когда RSI опускается ниже 50 и закрытие цены опускается ниже зубной или губной линии.
Механизм многократного подтверждения: Эта стратегия требует одновременного выполнения четырех условий для входа, эффективно уменьшает ложные сигналы и повышает качество торгов. Трехлинейный ряд индикатора Вильгельма Скрипаля подтверждает направление тенденции, а значение RSI подтверждает динамику.
Четкие правила входа и выхода“Стратегия обеспечивает четкие сигналы входа и выхода, уменьшает субъективные суждения и делает процесс торговли более регламентированным и дисциплинированным”.
Идеальный контроль риска: Стратегия устанавливает множество условий для остановки, включая обратные сигналы на основе RSI, изменения в отношении цены к зубной линии и изменения в отношении местоположения губной линии к зубной линии. Этот многоуровневый механизм управления риском помогает своевременно остановить убытки и контролировать максимальный риск для отдельных сделок.
Визуализация отзывовСтратегия: на графике помечены сигналы покупки, продажи, остановки и прибыль, и в реальном времени на таблице показано, как выполняются все условия, что значительно повышает уровень визуализации процесса торговли.
Высокая степень адаптации: Хотя параметры стратегии настроены по умолчанию, все ключевые параметры могут быть скорректированы с помощью ввода, что позволяет трейдерам оптимизировать их в соответствии с различными рыночными условиями или личными предпочтениями.
Частые сделки на небольшом рынкеПри небольших рыночных колебаниях цены могут часто пересекать рыбную линию, а RSI также может колебаться около критических значений, что приводит к чрезмерному количеству торговых сигналов и частым входам и выходам, что увеличивает торговые издержки. Решение заключается в добавлении условий подтверждения или продлении времени наблюдения.
Опасность скольжения в быстром и резком движенииПри появлении значительных новостей на рынке, которые приводят к быстрому и значительному колебанию цены, фактическая цена сделки может иметь большую разрыв с ценой, которая была на момент подачи сигнала, что увеличивает риск скольжения. Рекомендуется использовать эту стратегию с осторожностью или приостановить ее до появления значительных данных.
Цели прибыли консервативныСтратегия устанавливает целевую прибыль на 2 минимальные единицы изменения, что может быть слишком консервативным и не позволяет в полной мере уловить тенденционную ситуацию на рынке с большой волатильностью. Можно рассмотреть возможность динамической корректировки целевой прибыли в зависимости от волатильности рынка или использовать стратегию по зачистке запасов.
Отставание по показателямИндекс William Herschel и RSI имеют определенную отсталость и могут не успеть вовремя уловить повороты, когда рынок быстро меняется. Рекомендуется использовать вспомогательные суждения в сочетании с другими ведущими показателями или анализом поведения цен.
Параметр Чувствительность: Стратегическая производительность чувствительна к параметрам, особенно к установке порога RSI. Различные комбинации параметров могут работать по-разному в разных рыночных условиях, и необходимо найти оптимальную комбинацию параметров путем обратной связи.
Динамический RSI: текущая стратегия использует фиксированные рубежи RSI ((55 и 45), можно рассмотреть возможность корректировки этих рубежей в зависимости от динамики волатильности рынка. Используйте более мягкие рубежи в высоко волатильных рынках, используйте более строгие рубежи в низко волатильных рынках, чтобы адаптироваться к различным рыночным условиям.
Добавление фильтров транзакцийВведение подтверждения объема торгов, фильтрации волатильности или индикатора силы тренда, фильтрации слабых сигналов в колеблющихся рынках, вхождение в рынок только при четкой тенденции, повышение шансов на победу.
Оптимизация стратегий по борьбе с туберкулезомВ настоящее время фиксированная 2-тиковая стоп-стратегия слишком проста, можно рассмотреть возможность применения динамической стоп-стратегии, такой как стоп-трек или стоп-стоп на основе ATR (средняя реальная величина колебаний), чтобы получить больше прибыли в условиях сильного тренда.
Фильтр времениДополнительная функция фильтрации времени, чтобы избежать ненужных рисков в периоды с низкой ликвидностью или необычными колебаниями, например, в течение 15 минут до начала и после начала торгов или в период публикации важных данных.
Оптимизация управления капиталомВ настоящее время в стратегии используется фиксированная доля средств ((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)