Тенденция, основанная на ATR и RSI, после стратегии торговли

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

Обзор

Эта стратегия разрабатывает торговую систему с функцией следующего тренда, основанной на среднем истинном диапазоне (ATR) и индексе относительной силы (RSI).

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

  1. Вычислите ATR и RSI. ATR отражает среднюю волатильность цен в течение определенного периода. RSI отражает сравнение силы между быками и медведями.

  2. Когда ATR больше скользящей средней, он считается периодом высокой волатильности, подходящим для торговли.

  3. Когда RSI выше линии перекупленности, делайте длинный, а когда RSI ниже линии перепроданности, делайте короткий.

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

  5. Принимать прибыль по коэффициенту прибыли.

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

  1. Отслеживание стоп-лосса может максимизировать ордера стоп-лосса для уменьшения потерь.

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

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

  4. Соотношение прибыли к прибыли может зафиксировать некоторые прибыли.

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

  1. Как ATR, так и RSI являются отстающими индикаторами, что может привести к позднему сроку входа.

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

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

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

  1. Оптимизировать параметры ATR и RSI для повышения чувствительности системы.

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

  3. Попробуйте динамический стоп-лосс и принимайте коэффициенты прибыли, вместо фиксированных настроек.

  4. Подумайте о добавлении мер по контролю размеров торговли.

Резюме

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


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

// © liwei666
//@version=5
// # ========================================================================= #
// #                   |   Strategy  |
// # ========================================================================= #
strategy(
 title                = "ATR_RSI_Strategy v2[liwei666]",
 shorttitle           = "ATR_RSI_Strategy",
 overlay              =  true,
 max_lines_count                 =  500, 
 max_labels_count                =  500, 
 max_boxes_count                 =  500,
 max_bars_back = 5000,
 initial_capital = 10000,
 default_qty_type=strategy.percent_of_equity, 
 default_qty_value=50, commission_type=strategy.commission.percent, pyramiding=1, 
 commission_value=0.05
 )
// # ========================================================================= #
// #                   |   Strategy  |
// # ========================================================================= #

atr_length = input.int(26, "atr_length", minval = 6, maxval = 100, step=1)
atr_ma_length = input.int(45, "atr_ma_length", minval = 6, maxval = 100, step=1)
rsi_length = input.int(15, "rsi_length", minval = 6, maxval = 100, step=1)
rsi_entry = input.int(10, "rsi_entry", minval = 6, maxval = 100, step=1)
atr_ma_norm_min = input.float(0.3, "atr_ma_norm_min", minval = 0.1, maxval = 0.5, step=0.1)
atr_ma_norm_max = input.float(0.7, "atr_ma_norm_max", minval = 0.5, maxval = 1, step=0.1)
trailing_percent= input.float(1.5, "trailing_percent", minval = 0.1, maxval = 2, step=0.1)

var rsi_buy = 50 + rsi_entry
var rsi_sell = 50 - rsi_entry

sma_norm_h_45() => 
    source = high
    n = 45
    sma = ta.sma(source, n) 
    sma_norm = (sma - ta.lowest(sma, n)) / (ta.highest(sma,n) - ta.lowest(sma, n))
    sma_norm

atr_value = ta.atr(atr_length)
atr_ma = ta.sma(atr_value, atr_ma_length) 
rsi_value = ta.rsi(close, length = rsi_length) 
atr_ma_norm = atr_ma / close * 100
sma_norm = sma_norm_h_45()

var intra_trade_high = 0.0
var intra_trade_low = 0.0

if strategy.position_size == 0
    intra_trade_high := high
    intra_trade_low := low

    if atr_ma_norm >= atr_ma_norm_min and atr_ma_norm <= atr_ma_norm_max
        if atr_value > atr_ma
            if rsi_value > rsi_buy
                strategy.entry("B1", strategy.long, limit = close + 5 )
            else if rsi_value < rsi_sell
                strategy.entry("S1", strategy.short, limit = close - 5 )
else if strategy.position_size > 0
    intra_trade_high := math.max(intra_trade_high, high)
    intra_trade_low := low

    long_tp = intra_trade_high * (1 - trailing_percent / 100)
    strategy.exit("Exit B1", from_entry="B1", stop = long_tp, limit = strategy.position_avg_price * 1.03)

else if strategy.position_size < 0
    intra_trade_high := high
    intra_trade_low := math.min(intra_trade_low, low) 

    short_tp = intra_trade_low * (1 + trailing_percent / 100)
    strategy.exit("Exit S1", from_entry="S1", stop = short_tp, limit = strategy.position_avg_price * 0.94)

Больше