Количественная торговая стратегия с двунаправленным давлением


Дата создания: 2023-11-02 13:56:23 Последнее изменение: 2023-11-02 13:56:23
Копировать: 0 Количество просмотров: 633
1
Подписаться
1617
Подписчики

Количественная торговая стратегия с двунаправленным давлением

Обзор

Двунаправленная силовая торговая стратегия - это стратегия отслеживания тенденций, которая сочетает в себе случайные индикаторы и торговые показатели. Эта стратегия использует в основном случайные индикаторы K и D, а также торговые показатели для создания сигналов покупки и продажи, а также дополнительные сигналы, связанные с равномерными золотыми и мертвыми.

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

Сигналы покупателей

Основная логика запуска покупательского сигнала:

  1. K- и D-линии одновременно нарушают перепроданную зону (например, 20) и создают верхнюю перекрестку, а K- и D-линии одновременно находятся в восходящем тренде

  2. Объем сделок выше определенного порога (например, в 1,4 раза больше среднего объема сделок)

  3. Цена закрытия выше, чем цена открытия (белая линия K)

Дополнительные сигналы о покупке могут исходить от:

  1. Среднелинейный форк: пересекает медленную линию EMA на быстрой линии EMA, причем две среднелинии поднимаются одновременно

  2. K-линия и D-линия одновременно входят в зону перепродажи с низких уровней (например, поднимаются с 20 ниже и входят в диапазон от 20 до 80).

Продается сигнал

Основная логика сбытового сигнала:

  1. K-линия и D-линия одновременно входят в зону перепродажи (например, 80).

  2. Среднелинейный мертвый форк: быстрая линия EMA под медленной линией EMA

  3. K-линия пересекает D-линию, а K-линия и D-линия одновременно находятся в нисходящем тренде

Стоп-сигнал

Установите определенный процент (например, 6%) от цены покупки в качестве линии стоп-лосса, которая вызывает стоп-продажу, если цена опускается ниже этой линии.

Анализ преимуществ стратегии

  • Избегайте ложных сигналов с помощью двойного случайного индикатора
  • Комбинированная фильтрация трафика, обеспечивающая тенденцию
  • Сверление различных сигналов повышает точность
  • Средняя линия помогает определить направление тенденции
  • Настройка стратегии сдерживания убытков и контроля риска

Преимущество 1: Двойные случайные индикаторы избегают ложных сигналов

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

Преимущество 2: Фильтрация шума, обеспечивающая тенденционность

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

Преимущества 3: Наложение множества сигналов, повышение точности

Стратегия объединяет несколько сигналов покупки и продажи, которые должны быть одновременно задействованы, чтобы создать настоящий торговый сигнал. Наложение нескольких индикаторов может повысить надежность сигнала.

Преимущество 4: средняя линия помогает определить направление тенденции

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

Преимущество 5: Установка стратегии стоп-лосса и контроль риска

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

Анализ рисков

  • Параметры стратегии требуют тщательного дебютирования, неправильная настройка может привести к плохой производительности
  • Настройка точки остановки требует учета риска взлета
  • Риски ликвидности в торговых сортах
  • Следите за битовыми рисками в многочасовых показателях

Риск 1: параметры стратегии требуют тщательной настройки

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

Риск 2: Стоп-пойнт с учетом риска взлета

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

Риск No3: Риск ликвидности для торговых видов

Для менее мобильных сортов, правила переселения могут отфильтровывать избыточные сигналы. В этом случае необходимо снизить ограничение условий переселения.

Риск 4: риски битовой последовательности с многократными временными циклами

Проблема может возникнуть в связи с несоответствием между различными периодическими индикаторами, что может повлиять на точность сигнала. Необходимо проверить соответствие точек сигнала.

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

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизация параметров для повышения стабильности

  2. Добавление динамических параметров настройки методов машинного обучения

  3. Оптимизация стратегии по снижению убытков

  4. Добавить больше фильтров, чтобы уменьшить количество сделок

  5. Попробуйте стратегию “одно условие” или “остановить” для повышения доходности

Направление 1: оптимизация параметров для повышения стабильности

Основные параметры могут быть оптимизированы с помощью более системных методов, таких как генетические алгоритмы, чтобы гарантировать стабильную производительность параметров в разных рыночных циклах.

Направление 2: Добавление динамических параметров корректировки методов машинного обучения

Модель может быть обучена в реальном времени, чтобы оценить состояние рынка и соответственно адаптировать параметры стратегии, чтобы динамически оптимизировать параметры.

Направление 3: оптимизация стратегии по снижению убытков

Можно изучить лучшие стратегии остановки убытков, чтобы сократить ненужные остановки убытков и увеличить прибыль, сохраняя контроль над риском.

