
Эта стратегия представляет собой комплексную торговую систему, основанную на нескольких технических показателях, в основном использующую индикаторные движущиеся средние ((EMA), относительно сильный индекс ((RSI) и объем торгов для создания торговых сигналов и управления позициями. Эта стратегия использует EMA для определения рыночных тенденций, а также использует RSI для определения перепродажи и объединения объема торгов для подтверждения силы сигнала. Кроме того, стратегия включает в себя динамический стоп-лосс и фиксированные ограничения на время удержания позиций для управления рисками и оптимизации торговых показателей.
Сигналы транзакций генерируются:
Динамическая остановка и остановка:
Время фиксированной позиции:
Потеря EMA:
Объем транзакций подтвержден:
Мультииндикаторная синхронность: в сочетании с EMA, RSI и объемом торгов, всесторонний анализ ситуации на рынке, повышение надежности сигнала.
Динамический риск-менеджмент: в зависимости от рыночных колебаний в режиме реального времени корректируется стоп-стоп, чтобы адаптироваться к различным рыночным условиям.
Фиксированное время хранения позиций: избегайте рисков, связанных с длительным хранением позиций, контролируйте время воздействия на каждую сделку.
EMA динамическая остановка: использование равной линии в качестве динамической поддержки сопротивления, обеспечивающей более гибкую защиту от остановки.
Подтверждение объема сделок: использование прорыва объема сделок для подтверждения силы сигнала и повышения точности сделок.
Визуальная помощь: на графике отмечаются сигналы купли-продажи и ключевые уровни цен, что облегчает анализ и принятие решений.
Риск колебания рынка: во время колебания рынка в поперечном направлении, пересечение EMA может часто создавать ложные сигналы.
Фиксированный RSI: фиксированный RSI может не применяться во всех рыночных условиях.
Чувствительность к обесценению объема сделок: обесценение в 3 раза больше среднего объема сделок может быть слишком высоким или слишком низким, и его необходимо корректировать в зависимости от конкретного рынка.
Ограничение времени на фиксированные позиции: фиксированные позиции на 15 K-линии могут привести к преждевременному прекращению прибыльной торговли.
Установка стоп-стоп-стоп: цена закрытия может быть недостаточно оптимизирована в качестве стоп-стоп-стоп-цены при высоком объеме торгов.
Динамический RSI-терминал: автоматически корректирующий RSI-терминал сверхпокупа и сверхпродажи в зависимости от волатильности рынка.
Оптимизация обесценения объемов сделок: внедрение механизмов адаптации для динамического корректирования объемов сделок в соответствии с историческими данными.
Улучшение управления временем удержания позиции: в сочетании с интенсивностью тренда и прибыльностью, динамическая коррекция максимального времени удержания позиции.
Оптимизация стоп-стоп-стадий: рассмотрение возможности внедрения ATR-индикатора для установки стоп-стоп-стадий в зависимости от динамики рынка.
Добавление фильтра тренда: введение долгосрочных ЭМА или трендовых индикаторов, чтобы избежать торговли в направлении, противоположном основной тенденции.
Введение анализа ценового поведения: объединение формы K-линии и уровня сопротивления поддержки для повышения точности входа и выхода.
Подумайте о том, чтобы добавить контроль вывода: установить максимальный лимит вывода и принудительно ликвидировать позицию при достижении определенного уровня вывода.
Эта многопоказательная комплексная динамическая торговая стратегия, объединяя EMA, RSI и объем торгов, создает всеобъемлющую торговую систему. Она не только может улавливать рыночные тенденции, но и управлять рисками с помощью динамических стоп-стоп и фиксированного времени удержания позиций. Преимущества стратегии заключаются в ее многомерном анализе и гибком управлении рисками, но она также сталкивается с проблемами, связанными с изменениями в рыночной среде.
/*backtest
start: 2024-06-29 00:00:00
end: 2024-07-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA & RSI Strategy", overlay=true)
// Install indicators
ema34 = ta.ema(close, 34)
ema89 = ta.ema(close, 89)
ema54 = ta.ema(close, 54)
ema150 = ta.ema(close, 150)
rsi = ta.rsi(close, 14)
// Draw indicator
plot(ema34, color=color.red, title="EMA 34")
plot(ema89, color=color.blue, title="EMA 89")
//plot(ema54, color=color.green, title="EMA 54")
//plot(ema150, color=color.yellow, title="EMA 150")
hline(50, "RSI 50", color=color.gray)
plot(rsi, title="RSI", color=color.orange, linewidth=2, offset=-1)
// condition long or short
longCondition = ta.crossover(ema34, ema89) and rsi > 30
shortCondition = ta.crossunder(ema34, ema89) and rsi < 70
// Add strategy long
if (longCondition)
strategy.entry("Long", strategy.long)
// Add strategy short
if (shortCondition)
strategy.entry("Short", strategy.short)
// Calculate the average volume of previous candles
length = 20 // Number of candles to calculate average volume
avgVolume = ta.sma(volume, length)
highVolumeCondition = volume > 3 * avgVolume
// Determine take profit and stop loss prices when there is high volume
var float takeProfitPriceLong = na
var float stopLossPriceLong = na
var float takeProfitPriceShort = na
var float stopLossPriceShort = na
if (longCondition)
takeProfitPriceLong := na
stopLossPriceLong := na
if (shortCondition)
takeProfitPriceShort := na
stopLossPriceShort := na
// Update take profit and stop loss prices when volume is high
if (strategy.opentrades.entry_id(0) == "Long" and highVolumeCondition)
takeProfitPriceLong := close
stopLossPriceLong := close
if (strategy.opentrades.entry_id(0) == "Short" and highVolumeCondition)
takeProfitPriceShort := close
stopLossPriceShort := close
// Execute exit orders for buy and sell orders when there is high volume
if (not na(takeProfitPriceLong))
strategy.exit("Take Profit Long", from_entry="Long", limit=takeProfitPriceLong, stop=stopLossPriceLong)
if (not na(takeProfitPriceShort))
strategy.exit("Take Profit Short", from_entry="Short", limit=takeProfitPriceShort, stop=stopLossPriceShort)
// Track the number of candles since the order was opened
var int barsSinceEntryLong = na
var int barsSinceEntryShort = na
var bool longPositionClosed = false
var bool shortPositionClosed = false
if (longCondition)
barsSinceEntryLong := 0
longPositionClosed := false
if (shortCondition)
barsSinceEntryShort := 0
shortPositionClosed := false
if (strategy.opentrades.entry_id(0) == "Long")
barsSinceEntryLong := barsSinceEntryLong + 1
if (strategy.opentrades.entry_id(0) == "Short")
barsSinceEntryShort := barsSinceEntryShort + 1
// Check the conditions to close the order at the 15th candle
if (strategy.opentrades.entry_id(0) == "Long" and barsSinceEntryLong >= 15 and not longPositionClosed)
strategy.close("Long")
longPositionClosed := true
if (strategy.opentrades.entry_id(0) == "Short" and barsSinceEntryShort >= 15 and not shortPositionClosed)
strategy.close("Short")
shortPositionClosed := true
// Thêm stop loss theo EMA34
if (strategy.opentrades.entry_id(0) == "Long")
strategy.exit("Stop Loss Long", from_entry="Long", stop=ema34)
if (strategy.opentrades.entry_id(0) == "Short")
strategy.exit("Stop Loss Short", from_entry="Short", stop=ema34)
// Displays buy/sell signals and price levels on the chart
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// Displays take profit and stop loss prices on the chart
// var line takeProfitLineLong = na
// var line stopLossLineLong = na
// var line takeProfitLineShort = na
// var line stopLossLineShort = na
// if (not na(takeProfitPriceLong))
// if na(takeProfitLineLong)
// takeProfitLineLong := line.new(x1=bar_index, y1=takeProfitPriceLong, x2=bar_index + 1, y2=takeProfitPriceLong, color=color.blue, width=1, style=line.style_dashed)
// else
// line.set_xy1(takeProfitLineLong, x=bar_index, y=takeProfitPriceLong)
// line.set_xy2(takeProfitLineLong, x=bar_index + 1, y=takeProfitPriceLong)
// if (not na(stopLossPriceLong))
// if na(stopLossLineLong)
// stopLossLineLong := line.new(x1=bar_index, y1=stopLossPriceLong, x2=bar_index + 1, y2=stopLossPriceLong, color=color.red, width=1, style=line.style_dashed)
// else
// line.set_xy1(stopLossLineLong, x=bar_index, y=stopLossPriceLong)
// line.set_xy2(stopLossLineLong, x=bar_index + 1, y=stopLossPriceLong)
// if (not na(takeProfitPriceShort))
// if na(takeProfitLineShort)
// takeProfitLineShort := line.new(x1=bar_index, y1=takeProfitPriceShort, x2=bar_index + 1, y2=takeProfitPriceShort, color=color.blue, width=1, style=line.style_dashed)
// else
// line.set_xy1(takeProfitLineShort, x=bar_index, y=takeProfitPriceShort)
// line.set_xy2(takeProfitLineShort, x=bar_index + 1, y=takeProfitPriceShort)
// if (not na(stopLossPriceShort))
// if na(stopLossLineShort)
// stopLossLineShort := line.new(x1=bar_index, y1=stopLossPriceShort, x2=bar_index + 1, y2=stopLossPriceShort, color=color.red, width=1, style=line.style_dashed)
// else
// line.set_xy1(stopLossLineShort, x=bar_index, y=stopLossPriceShort)
// line.set_xy2(stopLossLineShort, x=bar_index + 1, y=stopLossPriceShort)
// // Shows annotations for take profit and stop loss prices
// if (not na(takeProfitPriceLong))
// label.new(x=bar_index, y=takeProfitPriceLong, text="TP Long", style=label.style_label_down, color=color.blue, textcolor=color.white)
// if (not na(stopLossPriceLong))
// label.new(x=bar_index, y=stopLossPriceLong, text="SL Long", style=label.style_label_up, color=color.red, textcolor=color.white)
// if (not na(takeProfitPriceShort))
// label.new(x=bar_index, y=takeProfitPriceShort, text="TP Short", style=label.style_label_up, color=color.blue, textcolor=color.white)
// if (not na(stopLossPriceShort))
// label.new(x=bar_index, y=stopLossPriceShort, text="SL Short", style=label.style_label_down, color=color.red, textcolor=color.white)