Множественное пересечение скользящих средних в сочетании с торговой системой Camarilla по тренду поддержки и сопротивления

EMA CPR SR
Дата создания: 2025-01-06 11:13:31 Последнее изменение: 2025-01-06 11:13:31
Копировать: 0 Количество просмотров: 373
1
Подписаться
1617
Подписчики

Множественное пересечение скользящих средних в сочетании с торговой системой Camarilla по тренду поддержки и сопротивления

Обзор

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

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

Стратегия основана на следующих основных компонентах:

  1. Система множественных скользящих средних (EMA20/50/100/200) используется для подтверждения направления и силы тренда.
  2. Уровни поддержки и сопротивления Камарильи (R3/S3) используются для определения ключевых ценовых уровней.
  3. Центральный ценовой диапазон (CPR) используется для определения внутридневного торгового диапазона.
  4. Сигналы на вход основаны на пересечении цены с EMA200 и подтверждении EMA20.
  5. Стратегии выхода включают фиксированные точки и режимы процентного движения.
  6. Система управления фондами динамически корректирует размер позиции в соответствии с размером счета.

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

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

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2020-01-06 00:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Pradeep Crude oil Entry and Exit", overlay=true)

// Input settings for EMAs
ema20_period = input.int(20, title="EMA 20 Period")
ema50_period = input.int(50, title="EMA 50 Period")
ema100_period = input.int(100, title="EMA 100 Period")
ema200_period = input.int(200, title="EMA 200 Period")

// Fixed line width settings for EMAs
ema20_width = 2  // EMA 20 Line Width
ema50_width = 2  // EMA 50 Line Width
ema100_width = 3 // EMA 100 Line Width
ema200_width = 4 // EMA 200 Line Width

// Backtesting inputs
initial_capital = input.float(50000, title="Initial Capital", minval=100)
position_size_percent = input.float(100, title="Position Size (% of Capital)", minval=0.1, maxval=100)
exit_mode = input.string("Price Movement", title="Exit Mode", options=["Price Movement", "Percentage Movement"])
exit_points = input.int(20, title="Exit After X Points", minval=1)
exit_percentage = input.float(1.0, title="Exit After X% Movement", minval=0.1, step=0.1)

// Calculate EMAs
ema20 = ta.ema(close, ema20_period)
ema50 = ta.ema(close, ema50_period)
ema100 = ta.ema(close, ema100_period)
ema200 = ta.ema(close, ema200_period)

// Signal conditions
long_entry_condition = close > ema200 and close > ema20 and close[1] <= ema200
long_exit_condition = (exit_mode == "Price Movement" and close - strategy.position_avg_price >= exit_points * syminfo.mintick) or 
                      (exit_mode == "Percentage Movement" and (close - strategy.position_avg_price) / strategy.position_avg_price * 100 >= exit_percentage)
short_entry_condition = close < ema200 and close < ema20 and close[1] >= ema200
short_exit_condition = (exit_mode == "Price Movement" and strategy.position_avg_price - close >= exit_points * syminfo.mintick) or 
                       (exit_mode == "Percentage Movement" and (strategy.position_avg_price - close) / strategy.position_avg_price * 100 >= exit_percentage)

// Plot EMAs with specified line widths
plot(ema20, color=color.green, title="EMA 20", linewidth=ema20_width)
plot(ema50, color=color.aqua, title="EMA 50", linewidth=ema50_width)
plot(ema100, color=color.blue, title="EMA 100", linewidth=ema100_width)
plot(ema200, color=color.red, title="EMA 200", linewidth=ema200_width)

// Camarilla Pivot Calculation
prev_high = request.security(syminfo.tickerid, "D", high[1])
prev_low = request.security(syminfo.tickerid, "D", low[1])
prev_close = request.security(syminfo.tickerid, "D", close[1])

R3 = prev_close + (prev_high - prev_low) * 1.1 / 2
S3 = prev_close - (prev_high - prev_low) * 1.1 / 2

// Central Pivot Range (CPR) Calculation
pivot = (prev_high + prev_low + prev_close) / 3
upper_cpr = pivot + (prev_high - prev_low)
lower_cpr = pivot - (prev_high - prev_low)

// Plot Camarilla R3, S3 and CPR levels
plot(R3, color=color.purple, title="Camarilla R3", linewidth=2)
plot(S3, color=color.purple, title="Camarilla S3", linewidth=2)
plot(pivot, color=color.yellow, title="CPR Pivot", linewidth=2)
plot(upper_cpr, color=color.green, title="CPR Upper", linewidth=1)
plot(lower_cpr, color=color.red, title="CPR Lower", linewidth=1)

// Backtesting: Capital and position size
capital = initial_capital
risk_per_trade = (position_size_percent / 100) * capital

// Long positions
if long_entry_condition
    strategy.entry("Long", strategy.long, qty=risk_per_trade / close)
    // Display entry price label
    label.new(bar_index, close, text="Entry: " + str.tostring(close), color=color.green, style=label.style_label_up, yloc=yloc.belowbar)

if long_exit_condition
    strategy.close("Long")
    // Display exit price label
    label.new(bar_index, close, text="Exit: " + str.tostring(close), color=color.red, style=label.style_label_down, yloc=yloc.abovebar)

// Short positions
if short_entry_condition
    strategy.entry("Short", strategy.short, qty=risk_per_trade / close)
    // Display entry price label
    label.new(bar_index, close, text="Entry: " + str.tostring(close), color=color.red, style=label.style_label_down, yloc=yloc.abovebar)

if short_exit_condition
    strategy.close("Short")
    // Display exit price label
    label.new(bar_index, close, text="Exit: " + str.tostring(close), color=color.green, style=label.style_label_up, yloc=yloc.belowbar)

// Plot signals
plotshape(long_entry_condition, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.small, title="Long Entry")
plotshape(long_exit_condition, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.small, title="Long Exit")
plotshape(short_entry_condition, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.small, title="Short Entry")
plotshape(short_exit_condition, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.small, title="Short Exit")