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

Автор:Чао Чжан, Дата: 2024-01-29 11:54:10
Тэги:

img

Обзор

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

Логика стратегии

Стратегия основана на двух технических показателях:

  1. Движущиеся средние: он вычисляет быструю EMA, медленную SMA и медленную VWMA с использованием различных параметров и генерирует торговые сигналы, когда быстрая EMA пересекает медленную SMA.

  2. Стохастический осциллятор: рассчитывает значение %K и считает рынок перекупленным или перепроданным, когда %K пересекает заранее установленные верхние или нижние пороговые уровни, используя это для фильтрации некоторых движущихся средних сигналов.

В частности, логика генерации сигнала:

  1. Когда быстрая EMA пересекает более медленной SMA, и %K находится ниже уровня перепродажи, перейдите на длинный курс.

  2. Для существующих длинных позиций, закрыть, когда %K вновь входит в зону перекупа или цена нарушает стоп-лосс. Для коротких позиций, закрыть, когда %K вновь входит в зону перепродажи или цена нарушает стоп-лосс.

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

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

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

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

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

Существуют также некоторые риски:

  1. Движущиеся средние могут генерировать много неопределенных сигналов, что приводит к большему количеству ложных записей; ограниченная возможность остановки потери.
  2. Стохастический осциллятор также может производить неправильные сигналы самостоятельно.
  3. Настройки параметров требуют оптимизации (например, уровни перекупленности/перепродажи, скользящие средние периоды), иначе влияние на производительность.
  4. Отсутствие фундаментального анализа.

Уменьшение последствий:

  1. Оптимизируйте параметры, чтобы найти наилучшую комбинацию настроек индикатора.
  2. Используйте меньшие размеры позиций, масштабируйте.
  3. Включите фундаментальный анализ, чтобы избежать событий.

Возможности для расширения

Основными возможностями оптимизации являются:

  1. Проверьте и оптимизируйте параметры скользящей средней, чтобы найти оптимальный.
  2. Проверьте стохастические параметры, такие как зоны перекупленности/перепроданности для оптимальных настроек.
  3. Включите дополнительные показатели, такие как объем или волатильность для более богатой логики входа.
  4. Улучшить методологию стоп-лосса, например, отслеживать стопы для снижения риска.
  5. Улучшение управления денежными средствами, например, динамическое размещение позиций на основе ATR.
  6. Избегайте рисковых событий с использованием VIX и т.д.

Заключение

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


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("TVIX MEAN REV V2 TREND", overlay=true)
length = input(16, minval=1)
OverBought = input(80)
OverSold = input(20)
TradeLong = input (true)
TradeShort = input (true)

OverBoughtClose = input(80)
OverSoldClose = input(20)

smoothK = 3
smoothD = 3
trail_points = input(50)

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
k2 = sma(stoch(close, high, low, length), smoothK)
d2 = sma(k, smoothD)


// === GENERAL INPUTS ===
// short Ema
maFastSource = input(defval=close, title="Fast EMA Source")
maFastLength = input(defval=1, title="Fast EMA Period", minval=1)
// long Sma
maSlowSource = input(defval=close, title="Slow SMA Source")
maSlowLength = input(defval=100, title="Slow SMA Period", minval=1)
// longer Sma
maSlowerSource = input(defval=close, title="Slower SMA Source")
maSlowerLength = input(defval=30, title="Slower SMA Period", minval=1)

//ATR Stop Loss Indicator by Keith Larson
atrDays = input(7, "ATR Days Lookback")
theAtr = atr(atrDays)
atrModifier = input(5.0, "ATR Modifier")
//plot(atr * atrModifier, title="ATR")

LstopLoss = close - (theAtr * atrModifier)
SstopLoss = close + (theAtr * atrModifier)



// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
maSlower = vwma(maSlowerSource, maSlowerLength)
rsi = rsi(maSlowerSource, maSlowerLength)

// === PLOTTING ===
fast = plot(maFast, title="Fast MA", color=color.red, linewidth=2, style=plot.style_line, transp=30)
slow = plot(maSlow, title="Slow MA", color=color.green, linewidth=2, style=plot.style_line, transp=30)
slower = plot(maSlower, title="Slower MA", color=color.teal, linewidth=2, style=plot.style_line, transp=30)


// === LOGIC === Basic - simply switches from long to short and vice-versa with each fast-slow MA cross
LongFilter = maFast > maSlow
ShortFilter = maSlow > maFast




BUY=crossover(k, d) and k < OverSold
SELL=crossunder(k, d) and k > OverBought

SELLCLOSE=crossover(k, d) and k < OverSoldClose
BUYCLOSE=crossunder(k, d) and k > OverBoughtClose

Open = open


if not na(k) and not na(d)
    if crossover(k, d) and k < OverSold and LongFilter and TradeLong
        strategy.entry("$", strategy.long, limit = Open, comment="Long")
    
    strategy.close("$",when = crossunder(k, d) and k > OverBoughtClose or open < LstopLoss  )
    ///strategy.close("$",when = open < LstopLoss  )
    
if not na(k) and not na(d)
    if crossunder(k, d) and k > OverBought and ShortFilter and TradeShort
        strategy.entry("$1", strategy.short, limit = Open, comment="S")
        
    strategy.close ("$1", when = crossover(k, d) and k < OverSoldClose or open > SstopLoss  )
    ///strategy.close ("$1", when = open < SstopLoss) 
    
  
        





Больше