Эта стратегия разрабатывает торговую систему с функцией следующего тренда, основанной на среднем истинном диапазоне (ATR) и индексе относительной силы (RSI).
Вычислите ATR и RSI. ATR отражает среднюю волатильность цен в течение определенного периода. RSI отражает сравнение силы между быками и медведями.
Когда ATR больше скользящей средней, он считается периодом высокой волатильности, подходящим для торговли.
Когда RSI выше линии перекупленности, делайте длинный, а когда RSI ниже линии перепроданности, делайте короткий.
После длинного использовать высокую точку, умноженную на фиксированное соотношение, как цену остановки потери. После короткого использовать низкую точку, умноженную на фиксированное соотношение, как цену остановки потери.
Принимать прибыль по коэффициенту прибыли.
Отслеживание стоп-лосса может максимизировать ордера стоп-лосса для уменьшения потерь.
RSI может эффективно оценить силу быков и медведей, чтобы избежать неоднократного открытия позиций на рынках с диапазоном.
В качестве индикатора волатильности ATR может отфильтровывать рынки, ограничивающиеся диапазоном, и торговать только на рынках с тенденциями.
Соотношение прибыли к прибыли может зафиксировать некоторые прибыли.
Как ATR, так и RSI являются отстающими индикаторами, что может привести к позднему сроку входа.
Фиксированное соотношение прибыли и убытка для остановки убытков и получения прибыли подвержено чрезмерной оптимизации, должно быть установлено осторожно на основе результатов обратных тестов.
На крупных рынках с ограниченным диапазоном циклов ATR может быть выше скользящей средней в течение длительного времени, что приводит к переоценке.
Оптимизировать параметры ATR и RSI для повышения чувствительности системы.
Добавьте MA и другие показатели для определения направления тренда, избегайте ошибочного входа на рынки с диапазоном.
Попробуйте динамический стоп-лосс и принимайте коэффициенты прибыли, вместо фиксированных настроек.
Подумайте о добавлении мер по контролю размеров торговли.
Эта стратегия объединяет преимущества индикаторов 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)