Направление 4: Добавление большего количества фильтров, уменьшение количества сделок

Усиление фильтрации, чтобы уменьшить количество транзакций, снизить влияние расходов на транзакции и повысить прибыль от каждой транзакции.

Направление 5: Попытки повышения доходности с помощью стратегий с условием одноразового использования или с остановкой

В зависимости от особенностей рынка, можно разработать одну стратегию или мобильную стратегию остановки, чтобы максимально увеличить прибыль, гарантируя при этом остановку убытков.

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

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

Исходный код стратегии
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// SW SVE - Stochastic+Vol+EMAs [Sergio Waldoke]
// Script created by Sergio Waldoke (BETA VERSION v0.5, fine tuning PENDING)
// Stochastic process is the main source of signals, reinforced on buying by Volume. Also by Golden Cross.
// Selling is determined by K and D entering overselling zone or EMA's Death Cross signal, the first occurring,
// and some other signals combined.
// Buy Long when you see a long buy arrow.
// Sell when you see a close arrow.
// This is a version to be tuned and improved, but already showing excelent results after tune some parameters
// according to the kind of market.
// Strategy ready for doing backtests.

// SVE SYSTEM DESIGN:
// Buy Signal Trigger:
// - Both Stoch <= 20 crossing up and both growing and green candle and Vol/sma vol >= 1.40 Avg Vol
//   or
// - Both Stoch growing up and Vol/sma vol >= 1.40 Avg Vol and green candle and
//   both prior Stoch crossing up
//   or
//   [OPTIONAL]: (Bad for BTC 2018, excelent for 2017)
// - Crossingover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and green candle

// Exit position:
// - Both Stoch <= 20 and Both Stoch were > 20 during position
//   or
// - CrossingUnder(Fast EMA, Medium EMA)
//   or   [OPTIONAL] (Better for BTC 2018, Worse for BNB 1H)
// - CrossingUnder(k, d) and (k and d starting over over_buying) and (k and d descending) and k crossing down over_buying line

//calc_on_every_tick=true,
//calc_on_order_fills=true,   (affects historical calculation, triggers in middle of the bar, may be better for automatic orders)
strategy("SW SVE - Stochastic+Vol+EMAs [Sergio Waldoke]", shorttitle="SW SVE", overlay=true, max_bars_back=5000,
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency="USD",
         commission_type=strategy.commission.percent, commission_value=0.25)

//Strategy Parameters
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2018, title = "From Year", minval = 2009, maxval = 2200)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 2030, title = "To Year", minval = 2009, maxval = 2200)

//Indicator Parameters
//Original defaults for 4HS: 14, 3, 80, 20,   14, 23, 40,   20, 40,   3:
stoch_k = input(title="Stoch K",  defval=14, minval=1)
stoch_d = input(title="Stoch D",  defval=3, minval=1)
over_buying  = input(title="Stoch Overbuying Zone",  defval=80, minval=0, maxval=100)
over_selling = input(title="Stoch Overselling Zone",  defval=20, minval=0, maxval=100)

fast_ema_periods = input(title="Fast EMA (Death Cross)",  defval=14, minval=1, maxval=600)
slow_ema_periods = input(title="Slow EMA (Death Cross)",  defval=23, minval=1, maxval=600)
trend_ema_periods = input(title="Slowest EMA (Trend Test)",  defval=40, minval=1, maxval=600)

volume_periods = input(title="Volume Periods",  defval=20, minval=1, maxval=600)
volume_factor = input(title="Min Volume/Media Increase (%)",  defval=80, minval=-100) / 100 + 1

threshold_sl_perc = input(title="[Sell Trigger] Stop Loss Threshold %", defval=6.0, type=float, minval=0, maxval=100)

//before_buy = input(title="# Growing Before Buy",  defval=2, minval=1)
//before_sell = input(title="# Decreasing Before Sell",  defval=1, minval=1)
//stepsignal = input(title="Show White Steps", type=bool, defval=true)
//steps_base = input(title="White Steps Base",  defval=242, minval=0)

//Signals
fast_ema = ema(close, fast_ema_periods)
slow_ema = ema(close, slow_ema_periods)
trend_ema = ema(close, trend_ema_periods)
k = stoch(close, high, low, stoch_k)
d = sma(k, stoch_d)
vol_ma = sma(volume, volume_periods)

//REVIEW CONSTANT 1.75:
in_middle_zone(a) => a > over_selling * 1.75 and a < over_buying
growing(a) => a > a[1] 

was_in_middle_zone = k == d
was_in_middle_zone := was_in_middle_zone[1] or in_middle_zone(k) and in_middle_zone(d)

