Количественная стратегия следования за трендом на основе индикаторов Stoch и EMA


Дата создания: 2024-02-05 15:27:03 Последнее изменение: 2024-02-05 15:27:03
Копировать: 0 Количество просмотров: 590
1
Подписаться
1617
Подписчики

Количественная стратегия следования за трендом на основе индикаторов Stoch и EMA

Обзор

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

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

Стратегия состоит из трех основных частей:

  1. Показатели EMA указывают на тенденцию

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

  1. Stoch оценивает сигналы покупки и продажи

Сточ состоит из %K и %D линий, которые дают сигнал к покупке при перекрёстке золота с %D линией над зоной перекупа, и сигнал к продаже при перекрёстке смерти с %D линией ниже зоны перепродажи. Эта стратегия дает сигнал к сделке только при перекрёстке сточа в зоне перекупа.

  1. Механизм управления рисками

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

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

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

Основные преимущества этой стратегии:

  1. Используйте EMA, чтобы оценить тенденции в основных и второстепенных уровнях, чтобы избежать рыночных колебаний.

  2. Особенностью Stoch является то, что он хорошо отражает, находится ли в настоящее время в зоне перекупа или перепродажи, поэтому в сочетании с получением перекрестного сигнала можно совершать сделки в зоне перекупа или перепродажи.

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

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

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

Однако эта стратегия несет в себе определенные риски:

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

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

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

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

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

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

  1. Попробуйте различные типы ЭМА, такие как весомое скользящее среднее, Hull MA и другие, чтобы определить тенденцию и провести сравнительный анализ.

  2. Попытка создания многоиндикаторной торговой системы в сочетании с другими индикаторами для получения торговых сигналов, таких как MACD, KDJ и т. д.

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

  4. Тестирование различных видов и различных циклов эффективности стратегии для поиска оптимального сочетания видов и циклов.

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

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

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

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

//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC 

strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)

// === GENERAL INPUTS ===
SectionInd      = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength    = input(defval = 55,   title = "Fast MA Period", minval = 1)
maSlowLength    = input(defval = 89,   title = "Slow MA Period", minval = 1)
StochLength     = input(defval = 14,   title = "Stochastic Length", minval=1)
smoothK         = input(defval = 6,    title = "%K Smooth", minval=1)
smoothD         = input(defval = 3,    title = "%D Smooth", minval=1)
overbought      = 80
oversold        = 20
HighlightOBOS   = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend  = input(defval = true, title = "Highlight Trend?")

//DATE AND TIME
SectionFrom     = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay         = input(defval = 01,   title = "From day", minval=1)
fromMonth       = input(defval = 1,    title = "From month", minval=1)
fromYear        = input(defval = 2019, title = "From year", minval=2014)
SectionTo       = input(defval = true, title = "════════════════ TO ════════════════")
toDay           = input(defval = 31,   title = "To day", minval=1)
toMonth         = input(defval = 12,    title = "To month", minval=1)
toYear          = input(defval = 2020, title = "To year", minval=2014)

// === STRATEGY RELATED INPUTS ===
SectionStra     = input(defval = true ,title = "═════════════ STRATEGY ═════════════")

// Include Shorts or only trade Long Positions?
includeShorts   = input(defval = true, title = "Include Short Positions?")


// Risk Management inputs
useTakeProfit   = input(defval = true,  title = "User Take Profit?")
inpTakeProfit   = input(defval = 8,     title = "Take Profit (%)", minval = 0)
useStopLoss     = input(defval = false, title = "User Stop Loss?")
inpStopLoss     = input(defval = 2,     title = "Stop Loss (%)", minval = 0)

StopLossPerc    = inpStopLoss * 0.01
TakeProfitPerc  = inpTakeProfit * 0.01


// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff   = maFast - maSlow

// === STOCHASTIC SETUP ===
k      = sma(stoch(close, high, low, StochLength), smoothK)
d      = sma(k, smoothD)

// Stochastic Long/Short Entry determination
stochLong  = crossover(k,d)  and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)

// Stochastic Long/Short Exit determination
stochLongEx  = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)


// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white,  linewidth = 1, style = line, transp = 10)


// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65)   //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75)  //Highlight the EMA Trend


// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true


// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange    //Open Long when Stoch crossing in Oversold area and EMATrend is up
    strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange     //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
    strategy.close(id = "Long")
if stochLongEx and timeInRange                 //Close Long when Stoch is getting Overbought 
    strategy.close(id = "Long")


// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts  //Open Short when Stoch crossing in Overbought area and EMA Trend is down
    strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange                   //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
    strategy.close(id = "Short")
if stochShortEx and timeInRange                                //Close Short when Stoch is getting Oversold 
    strategy.close(id = "Short")

        
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss    //Exit when Stop Loss is hit
    strategy.exit("Exit Long SL",   from_entry = "Long",  loss = close * StopLossPerc / syminfo.mintick )
    strategy.exit("Exit Short SL",  from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )

//Take Profit
if useTakeProfit  //Exit when Take Profit Limit is hit
    strategy.exit("Exit Long TP",   from_entry = "Long",  profit = close * TakeProfitPerc / syminfo.mintick)
    strategy.exit("Exit Short TP",  from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)