
Динамическая стратегия отслеживания трендов с помощью обнаружения долгосрочных тенденций и краткосрочных отклонений, для достижения целей по снижению цены и удовлетворения тенденций к росту. Эта стратегия одновременно использует волатильные единицы для обнаружения размера прибыли и убытка, что позволяет применять ее для всех валют без беспокойства о процентном изменении.
Логика покупки этой стратегии заключается в том, чтобы покупать и открывать позиции, когда возникают длительные тенденции к росту (высокая 200-дневная ЭМА, RSI более 51 на 200-й день) и краткосрочные понижательные отклонения (последние 2 линии K закрываются ценой).
Логика продажи заключается в следующем: остановитесь, когда цена повышается более чем на одну колебательную единицу; остановитесь, когда цена падает более чем на две колебательные единицы.
Единицы колебаний рассчитываются следующим образом: 2 раза от стандартной разницы цены закрытия в течение 50 дней в качестве базовых единиц колебаний. Таким образом, можно обнаружить собственные колебания различных валют, без необходимости устанавливать проценты.
Наибольшим преимуществом этой стратегии является то, что можно динамически определять величину колебаний различных валют, устанавливая стоп-лосс в зависимости от колебаний в самой валюте. Это позволяет избежать проблемы с фиксированной настройкой процентной стойки и автоматически адаптироваться к большему количеству валют.
Еще одно преимущество заключается в том, что в сочетании с долгосрочным краткосрочным суждением можно эффективно отфильтровать ложные прорывы. Используйте долгосрочные тенденции, чтобы определить, что монеты могут вырасти в будущем, а затем в сочетании с краткосрочным отзывным сигналом можно эффективно избежать ложных сигналов, таких как сжатие пояса буринга.
Наибольший риск этой стратегии заключается в установке стоп-стоп-стоп-единиц. Если колебание слишком большое, то стоп-дистанция может быть слишком близка, и не может быть продолжена; если колебание слишком маленькое, то потеря может быть слишком быстрой. Это требует использования более длительных циклов EMA в качестве вспомогательного, чтобы избежать ошибок в оценке колебаний.
Еще один риск - зависимость стратегии от краткосрочного суждения о тенденциях. Если возникнет длительный рост, но в краткосрочной перспективе не будет корректировки, то будет пропущено время входа. Это может потребовать добавления других вспомогательных показателей суждения.
Эта стратегия может быть оптимизирована в следующих направлениях:
Добавление более длительных периодов EMA, чтобы избежать ошибок в волатильности
Увеличение объемов сделок для оценки тенденций и снижение зависимости от краткосрочной линии k
Оптимизация условий для открытия и закрытия позиций, установление более строгих правил входа
Повышенная вероятность победы при помощи алгоритмов машинного обучения
Основная идея стратегии динамического отслеживания трендов состоит в установке динамических волатильных единиц. Стратегия может автоматически адаптироваться к установке единиц прибыли и убытка в разных валютах без необходимости вручную устанавливать проценты. Вместе с длительным и кратковременным двойным суждением она может эффективно отсеивать ложные сигналы.
/*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)