Кроссоверная тенденция стохастической и скользящей средних по количественной стратегии

Автор:Чао Чжан, Дата: 2024-02-05 15:27:03
Тэги:

img

Обзор

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

Принципы

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

  1. EMA определит направление тренда

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

  2. Акции для генерации торговых сигналов

    Индикатор Stoch состоит из линий %K и %D. Когда %K пересекает выше %D в зоне перекупленности, он генерирует сигнал покупки. Когда %K пересекает ниже %D в зоне перепроданности, он генерирует сигнал продажи. Эта стратегия принимает сигналы перекрестка Stoch только тогда, когда они происходят в зонах перекупленности / перепроданности.

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

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

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

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

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

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

  2. Сила индикатора Stoch заключается в его способности точно отражать уровни перекупленности/перепроданности.

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

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

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

Эта стратегия также сопряжена с некоторыми рисками:

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

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

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

  4. Есть риски, связанные с выбором параметров. Для поиска оптимальных параметров необходимы обширные обратные тесты и оптимизация.

Руководство по оптимизации

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

  1. Попробуйте различные типы EMA для определения тренда, такие как WMA, 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)




Больше