Стратегия двойного стохастического осциллятора

Автор:Чао Чжан, Дата: 2023-09-17 18:26:16
Тэги:

Обзор

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

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

  1. Быстрый %K показывает направление краткосрочного тренда. %K пересечение линии сглаживания SM1 генерирует сигналы входа.

  2. Когда быстрый осциллятор дает сигнал об обратном движении, проверьте, является ли медленный осциллятор действительным.

  3. Быстрый кроссовер %K выше SM1 указывает на бычий сигнал. Медленный %K выше 50 означает восходящий тренд, удовлетворяющий длинному состоянию.

  4. Быстрый кроссовер %K ниже SM1 указывает на медленный сигнал.

  5. Установите точки получения прибыли и остановки убытков по фиксированным процентам.

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

  1. Двойная стохастическая система фильтрует шум и повышает точность.

  2. Уменьшенный параметр SM1 делает %K чувствительным для выявления краткосрочных возможностей.

  3. Более длинный цикл определяет общую тенденцию, меньший цикл фиксирует изменения.

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

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

  1. Дивергенция между индикаторами может привести к пропущенным сделкам или неправильным сигналам.

  2. Фиксированные точки получения прибыли и остановки потерь не имеют гибкости при адаптации к рынкам.

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

  4. Высокая частота торгов от краткосрочной торговли увеличивает затраты на транзакции.

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

  1. Добавить другие индикаторы или фильтры для обеспечения качества сигнала.

  2. Испытайте различные комбинации параметров, чтобы найти оптимальные настройки.

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

  4. Используйте временные фильтры, чтобы избежать ключевых событий и иррациональных колебаний цен.

  5. Оптимизировать стратегии управления капиталом, такие как размещение позиций для повышения эффективности капитала.

Резюме

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


/*backtest
start: 2023-08-17 00:00:00
end: 2023-09-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Double Stochastic", overlay=true)

//-----------------------Stochastics------------------------//

c= security(syminfo.tickerid,timeframe.period , close)  
h= security(syminfo.tickerid, timeframe.period, high)  
l= security(syminfo.tickerid, timeframe.period, low)  

c1= security(syminfo.tickerid, timeframe.period, close)  
h2= security(syminfo.tickerid, timeframe.period, high)  
l1= security(syminfo.tickerid, timeframe.period, low)  

K1 = input(5, title="K", minval=1, title="Leading K")
SM1 = input(2, title="Smooth", minval=1, title="Leading Smooth ")
k = ema(stoch(c, h, l, K1), SM1)

K2 = input(97, title="K", minval=1, title="Lagging K")
D2 = input(3, title="D", minval=1, title="Lagging D")
SM2 = input(1, title="Smooth", minval=1, title="Lagging Smooth")
k1 = ema(stoch(c1, h2, l1, K2), SM2)

// buy ((k[2] < 40 and k > 40) and bars_up > 0 and k1 > 50) 
// sell (k[2] > 60 and k < 60) and bars_down > 0 and k1 < 50

//-----------------------Mechanics------------------------//

buy = k1 > 50 and k < 30 and k > k[1] ? 1 : 0
sell = k1 < 50 and k > 70 and k < k[1] ? 1 : 0

buy_val = valuewhen(buy == 1, close, 1)
sell_val = valuewhen(sell == 1, close, 1)

buy_close = buy_val * input(1.20, minval=0.1)
sell_close = sell_val / input(1.20, minval=0.1)

//------------------------Buy/Sell-------------------------//

longCondition = buy == 1
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

close_long = close >= buy_close
if (close_long)
    strategy.close("My Long Entry Id")
    
sellCondition = sell == 1
if (sellCondition)
    strategy.entry("My Short Entry Id", strategy.short)

close_short = close <= sell_close
if (close_short)
    strategy.close("My Short Entry Id")    

Больше