Торговая стратегия по тренду Gaussian Channel и Stochastic RSI

RSI GWMA GWSD SRSI
Дата создания: 2025-02-20 11:01:36 Последнее изменение: 2025-02-20 11:01:36
Копировать: 1 Количество просмотров: 638
2
Подписаться
319
Подписчики

Торговая стратегия по тренду Gaussian Channel и Stochastic RSI Торговая стратегия по тренду Gaussian Channel и Stochastic RSI

Обзор

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

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

Основная логика стратегии состоит из двух основных частей:

  1. Система Gaussian channel: с использованием Gaussian weighted moving average (GWMA) и Gaussian weighted standard deviation (GWSD) для построения ценового канала. GWMA придает больший вес недавним данным, что делает равнолинию более чувствительной к реакции на изменения цен.

  2. Система случайного RSI: случайная обработка традиционного RSI для вычисления K- и D-значений. Такая обработка позволяет лучше идентифицировать зоны перекупа и перепродажи и обеспечивает более точный сигнал динамики.

Создание торгового сигнала основывается на следующих условиях:

  • Повышенный вход: ценовая закрытость цена прорывает Gauss’s Channel и пересекает D-линию на линии K в случайном RSI
  • Сигналы о равновесии: цены закрылись после падения по каналу Гауса

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

  1. Математические основы прочны: с использованием метода Гаска с использованием удельного веса для построения ценовых каналов, имеет лучшую теоретическую основу по сравнению с простой движущейся средней.
  2. Сигналы надежны: механизм двойной проверки в сочетании с ценовым прорывом и подтверждением динамики позволяет эффективно снижать ложные сигналы.
  3. Адаптируемость: метод Гаусса позволяет автоматически корректировать ширину каналов в зависимости от рыночных колебаний.
  4. Эффективный контроль за рисками: эффективный контроль за расходами и рисками торговли посредством управления капиталом и установки комиссий.

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

  1. Трендозависимость: частое возникновение ложных сигналов на колеблющихся рынках, что приводит к чрезмерной торговле.
  2. Задержка: из-за использования многократного сглаживания средних линий может возникнуть задержка сигнала в точке перехода тренда.
  3. Чувствительность параметров: эффективность стратегии зависит от параметров, которые необходимо тщательно оптимизировать.

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

  1. Идентификация рыночной конъюнктуры: добавление механизма оценки рыночной конъюнктуры с использованием различных параметров в различных рыночных состояниях.
  2. Оптимизация стоп-убытков: внедрение динамических механизмов стоп-убытков, таких как адаптивные стоп-убытки на основе ATR или волатильности.
  3. Фильтрация сигналов: добавление подтверждения объема перевода или других технических показателей в качестве вспомогательного фильтрационного условия.
  4. Управление капиталом: реализация более гибкой стратегии управления позициями, динамическая корректировка пропорций позиций в зависимости от силы сигнала.

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

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

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

//@version=5
strategy("Gaussian Channel + Stoch RSI Strategy", overlay=true, margin_long=100, margin_short=100, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1)

// User Inputs
length     = input.int(20, "Gaussian Length", minval=5)
multiplier = input.float(2.0, "Channel Multiplier", step=0.1)
rsiLength  = input.int(14, "RSI Length", minval=1)
stochLength= input.int(14, "Stoch RSI Length", minval=1)
kLength    = input.int(3, "Stoch K Smoothing", minval=1)
dLength    = input.int(3, "Stoch D Smoothing", minval=1)

// Gaussian Weighted Moving Average Function
f_gaussian(source, length) =>
    half = (length - 1) / 2.0
    sum = 0.0
    norm = 0.0
    // Gaussian standard deviation chosen as length/6 for a smooth curve
    denom = (length / 6.0) * (length / 6.0)
    for i = 0 to length - 1
        x = i - half
        w = math.exp(-(x * x) / (2 * denom))
        sum += source[i] * w
        norm += w
    sum / norm

// Gaussian Weighted Standard Deviation Function
f_gaussian_std(source, length) =>
    half = (length - 1) / 2.0
    gavg = f_gaussian(source, length)
    sum = 0.0
    norm = 0.0
    denom = (length / 6.0) * (length / 6.0)
    for i = 0 to length - 1
        x = i - half
        w = math.exp(-(x * x)/(2*denom))
        diff = source[i] - gavg
        sum += diff * diff * w
        norm += w
    math.sqrt(sum/norm)

// Compute Gaussian Channel
gaussMid = f_gaussian(close, length)
gaussStd = f_gaussian_std(close, length)
gaussUpper = gaussMid + gaussStd * multiplier
gaussLower = gaussMid - gaussStd * multiplier

// Stochastic RSI Calculation
rsi = ta.rsi(close, rsiLength)
rsiLowest = ta.lowest(rsi, stochLength)
rsiHighest = ta.highest(rsi, stochLength)
stoch = 100 * (rsi - rsiLowest) / math.max(rsiHighest - rsiLowest, 1e-10)
k = ta.sma(stoch, kLength)
d = ta.sma(k, dLength)

// Conditions
// Long entry: Price closes above upper Gaussian line AND Stoch RSI K > D (stochastic is "up")
longCondition = close > gaussUpper and k > d

// Exit condition: Price closes below upper Gaussian line
exitCondition = close < gaussUpper

// Only trade in the specified date range
inDateRange = time >= timestamp("2018-01-01T00:00:00") and time < timestamp("2069-01-01T00:00:00")

// Submit Orders
if inDateRange
    if longCondition and strategy.position_size <= 0
        strategy.entry("Long", strategy.long)
    if exitCondition and strategy.position_size > 0
        strategy.close("Long")
        
// Plot Gaussian Channel
plot(gaussMid, "Gaussian Mid", color=color.new(color.yellow, 0))
plot(gaussUpper, "Gaussian Upper", color=color.new(color.green, 0))
plot(gaussLower, "Gaussian Lower", color=color.new(color.red, 0))