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

Продолжающаяся стратегия с динамическим стоп-лосом

Автор:Чао Чжан, Дата: 2024-06-03 10:57:05
Тэги:SMAТенденция

img

Обзор

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

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

  1. Для определения направления рыночной тенденции рассчитывать краткосрочные и долгосрочные СМИ.
  2. Создать сигнал покупки, когда краткосрочная SMA пересекает длинную SMA, и сигнал продажи, когда краткосрочная SMA пересекает длинную SMA.
  3. Используйте условия подтверждения тренда, чтобы отфильтровать ложные сигналы.
  4. Внедрить функции получения прибыли и остановки потери для контроля риска торговли. Закрыть позиции, когда цена достигает заранее определенного уровня получения прибыли или остановки потери.
  5. Динамическая корректировка позиций на основе условий подтверждения тренда.

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

  1. Следование тенденциям: используя SMA в разные временные рамки, стратегия эффективно отражает основные тенденции рынка и адаптируется к различным рыночным условиям.
  2. Подтверждение тренда: введение условий подтверждения тренда фильтрует ложные сигналы, повышая надежность торговых сигналов и уменьшая количество недействительных сделок.
  3. Управление рисками: встроенные функции получения прибыли и остановки убытков помогают контролировать риски торговли и защищать капитал инвесторов.
  4. Динамическая корректировка: позиции динамически корректируются на основе условий подтверждения тренда, что позволяет стратегии своевременно реагировать на изменения рынка и смягчать убытки от изменения тренда.

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

  1. Риск оптимизации параметров: производительность стратегии зависит от выбора таких параметров, как периоды SMA и уровни прибыли/стоп-лосса. Несоответствующие настройки параметров могут привести к неоптимальной производительности стратегии.
  2. Риск нестабильного рынка: при нестабильных рыночных условиях частые торговые сигналы могут привести к переоценке, увеличению торговых затрат и рисков.
  3. Риск неожиданного события: В условиях неожиданных крупных событий рынок может испытывать сильную волатильность, и стратегия может не быть в состоянии оперативно реагировать, что приводит к значительным потерям.

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

  1. Включение дополнительных технических индикаторов: объединение других технических индикаторов, таких как MACD и RSI, для повышения точности и надежности определения тренда.
  2. Оптимизируйте выбор параметров: с помощью обратного тестирования исторических данных и оптимизации параметров, найдите оптимальную комбинацию периодов SMA, уровни прибыли / остановки убытков и другие параметры для повышения эффективности стратегии.
  3. Улучшить управление рисками: внедрить более продвинутые методы управления рисками, такие как динамический стоп-лосс и размещение позиций, для дальнейшего контроля риска.
  4. Приспосабливаться к различным рыночным условиям: динамически корректировать параметры стратегии на основе волатильности рынка и силы тренда, что позволяет стратегии адаптироваться к различным рыночным условиям.

Заключение

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


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("market slayer v3", overlay=true)

// Input parameters
showConfirmationTrend = input(title='Show Trend', defval=true)
confirmationTrendTimeframe = input.timeframe(title='Main Trend', defval='240')
confirmationTrendValue = input(title='Main Trend Value', defval=2)
showConfirmationBars = input(title='Show Confirmation Bars', defval=true)
topCbarValue = input(title='Top Confirmation Value', defval=60)
short_length = input.int(10, minval=1, title="Short SMA Length")
long_length = input.int(20, minval=1, title="Long SMA Length")
takeProfitEnabled = input(title="Take Profit Enabled", defval=false)
takeProfitValue = input.float(title="Take Profit (points)", defval=20, minval=1)
stopLossEnabled = input(title="Stop Loss Enabled", defval=false)
stopLossValue = input.float(title="Stop Loss (points)", defval=50, minval=1)

// Calculate SMAs
short_sma = ta.sma(close, short_length)
long_sma = ta.sma(close, long_length)

// Generate buy and sell signals based on SMAs
buy_signal = ta.crossover(short_sma, long_sma)
sell_signal = ta.crossunder(short_sma, long_sma)

// Plot SMAs
plot(short_sma, color=color.rgb(24, 170, 11), title="Short SMA")
plot(long_sma, color=color.red, title="Long SMA")