//Buy Signal Trigger:
//- Both Stoch <= 20 crossing up and both growing and 
//  green candle and Vol/sma vol >= 1.40 Avg Vol
buy = k <= over_selling and d <= over_selling and crossover(k, d) and growing(k) and growing(d) and
      close > open and volume/vol_ma >= volume_factor

//or
//- Both Stoch growing up and Vol/sma vol >= 1.40 Avg Vol and green candle and
//  both prior Stoch crossing up
buy := buy or (growing(k) and growing(d) and volume/vol_ma >= volume_factor and close > open and
              crossover(k[1], d[1]) )
//Worse:
//              (crossover(k[1], d[1]) or (crossover(k, d) and k[1] <= over_selling and d[1] <= over_selling) ) )

//or
//  [OPTIONAL]: (Bad for BTC 2018, excelent for 2017)
//- Crossingover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and green candle
buy := buy or (crossover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and close > open)


//Debug:
//d1 = close > open  ? 400 : 0
//plot(d1+5200, color=white, linewidth = 3, style = stepline)

//Exit position:
//- Both Stoch <= 20 and Both Stoch were > 20 during position
sell = k <= over_selling and d <= over_selling and was_in_middle_zone

//  or
//- CrossingUnder(Fast EMA, Medium EMA)
sell := sell or crossunder(fast_ema, slow_ema)

//  or  [OPTIONAL] (Better for BTC 2018, Worse for BNB 1H)
//- CrossingUnder(k, d) and (k and d starting over over_buying) and (k and d descending) and k crossing down over_buying line
sell := sell or (crossunder(k, d) and k[1] >= over_buying and d[1] >= over_buying and
                 not growing(k) and not growing(d) and k <= over_buying)

color = buy ? green : red

bought_price = close
bought_price := nz(bought_price[1])

already_bought = false
already_bought := nz(already_bought[1], false)

//Date Ranges
buy  := buy and  not already_bought


//d1 = buy ? 400 : 0
//plot(d1+6500, color=white, linewidth = 3, style = stepline)

was_in_middle_zone := (not buy and was_in_middle_zone) or (in_middle_zone(k) and in_middle_zone(d))

already_bought   := already_bought[1] or buy
bought_price := buy ? close * (1 - threshold_sl_perc/100) : bought_price[1]
trigger_SL = close < bought_price[0]
sell := sell or trigger_SL

sell := sell and  
                 already_bought and not buy and (was_in_middle_zone or trigger_SL)

//plot((sell?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)
                 
already_bought   := already_bought[0] and not sell
bought_price := sell ? 0 : bought_price[0]

//plot((was_in_middle_zone?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)

was_in_middle_zone := not sell and was_in_middle_zone

//Plot signals
plot(fast_ema, title="Fast EMA", color=red, linewidth = 4)
plot(slow_ema, title="Slow EMA", color=blue, linewidth = 4)
plot(trend_ema, title="Trend EMA", color=yellow, linewidth = 4)

//Stop Loss
plot(bought_price, color=gray, linewidth=2, style=cross, join=true, title="Stop Loss")

//Y = stepsignal ? lowest(40) : na
//Y = steps_base
//plot(mysignal+Y, title="Steps", color=white, linewidth = 3, style = stepline)
//Unit steps - for debugging
//plot(mysteps+Y, title="Steps2", color=yellow, linewidth = 3, style = stepline)

//Bought or not - for debugging
//plot((already_bought?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)
//plot((sell?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)

plotshape(buy, title="Buy arrows", style=shape.arrowup, location=location.belowbar, color=color, text="Buy", textcolor=color, size=size.huge, transp=30)
plotshape(sell, title="Sell arrows", style=shape.arrowdown, location=location.abovebar, color=color, text="Sell", textcolor=color, size=size.huge, transp=30)

//if n>2000
strategy.entry("buy", strategy.long, when=buy)
strategy.close_all(when=sell)

//plot(strategy.equity, title="Equity", color=white, linewidth = 4, style = line)

//AlertS trigger
//msg = "[SW Magic Signals EMA] BUY/SELL Signal has been triggered." + "(" + tostring(fastema) + ", " + tostring(slowema) + ") on " + tickerid + ", " + period + "."
msg = "SW SVE BUY/SELL Signal has been triggered. (#, #) on EXCH:PAIR, period: #."

alertcondition(buy or sell, title="SW SVE (BUY/SELL SIGNAL)", message=msg)
alertcondition(buy, title="SW SVE (BUY SIGNAL)", message=msg)
alertcondition(sell, title="SW SVE (SELL SIGNAL)", message=msg)