Интегрированная стратегия торговли трендом STC MA ATR

Автор:Чао Чжан, Дата: 2023-10-17 14:34:10
Тэги:

img

Обзор

Эта стратегия сочетает в себе технические показатели STC, Moving Average MA и Average True Range ATR для оценки тенденций и реализации относительно стабильной торговли с отслеживанием тренда.

Принцип стратегии

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

  2. Движущаяся средняя MA определяет направление тренда. Когда цена акции пересекает предел MA, она сигнализирует об восходящем тренде, давая сигнал для хранения длинной позиции. Когда цена пересекает предел MA, она сигнализирует о нисходящем тренде, давая сигнал для хранения короткой позиции.

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

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

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

  1. Стратегия сочетает в себе несколько индикаторов для оценки тенденций и точек переворота, повышая точность торговых сигналов.

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

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

  4. Сочетание нескольких индикаторов формирует сильную способность отслеживать тенденции.

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

  1. STC имеет временную задержку, которая может не совпадать с оптимальным сроком для изменения цены.

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

  3. ATR стоп-лосс может быть достигнут в течение нескольких секунд.

  4. Больше показателей означает больше шансов на достижение стоп-лосса.

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

  1. Настраивайте параметры STC, чтобы найти более быстрые комбинации для обратного движения.

  2. Оптимизировать параметр периода MA для лучшего отслеживания тренда.

  3. Испытание воздействия различных кратных ATR.

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

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

  6. Рассмотрим тенденции больших циклов и различим различные этапы.

Резюме

Стратегия STC MA ATR сочетает в себе 3 индикатора для захвата точек обратного движения тренда для стабильной торговли отслеживанием тренда. Комбинированные индикаторы фильтруют ложные сигналы и контролируют риски с помощью стоп-лосса / take profit. Она обладает сильной надежностью и стабильностью. Дальнейшие улучшения могут быть достигнуты за счет оптимизации параметров и внедрения алгоритма.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Romedius

//@version=5
strategy("My Strategy", overlay=true, margin_long=100, margin_short=100)

// STC
EEEEEE=input(12,"Length",group="STC")
BBBB=input(26,"FastLength",group="STC")
BBBBB=input(50,"SlowLength",group="STC")

AAAA(BBB, BBBB, BBBBB) =>
    fastMA = ta.ema(BBB, BBBB)
    slowMA = ta.ema(BBB, BBBBB)
    AAAA = fastMA - slowMA
    AAAA
    
AAAAA(EEEEEE, BBBB, BBBBB) => 
    //AAA=input(0.5)
    var AAA = 0.5
    var CCCCC = 0.0
    var DDD = 0.0
    var DDDDDD = 0.0
    var EEEEE = 0.0
    BBBBBB = AAAA(close,BBBB,BBBBB)     
    CCC = ta.lowest(BBBBBB, EEEEEE)
    CCCC = ta.highest(BBBBBB, EEEEEE) - CCC    
    CCCCC := (CCCC > 0 ? ((BBBBBB - CCC) / CCCC) * 100 : nz(CCCCC[1])) 
    DDD := (na(DDD[1]) ? CCCCC : DDD[1] + (AAA * (CCCCC - DDD[1]))) 
    DDDD = ta.lowest(DDD, EEEEEE) 
    DDDDD = ta.highest(DDD, EEEEEE) - DDDD     
    DDDDDD := (DDDDD > 0 ? ((DDD - DDDD) / DDDDD) * 100 : nz(DDDDDD[1])) 
    EEEEE := (na(EEEEE[1]) ? DDDDDD : EEEEE[1] + (AAA * (DDDDDD - EEEEE[1])))
    EEEEE

mAAAAA = AAAAA(EEEEEE,BBBB,BBBBB)
stc = mAAAAA > mAAAAA[1] ? true : false
stc_sig = stc == true and stc[1] == false ? 1 : stc == false and stc[1] == true ? -1 : 0
stc_long = stc_sig == 1
stc_short = stc_sig == -1
// STC end

// ATR stops
nATRPeriod = input(5,group="ATR Stops")
nATRMultip = input(3.5,group="ATR Stops")

xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) : close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

pos = 0
pos := close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)

atr_sig = pos == -1 ? false : true
// ATR stops end

// ma
ma_len = input(200, title="MA Length", group="Moving Average")
ma = ta.sma(close, 200)
ma_sig = close < ma ? false : true
// ma end

// strategy entries
tp_mult = input(2, title="Take Profit ATR Multiplier", group="Strategy")
sl_mult = input(1, title="Stop Loss ATR Multiplier", group="Strategy")
early_stop = input(true, title="Close position when ATR changes color")

atr_stop = if close < xATRTrailingStop
    close - (close - xATRTrailingStop) * sl_mult
else
    close + (xATRTrailingStop - close) * sl_mult

longCondition = atr_sig == true and stc_sig == 1 and ma_sig == true
shortCondition = atr_sig == false and stc_sig == -1 and ma_sig == false

if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", limit=close + xATR * tp_mult, stop=atr_stop)
else if atr_sig == false and early_stop
    strategy.close("Long")

if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", limit=close - xATR * tp_mult, stop=atr_stop)
else if atr_sig == true and early_stop
    strategy.close("Short")
    
// plot stuff
atr_color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(atr_stop, title="ATR Stop", color=atr_color)

ma_color = ma_sig ? color.green : color.red
plot(ma, title="Moving Average", color=ma_color)

stc_color = stc_long ? color.green : color.red
plotshape(stc_long, style=shape.triangleup, color=stc_color, title="STC Long Signal", size=size.tiny)
plotshape(stc_short, style=shape.triangledown, color=stc_color, title="STC Short Signal", size=size.tiny)
// plot stuff end

Больше