Стратегия Dynamic Take Profit Following Trend обнаруживает долгосрочные тенденции и краткосрочные отступления, чтобы достичь покупки низкого и продажи высокого, с целью преследования восходящих тенденций.
Логика покупки этой стратегии заключается в следующем: когда появляется долгосрочный восходящий тренд (200-дневная EMA повышается, 200-дневный RSI превышает 51), и происходит краткосрочный откат (последние 2 свечи показывают снижение цены закрытия), открываются длинные позиции.
Логика продажи заключается в следующем: получать прибыль, когда цена увеличивается более чем на 1 единицу волатильности; остановить потерю, когда цена снижается более чем на 2 единицы волатильности.
Единица волатильности рассчитывается как: 2 раза стандартное отклонение цен закрытия за последние 50 дней. Это может автоматически обнаруживать условия волатильности различных монет без необходимости ручного настройки процентов.
Самое большое преимущество этой стратегии заключается в том, что она может динамически обнаруживать размер волатильности различных монет и соответственно устанавливать уровни стоп-лосса / прибыли. Это избегает проблемы фиксированных процентных настроек и может автоматически адаптироваться к большему количеству монет.
Еще одно преимущество заключается в том, что сочетание долгосрочных и краткосрочных суждений может эффективно отфильтровать ложные прорывы.
Если волатильность слишком высока, расстояния добычи могут быть слишком близки, чтобы продолжать преследовать восходящий тренд; если волатильность слишком низкая, стоп-лосс может быть задействован слишком быстро.
Другим риском является зависимость стратегии от краткосрочных тенденций. Если существует долгосрочный восходящий тренд без краткосрочного отступления, время входа будет пропущено.
Стратегия может быть оптимизирована в следующих направлениях:
Добавить более длительные суждения EMA для избежания ошибок единиц волатильности
Добавьте такие показатели, как объемы торговли, чтобы судить о тенденциях, уменьшите зависимость от краткосрочных свечей
Оптимизировать условия въезда и выезда, установить более строгие правила въезда
Сочетание алгоритмов машинного обучения для определения направления тренда, достижение более высокого уровня выигрыша
Динамическая стратегия получения прибыли после тренда имеет четкую логику в своем ядре
/*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)