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

Двойная EMA и адаптивная стратегия торговли относительной силы

Автор:Чао Чжан, Дата: 2024-12-04 15:29:05
Тэги:ЕМАРСИРС

img

Обзор

Эта стратегия является всеобъемлющей торговой системой, которая сочетает в себе двойную систему EMA, индекс относительной силы (RSI) и анализ относительной силы (RS). Стратегия подтверждает тенденции посредством перекрестного использования 13-дневных и 21-дневных экспоненциальных скользящих средних (EMA), используя при этом значения RSI и RS относительно индекса бенчмарка для подтверждения сигнала, реализуя многомерный механизм принятия решений о торговле. Она также включает механизмы контроля риска, основанные на 52-недельных максимумах и суждениях о условиях повторного входа.

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

Стратегия использует механизм подтверждения множественного сигнала:

  1. Сигналы входа требуют следующих условий:
    • EMA13 пересекает EMA21 или цена превышает EMA13
    • RSI выше 60
    • Положительная относительная прочность (RS)
  2. Условия выхода включают:
    • Цена падает ниже EMA21
    • RSI ниже 50
    • РС становится отрицательным.
  3. Условия повторного въезда:
    • Цены пересекаются над EMA13 и EMA13 над EMA21
    • РС остается положительным.
    • Или цены превышают максимум прошлой недели.

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

  1. Подтверждение нескольких сигналов снижает риск ложного выхода
  2. Интеграция анализа относительной прочности эффективно отфильтровывает производителей
  3. Принимает адаптивный механизм корректировки временных рамок
  4. Всеобъемлющая система контроля рисков
  5. Интеллектуальный механизм повторного входа
  6. Визуализация состояния торгов в режиме реального времени

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

  1. Потенциальная частота торговли на нестабильных рынках
  2. Многочисленные показатели могут привести к отставанию сигналов
  3. Фиксированные пороговые значения РСИ могут не соответствовать всем рыночным условиям
  4. Расчет RS зависит от точности индекса эталонного показателя
  5. 52-недельный высокий стоп-лосс может быть слишком свободным

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

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

Резюме

Стратегия создает всеобъемлющую торговую систему путем сочетания технического анализа и анализа относительной силы. Механизм подтверждения множественного сигнала и система контроля рисков делают ее очень практичной. Благодаря предложенным направлениям оптимизации есть место для дальнейшего улучшения. Успешная реализация требует от трейдеров глубокого понимания рынка и внесения соответствующих корректировок параметров на основе специфических характеристик торговых инструментов.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-03 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA 13 & 21 Entry Exit", overlay=true)

// Define the EMAs
ema13 = ta.ema(close, 13)
ema21 = ta.ema(close, 21)

// Define the RSI
rsi = ta.rsi(close, 14)

// Calculate the closing price relative to Nifty 50
//nifty50 = request.security("NSE:NIFTY", timeframe.period, close)
//closeRelative = close / nifty50

// Define a base period (e.g., 123) and adjust it based on the timeframe
//basePeriod = 123

// Calculate the effective period based on the timeframe
//effectivePeriod = basePeriod * (timeframe.isintraday ? (60 / timeframe.multiplier) : 1)

// Calculate the EMA
//rs = ta.ema(closeRelative, effectivePeriod)

// Define the Relative Strength with respect to NIFTY 50
nifty50 = request.security("swap", "D", close)
rs = ta.ema(close / nifty50, 55 )

// Define the previous 2-week low and last week's high
twoWeekLow = ta.lowest(low, 10)  // 10 trading days roughly equal to 2 weeks
lastWeekHigh = ta.highest(high, 5)  // 5 trading days roughly equal to 1 week
fiftytwoWeekhigh = ta.highest(high, 52*5) // 252 tradingdays roughly equal to 52 week.

// Long condition: EMA 21 crossing above EMA 55, price above EMA 21, RSI > 50, and RS > 0
longCondition = ta.crossover(ema13, ema21) or close > ema13 and rsi > 60 and rs > 0

// Exit condition: Price closing below EMA 55 or below the previous 2-week low
exitCondition = close < ema21 or rsi < 50 or rs < 0 //or close < fiftytwoWeekhigh*0.80

// Re-entry condition: Price crossing above EMA 21 after an exit, EMA 21 > EMA 55, and RS > 1
reEntryCondition = ta.crossover(close, ema13) and ema13 > ema21 and rs > 0

// Re-entry condition if trailing stop loss is hit: Price crossing above last week's high
reEntryAfterSL = ta.crossover(close, lastWeekHigh)

// Plot the EMAs
plot(ema13 ,color=color.green, title="EMA 13",linewidth = 2)
plot(ema21, color=color.red, title="EMA 21",linewidth = 2)


// Plot buy and sell signals
plotshape(series=longCondition, location=location.abovebar, color=color.rgb(50, 243, 130), style=shape.flag, title="Buy Signal")
plotshape(series=exitCondition, location=location.belowbar, color=color.red, style=shape.xcross, title="Sell Signal")
plotshape(series=reEntryCondition or reEntryAfterSL, location=location.belowbar, color=color.blue, style=shape.labelup, title="Re-entry Signal")
//plotshape(series = fiftytwoWeekhigh,location=location.abovebar, color=color.blue,style=shape.flag, title="52WH")

// Plot background color for RS > 0
//bgcolor(rs > 0 ? color.new(color.green, 90) : na, title="RS Positive Background")
// Plot the previous 2-week low and last week's high
// plot(twoWeekLow, color=color.orange, title="2-Week Low")
// plot(lastWeekHigh, color=color.purple, title="Last Week High")

// Strategy logic
if (longCondition or reEntryCondition or reEntryAfterSL)
    strategy.entry("Long", strategy.long)

if (exitCondition)
    strategy.close("Long")

 // Calculate Stop Loss (SL) and Profit
var float entryPrice = na
var float stopLoss = na
var float profit = na

if (strategy.opentrades > 0)
    entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)
    stopLoss := fiftytwoWeekhigh * 0.80
    profit := (close - entryPrice) / entryPrice * 100

// Display the strategy table
var table strategyTable = table.new(position.top_right, 4, 2, border_width = 1)

// Make the table movable
tableX = input.int(0, title="Table X Position")
tableY = input.int(0, title="Table Y Position")

// Add size options for the table
tableSize = input.string("small", title="Table Size", options=["tiny", "small", "large"])

// Adjust table size based on user input
tableWidth = tableSize == "tiny" ? 2 : tableSize == "small" ? 4 : 6
tableHeight = tableSize == "tiny" ? 1 : tableSize == "small" ? 2 : 3

// Create the table with the specified size
//table = table.new(position.top_right, tableWidth, tableHeight, border_width = 1)

// Position the table based on user input
// table.cell(strategyTable, tableX, tableY, "Entry Price",  bgcolor=#18eef9)
// table.cell(strategyTable, tableX, tableY + 1, str.tostring(entryPrice, format.mintick), bgcolor=#18eef9)
// table.cell(strategyTable, tableX + 1, tableY, "Stop Loss (20%)", bgcolor=color.red)
// table.cell(strategyTable, tableX + 1, tableY + 1, str.tostring(stopLoss, format.mintick), bgcolor=color.red)
// table.cell(strategyTable, tableX + 2, tableY, "Profit (%)", bgcolor=color.green)
// table.cell(strategyTable, tableX + 2, tableY + 1, str.tostring(profit, format.percent), bgcolor=color.green)


Связанные

Больше