// Confirmation Bars
f_confirmationBarBullish(cbValue) =>
    cBarClose = close
    slowConfirmationBarSmaHigh = ta.sma(high, cbValue)
    slowConfirmationBarSmaLow = ta.sma(low, cbValue)
    slowConfirmationBarHlv = int(na)
    slowConfirmationBarHlv := cBarClose > slowConfirmationBarSmaHigh ? 1 : cBarClose < slowConfirmationBarSmaLow ? -1 : slowConfirmationBarHlv[1]
    slowConfirmationBarSslDown = slowConfirmationBarHlv < 0 ? slowConfirmationBarSmaHigh : slowConfirmationBarSmaLow
    slowConfirmationBarSslUp = slowConfirmationBarHlv < 0 ? slowConfirmationBarSmaLow : slowConfirmationBarSmaHigh
    slowConfirmationBarSslUp > slowConfirmationBarSslDown

fastConfirmationBarBullish = f_confirmationBarBullish(topCbarValue)
fastConfirmationBarBearish = not fastConfirmationBarBullish
fastConfirmationBarClr = fastConfirmationBarBullish ? color.green : color.red

fastConfirmationChangeBullish = fastConfirmationBarBullish and fastConfirmationBarBearish[1]
fastConfirmationChangeBearish = fastConfirmationBarBearish and fastConfirmationBarBullish[1]

confirmationTrendBullish = request.security(syminfo.tickerid, confirmationTrendTimeframe, f_confirmationBarBullish(confirmationTrendValue), lookahead=barmerge.lookahead_on)
confirmationTrendBearish = not confirmationTrendBullish
confirmationTrendClr = confirmationTrendBullish ? color.green : color.red

// Plot trend labels
plotshape(showConfirmationTrend, style=shape.square, location=location.top, color=confirmationTrendClr, title='Trend Confirmation Bars')
plotshape(showConfirmationBars and (fastConfirmationChangeBullish or fastConfirmationChangeBearish), style=shape.triangleup, location=location.top, color=fastConfirmationChangeBullish ? color.green : color.red, title='Fast Confirmation Bars')
plotshape(showConfirmationBars and buy_signal and confirmationTrendBullish, style=shape.triangleup, location=location.top, color=color.green, title='Buy Signal')
plotshape(showConfirmationBars and sell_signal and confirmationTrendBearish, style=shape.triangledown, location=location.top, color=color.red, title='Sell Signal')

// Generate trade signals
buy_condition = buy_signal and confirmationTrendBullish and not (strategy.opentrades > 0)
sell_condition = sell_signal and confirmationTrendBearish and not (strategy.opentrades > 0)

strategy.entry("Buy", strategy.long, when=buy_condition, comment ="BUY CALLS")
strategy.entry("Sell", strategy.short, when=sell_condition, comment ="BUY PUTS")

// Take Profit
if (takeProfitEnabled)
    strategy.exit("Take Profit Buy", from_entry="Buy", profit=takeProfitValue)
    strategy.exit("Take Profit Sell", from_entry="Sell", profit=takeProfitValue)

// Stop Loss
if (stopLossEnabled)
    strategy.exit("Stop Loss Buy", from_entry="Buy", loss=stopLossValue)
    strategy.exit("Stop Loss Sell", from_entry="Sell", loss=stopLossValue)

// Close trades based on trend confirmation bars
if strategy.opentrades > 0
    if strategy.position_size > 0
        if not confirmationTrendBullish
            strategy.close("Buy", comment ="CLOSE CALLS")
    else
        if not confirmationTrendBearish
            strategy.close("Sell", comment ="CLOSE PUTS")

// Define alert conditions as booleans
buy_open_alert = buy_condition
sell_open_alert = sell_condition
buy_closed_alert = strategy.opentrades < 0
sell_closed_alert = strategy.opentrades > 0

// Alerts
alertcondition(buy_open_alert, title='Buy calls', message='Buy calls Opened')
alertcondition(sell_open_alert, title='buy puts', message='buy Puts Opened')
alertcondition(buy_closed_alert, title='exit calls', message='exit calls ')
alertcondition(sell_closed_alert, title='exit puts', message='exit puts Closed')

Связанные

Больше