Динамическая стратегия остановки потерь

Автор:Чао Чжан, Дата: 2023-12-21 15:58:54
Тэги:

img

Обзор

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

Логика стратегии

  1. Сравните цену закрытия ежедневных свечей с самой высокой и самой низкой ценой предыдущей ежедневной свечи, чтобы определить направление тренда. Если цена закрытия выше, чем самая высокая цена предыдущего дня, она определяется как восходящий тренд. Если цена закрытия ниже, чем самая низкая цена предыдущего дня, она определяется как нисходящий тренд.

  2. Когда вы находитесь в восходящем тренде, займите длинный курс, когда цена закрытия 15-минутного свеча выше, чем самая высокая цена предыдущего 15-минутного свеча. Когда вы находитесь в нисходящем тренде, займите короткий курс, когда цена закрытия 15-минутного свеча ниже, чем самая низкая цена предыдущего 15-минутного свеча.

  3. Установите самую низкую цену предыдущей 15-минутной свечи как цену стоп-лосса после длинного хода. Установите самую высокую цену предыдущей 15-минутной свечи как цену стоп-лосса после короткого хода.

  4. Когда 15-минутный свечник снова достигнет нового максимума или минимума, корректируйте цену стоп-лосса соответственно.

Анализ преимуществ

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

В частности, преимущества включают:

  1. Суждения, основанные на тренде, могут своевременно определить тенденции рынка и выбрать правильное направление торговли.

  2. Торговля в 15-минутный промежуток времени позволяет частые входы и выходы, чтобы поймать больше возможностей.

  3. Динамическая корректировка стоп-лосса на основе новых максимумов или минимумов снижает риски возникновения стоп-лосса.

  4. Разумное расположение стоп-лосса в значительной степени позволяет избежать ненужных потерь.

Анализ рисков

Основным риском этой стратегии являются ошибки в оценке тенденций.

  1. Неправильное суждение о дневном тренде может привести к неправильному направлению торговли.

  2. Цены могут сильно колебаться в краткосрочной перспективе, увеличивая вероятность того, что 15-минутный стоп-лосс будет достигнут.

  3. Неправильное определение точек перелома тренда может привести к потерям.

Соответствующие решения:

  1. Добавьте показатели из других временных рамок для всеобъемлющих суждений, чтобы избежать зависимости от одного временного рамок.

  2. Оценить волатильность рынка и расслабить диапазон стоп-лосса надлежащим образом во время высокой волатильности.

  3. Добавить механизм идентификации точки переворота тренда для закрытия позиций своевременно до переворота.

Руководство по оптимизации

Есть еще много возможностей для дальнейшей оптимизации:

  1. Добавьте другие индикаторы временных рамок для оптимизации сбора трендов.

  2. Испытайте различные параметры соотношения стоп-лосса, чтобы найти оптимальные параметры.

  3. Добавить показатели объема, чтобы избежать ошибок от дивергенции объема.

  4. Добавьте механизмы обратного движения тренда для оптимизации точек выхода.

  5. Оценить возможность расширения интервалов цены на остановку для дальнейшего снижения рисков возникновения стоп-лосса.

Резюме

Общая производительность этой стратегии хороша. Логика ясна и понятна. У нее есть такие преимущества, как динамическая коррекция стоп-лосса, частая торговля и торговля в соответствии с тенденциями. Она может эффективно контролировать риски и блокировать прибыль, и стоит дальнейшего тестирования и оптимизации. Но все еще есть возможности для улучшения. Рекомендуется улучшить такие аспекты, как всеобъемлющее суждение с нескольких углов, оптимизация параметров, добавление механизмов идентификации обратного тренда и т. Д., Чтобы еще больше укрепить стабильность и рентабельность стратегии.


/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-15 02:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Anand's Strategy", overlay=true)

// Get the high and low of the previous day's candle
prev_high = request.security(syminfo.tickerid, "D", high[2])
prev_low = request.security(syminfo.tickerid, "D", low[2])

// var float prev_high = na
// var float prev_low = na

prev_close = request.security(syminfo.tickerid, "D", close[1])


getDayIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "D", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "D", low[_bar])
    [_indexed_high, _indexed_low]

var index = 2

while index >= 0
    [indexed_high_D, indexed_low_D] =  getDayIndexedHighLow(index)
  
    if prev_close > indexed_high_D or prev_close < indexed_low_D
        prev_high := indexed_high_D
        prev_low := indexed_low_D
        break
    // Decrease the index to move to the previous 15-minute candle
    index := index - 1


// Determine the trade direction based on the candle criterion
trade_direction = prev_close > prev_high ? 1 : (prev_close < prev_low ? -1 : 0)

// Get the current close from 15-minute timeframe
current_close = request.security(syminfo.tickerid, "15", close[1])
prev_high_15m = request.security(syminfo.tickerid, "15", high[2])
prev_low_15m = request.security(syminfo.tickerid, "15", low[2])

// var float prev_high_15m = na
// var float prev_low_15m = na

getIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "15", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "15", low[_bar])
    [_indexed_high, _indexed_low]


// Loop through previous 15-minute candles until the condition is met
var  i = 2

while i >= 2
    [indexed_high_15m, indexed_low_15m] =  getIndexedHighLow(i)
  
    if current_close > indexed_high_15m or current_close < indexed_low_15m
        prev_high_15m := indexed_high_15m
        prev_low_15m := indexed_low_15m
        break
    // Decrease the index to move to the previous 15-minute candle
    i := i - 1



buy_condition = trade_direction == 1 and current_close > prev_high_15m
stop_loss_buy = prev_low_15m

// Sell Trade Criteria in Negative Trend
sell_condition = trade_direction == -1 and current_close < prev_low_15m
stop_loss_sell = prev_high_15m


// Trailing Stop Loss for Buy Trade
// Custom Trailing Stop Function for Buy Trade
var float trail_stop_buy = na
trailing_buy_condition = buy_condition and current_close > trail_stop_buy
if trailing_buy_condition
    trail_stop_buy := current_close

// Custom Trailing Stop Function for Sell Trade
var float trail_stop_sell = na
trailing_sell_condition = sell_condition and current_close < trail_stop_sell
if trailing_sell_condition
    trail_stop_sell := current_close

// Take Buy Trade with Stop Loss
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Stop Loss", "Buy", stop=stop_loss_buy)

// Take Sell Trade with Stop Loss
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Stop Loss", "Sell", stop=stop_loss_sell)

// Set the background color based on the trade direction
bgcolor(trade_direction == 1 ? color.new(color.green, 90) : trade_direction == -1 ? color.new(color.red, 90) : na)

Больше