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

Многопоказательная динамическая стратегия торговли

Автор:Чао Чжан, Дата: 2024-07-30 17:29:59
Тэги:ЕМАРСИSMAТПSL

img

Обзор

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

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

  1. Производство торговых сигналов:

    • Длинный вход: EMA34 пересекает EMA89, а RSI больше 30
    • Короткий вход: EMA34 пересекает ниже EMA89, а RSI меньше 70
  2. Динамическая прибыль и стоп-лосс:

    • Обновления цен на получение прибыли и стоп-лосс при объеме торговли, превышающем в 3 раза средний объем последних 20 свечей
    • Определяет цены на получение прибыли и стоп-лосс к цене закрытия при возникновении высокого объема
  3. Фиксированное время ожидания:

    • Завершение позиции после 15 свечей, независимо от прибыли или убытка
  4. ЕМА стоп-лосс:

    • Использует EMA34 как динамическую линию стоп-лосса
  5. Подтверждение объема:

    • Использует условия высокого объема для подтверждения силы сигнала и обновления цен на получение прибыли и стоп-лосс

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

  1. Многоиндикаторная синергия: объединяет EMA, RSI и объем для комплексного анализа рынка, повышая надежность сигнала.

  2. Динамическое управление рисками: регулирует прибыль и стоп-лосс в режиме реального времени на основе волатильности рынка, адаптируясь к различным рыночным условиям.

  3. Фиксированное время хранения: предотвращает риски, связанные с долгосрочным хранением, контролируя время хранения для каждой сделки.

  4. Динамическая стоп-лосс EMA: использует скользящие средние в качестве динамической поддержки и сопротивления, обеспечивая более гибкую защиту стоп-лосса.

  5. Подтверждение объема: Использует объемные прорывы для подтверждения силы сигнала, увеличивая точность торговли.

  6. Визуальные средства: отражает сигналы покупки/продажи и ключевые уровни цен на графике, облегчая анализ и принятие решений.

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

  1. Риск перепадов на рынке: пересечения EMA могут часто вызывать ложные сигналы на боковых, волатильных рынках.

  2. Фиксированные пороги RSI: установленные пороги RSI могут быть не подходящими для всех рыночных условий.

  3. Чувствительность порога объема: средний порог объема в 3 раза может быть слишком высоким или низким, что требует корректировки для конкретных рынков.

  4. Фиксированное время хранения: фиксированное время закрытия с 15-ю свечами может преждевременно прекратить прибыльные сделки.

  5. Установление цены на получение прибыли и стоп-лосс: использование цены закрытия при большом объеме возникновения для получения прибыли и стоп-лосса может быть не оптимальным.

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

  1. Динамические пороги RSI: автоматически корректируют пороги RSI перекупленности/перепроданности на основе волатильности рынка.

  2. Оптимизировать пороги объема: ввести адаптивный механизм для динамической корректировки мультипликаторов объема на основе исторических данных.

  3. Улучшить управление временем хранения: динамически корректировать максимальное время хранения на основе силы тренда и рентабельности.

  4. Улучшить настройки получения прибыли и остановки потерь: рассмотреть возможность включения индикатора ATR для динамического установления цен на получение прибыли и остановку потерь на основе волатильности рынка.

  5. Добавить фильтры тренда: ввести долгосрочные EMA или индикаторы тренда, чтобы избежать торговли против основного тренда.

  6. Включить анализ действий цен: объединить модели свечей и уровни поддержки / сопротивления для улучшения точности входа и выхода.

  7. Подумайте о контроле вывода: Установите максимальные лимиты вывода, заставляя закрыть позицию при достижении определенных уровней вывода.

Резюме

Эта многопоказательная динамическая стратегия торговли создает комплексную торговую систему, объединяя EMA, RSI и объем. Она не только отслеживает рыночные тенденции, но и управляет рисками с помощью динамического анализа прибыли/стоп-лосса и фиксированного времени удержания. Сила стратегии заключается в многомерном анализе и гибком управлении рисками, но она также сталкивается с проблемами, связанными с изменением рыночной среды. Благодаря дальнейшей оптимизации порогов 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)


Связанные

Больше