Отслеживание тренда с помощью двойной скользящей средней и адаптивная торговая стратегия контроля риска ATR

SMA ATR TP SL HTF
Дата создания: 2024-11-29 14:56:43 Последнее изменение: 2024-11-29 14:56:43
Копировать: 0 Количество просмотров: 522
1
Подписаться
1617
Подписчики

Отслеживание тренда с помощью двойной скользящей средней и адаптивная торговая стратегия контроля риска ATR

Обзор

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

Стратегический принцип

Стратегия 1 ((основной режим) использует систему двойных равноденствий 21 и 49 дней, которая генерирует многосигналы, когда быстрая средняя линия пересекает медленную среднюю линию вверх. Цель прибыли может быть выбрана в процентном или точечном режиме, а также предоставляет опциональную функцию мобильного остановки для блокирования прибыли. Стратегия 2 ((продвинутый режим) на основе двухмерной системы добавляет фильтр тренда на уровне солнечной линии, который разрешает вход только тогда, когда цена находится выше средней линии более высоких временных рамок.

Стратегические преимущества

  1. Стратегия имеет высокую адаптивность и может быть изменена в зависимости от уровня опыта трейдера и рыночной ситуации
  2. Многовременный анализ в высокоуровневом режиме улучшает качество сигнала
  3. ATR динамический стоп может адаптироваться к различным рыночным условиям
  4. Некоторые механизмы получения прибыли сбалансированы между сохранением прибыли и продолжением тренда.
  5. Гибкая конфигурация параметров для оптимизации в соответствии с различными рыночными характеристиками

Стратегический риск

  1. Двухлинейная система может часто давать ложные сигналы в ураганных городах
  2. Тренд-фильтрация может привести к задержке сигнала и упущению возможности для торговли
  3. ATR-остановка может оказаться недостаточно своевременной при колебаниях частоты
  4. Некоторые доходы могут быть преждевременно снижены, что повлияет на прибыль.

Направление оптимизации стратегии

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

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shaashish1

//@version=5
strategy("Dual Strategy Selector V2 - Cryptogyani", overlay=true, pyramiding=0, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100000)

//#region STRATEGY SELECTION
strategyOptions = input.string(title="Select Strategy", defval="Strategy 1", options=["Strategy 1", "Strategy 2"], group="Strategy Selection")
//#endregion STRATEGY SELECTION

// ####################### STRATEGY 1: Original Logic ########################
//#region STRATEGY 1 INPUTS
s1_fastMALen = input.int(defval=21, title="Fast SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_slowMALen = input.int(defval=49, title="Slow SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_takeProfitMode = input.string(defval="Percentage", title="Take Profit Mode (S1)", options=["Percentage", "Pips"], group="Strategy 1 Settings")
s1_takeProfitPerc = input.float(defval=7.0, title="Take Profit % (S1)", minval=0.05, step=0.05, group="Strategy 1 Settings") / 100
s1_takeProfitPips = input.float(defval=50, title="Take Profit Pips (S1)", minval=1, step=1, group="Strategy 1 Settings")
s1_trailingTakeProfitEnabled = input.bool(defval=false, title="Enable Trailing (S1)", group="Strategy 1 Settings")
//#endregion STRATEGY 1 INPUTS

// ####################### STRATEGY 2: Enhanced with Recommendations ########################
//#region STRATEGY 2 INPUTS
s2_fastMALen = input.int(defval=20, title="Fast SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_slowMALen = input.int(defval=50, title="Slow SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_atrLength = input.int(defval=14, title="ATR Length (S2)", group="Strategy 2 Settings", inline="ATR")
s2_atrMultiplier = input.float(defval=1.5, title="ATR Multiplier for Stop-Loss (S2)", group="Strategy 2 Settings", inline="ATR")
s2_partialTakeProfitPerc = input.float(defval=50.0, title="Partial Take Profit % (S2)", minval=10, maxval=100, step=10, group="Strategy 2 Settings")
s2_timeframeTrend = input.timeframe(defval="1D", title="Higher Timeframe for Trend Filter (S2)", group="Strategy 2 Settings")
//#endregion STRATEGY 2 INPUTS

// ####################### GLOBAL VARIABLES ########################
var float takeProfitPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na
var float fastMA = na
var float slowMA = na
var float higherTimeframeTrendMA = na
var bool validOpenLongPosition = false

// Precalculate higher timeframe values (global scope for Strategy 2)
higherTimeframeTrendMA := request.security(syminfo.tickerid, s2_timeframeTrend, ta.sma(close, s2_slowMALen))

// ####################### LOGIC ########################
if (strategyOptions == "Strategy 1")
    // Strategy 1 Logic (Original Logic Preserved)
    fastMA := ta.sma(close, s1_fastMALen)
    slowMA := ta.sma(close, s1_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA)
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0
    
    // Take Profit Price
    takeProfitPrice := if (s1_takeProfitMode == "Percentage")
        close * (1 + s1_takeProfitPerc)
    else
        close + (s1_takeProfitPips * syminfo.mintick)

    // Trailing Stop Price (if enabled)
    if (strategy.position_size > 0 and s1_trailingTakeProfitEnabled)
        trailingStopPrice := high - (s1_takeProfitPips * syminfo.mintick)
    else
        trailingStopPrice := na

else if (strategyOptions == "Strategy 2")
    // Strategy 2 Logic with Recommendations
    fastMA := ta.sma(close, s2_fastMALen)
    slowMA := ta.sma(close, s2_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA) and close > higherTimeframeTrendMA
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0

    // ATR-Based Stop-Loss
    atr = ta.atr(s2_atrLength)
    stopLossPrice := close - (atr * s2_atrMultiplier)

    // Partial Take Profit Logic
    takeProfitPrice := close * (1 + (s2_partialTakeProfitPerc / 100))
//#endregion STRATEGY LOGIC

// ####################### PLOTTING ########################
plot(series=fastMA, title="Fast SMA", color=color.yellow, linewidth=1)
plot(series=slowMA, title="Slow SMA", color=color.orange, linewidth=1)
plot(series=takeProfitPrice, title="Take Profit Price", color=color.teal, linewidth=1, style=plot.style_linebr)

// Trailing Stop and ATR Stop-Loss Plots (Global Scope)
plot(series=(strategyOptions == "Strategy 1" and s1_trailingTakeProfitEnabled) ? trailingStopPrice : na, title="Trailing Stop", color=color.red, linewidth=1, style=plot.style_linebr)
plot(series=(strategyOptions == "Strategy 2") ? stopLossPrice : na, title="ATR Stop-Loss", color=color.red, linewidth=1, style=plot.style_linebr)
//#endregion PLOTTING

// ####################### POSITION ORDERS ########################
//#region POSITION ORDERS
if (validOpenLongPosition)
    strategy.entry(id="Long Entry", direction=strategy.long)

if (strategyOptions == "Strategy 1")
    if (strategy.position_size > 0)
        if (s1_trailingTakeProfitEnabled)
            strategy.exit(id="Trailing Take Profit", from_entry="Long Entry", stop=trailingStopPrice)
        else
            strategy.exit(id="Take Profit", from_entry="Long Entry", limit=takeProfitPrice)

else if (strategyOptions == "Strategy 2")
    if (strategy.position_size > 0)
        strategy.exit(id="Partial Take Profit", from_entry="Long Entry", qty_percent=s2_partialTakeProfitPerc, limit=takeProfitPrice)
        strategy.exit(id="Stop Loss", from_entry="Long Entry", stop=stopLossPrice)
//#endregion POSITION ORDERS