В процессе загрузки ресурсов... загрузка...

Двойная скользящая средняя тенденция в соответствии со стратегией с системой управления рисками на основе ATR

Автор:Чао Чжан, Дата: 2024-11-29 14:56:43
Тэги:SMAATRТПSLHTF

img

Обзор

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

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

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

Преимущества стратегии

  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


Связанные

Больше