Динамическая прибыль в соответствии со стратегией тренда

Автор:Чао Чжан, Дата: 2023-12-29 16:06:54
Тэги:

img

Обзор

Стратегия Dynamic Take Profit Following Trend обнаруживает долгосрочные тенденции и краткосрочные отступления, чтобы достичь покупки низкого и продажи высокого, с целью преследования восходящих тенденций.

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

Логика покупки этой стратегии заключается в следующем: когда появляется долгосрочный восходящий тренд (200-дневная EMA повышается, 200-дневный RSI превышает 51), и происходит краткосрочный откат (последние 2 свечи показывают снижение цены закрытия), открываются длинные позиции.

Логика продажи заключается в следующем: получать прибыль, когда цена увеличивается более чем на 1 единицу волатильности; остановить потерю, когда цена снижается более чем на 2 единицы волатильности.

Единица волатильности рассчитывается как: 2 раза стандартное отклонение цен закрытия за последние 50 дней. Это может автоматически обнаруживать условия волатильности различных монет без необходимости ручного настройки процентов.

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

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

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

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

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

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

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

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

  1. Добавить более длительные суждения EMA для избежания ошибок единиц волатильности

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

  3. Оптимизировать условия въезда и выезда, установить более строгие правила въезда

  4. Сочетание алгоритмов машинного обучения для определения направления тренда, достижение более высокого уровня выигрыша

Заключение

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


/*backtest
start: 2022-12-22 00:00:00
end: 2023-12-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BHD_Trade_Bot

strategy(shorttitle='Take Profit On Trend',
 title='Take Profit On Trend (by BHD_Trade_Bot)',
 overlay=true,
 initial_capital = 15,
 default_qty_type = strategy.cash,
 default_qty_value = 15,
 commission_type=strategy.commission.percent,
 commission_value=0.1)



//Backtest Time
start_day = 1
start_month = 1
start_year = 2021
end_day = 1
end_month = 1
end_year = 2050
start_time = timestamp(start_year, start_month, start_day, 00, 00)
end_time = timestamp(end_year, end_month, end_day, 23, 59)
is_back_test_time() =>
    time >= start_time and time <= end_time ? true : false

// Last bar
h1_last_bar = (timenow - time)/1000/60/60 < 2



// EMA
ema50 = ema(close, 50)
ema200 = ema(close, 200)

// RSI length 200
rsi200 = rsi(close, 200)

// Bollinger Bands length 50
bb50 = 2 * stdev(close, 50)

// BHD Unit
bhd_unit = sma(bb50, 100)
bb50_upper = ema50 + bhd_unit
bb50_lower = ema50 - bhd_unit



// All n candles is going down
all_body_decrease(n) =>
    isValid = true
    for i = 0 to (n - 1)
        if (close[i] > close[i + 1])
            isValid := false
            break
    isValid



// ENTRY

// Long-term uptrend
entry_condition1 = rsi200 > 51 

// Short-term downtrend
entry_condition2 = all_body_decrease(2) 

ENTRY_CONDITION = entry_condition1 and entry_condition2

if (ENTRY_CONDITION and is_back_test_time())
    strategy.entry("entry", strategy.long)



// CLOSE CONDITIONS

// Price increase 1 BHD unit
TAKE_PROFIT = close > strategy.position_avg_price + bhd_unit

// Price decrease 2 BHD unit
STOP_LOSS = close < strategy.position_avg_price - bhd_unit * 2

CLOSE_CONDITION = TAKE_PROFIT or STOP_LOSS

if (CLOSE_CONDITION or h1_last_bar)
    strategy.close("entry")



// Draw
plot(ema50)
plot(ema200, color=color.yellow)
plot(bb50_upper)
plot(bb50_lower)


Больше