Двухнаправленная стратегия отслеживания

Автор:Чао Чжан, Дата: 2023-12-18 10:47:46
Тэги:

img

Обзор

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

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

  1. Индикатор HiLo Activator рассчитывает цену средней точки с использованием средней точки самого высокого и самого низкого минимума. Когда цены выходят выше средней точки, генерируется сигнал покупки. Когда цены падают ниже средней точки, генерируется сигнал продажи.

  2. Средний направленный индекс (ADX) используется для измерения силы тренда. Чем выше значение ADX, тем сильнее тренд. Эта стратегия использует ADX с порогом для фильтрации сигналов, генерируя сигналы только тогда, когда тренд достаточно силен.

  3. Показатели направления DI+ и DI- представляют силу восходящего и нисходящего тренда соответственно.

  4. Сигналы покупки генерируются, когда цены выходят выше средней точки, ADX выше порога, а DI+ выше порога. Сигналы продажи генерируются, когда цены падают ниже средней точки, ADX выше порога, а DI- выше порога.

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

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

По сравнению с использованием только индикаторов импульса, эта стратегия добавляет оценку силы тренда для фильтрации сигналов и повышения прибыльности.

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

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

Эта стратегия имеет некоторые риски, связанные с временными переломами цен, которые генерируют неправильные сигналы.

Чтобы уменьшить риски, настраивайте параметры активатора HiLo, чтобы увеличить диапазон прорыва.

Пользователи также должны отметить различия между продуктами и рыночной средой.

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

К основным способам оптимизации этой стратегии относятся:

  1. Настроить период активации и уровень запуска, чтобы сбалансировать риски и время.

  2. Настройка периода и порога ADX для сбалансирования качества и частоты сигнала.

  3. Установление отдельных пороговых значений для DI+ и DI- для учета различий между восходящими и нисходящими тенденциями.

  4. Добавить стратегии стоп-лосса с уровнем стоп-лосса для контроля одиночных потерь.

  5. Комбинировать с другими вспомогательными показателями для улучшения общей стабильности.

Заключение

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


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

//@version=4
strategy("HiLo Activator with ADX", shorttitle="HASB_ADX", overlay=true)

// Parameters for the HiLo Activator
length_ha = input(14, title="HiLo Activator Period")
offset_ha = input(0, title="Offset")
trigger_ha = input(1, title="Trigger for Buy/Sell")

// Parameters for ADX
adx_length = input(14, title="ADX Period", minval=1)
adx_threshold = input(25, title="ADX Threshold")
di_threshold = input(50, title="DI Threshold")

// Parameter for choosing the number of candles for backtest
backtest_candles = input(1000, title="Number of Candles for Backtest", minval=1)

// Function to get backtest data
getBacktestData() =>
    var float data = na
    if bar_index >= backtest_candles
        data := security(syminfo.tickerid, "D", close[backtest_candles])
    data

// HiLo Activator calculations
ha = (highest(high, length_ha) + lowest(low, length_ha)) / 2

// ADX calculations
trh = high - high[1]
trl = low[1] - low
tr = max(trh, trl)
atr = sma(tr, adx_length)
plus_dm = high - high[1] > low[1] - low ? max(high - high[1], 0) : 0
minus_dm = low[1] - low > high - high[1] ? max(low[1] - low, 0) : 0
smoothed_plus_dm = sma(plus_dm, adx_length)
smoothed_minus_dm = sma(minus_dm, adx_length)
di_plus = 100 * (smoothed_plus_dm / atr)
di_minus = 100 * (smoothed_minus_dm / atr)
dx = 100 * abs(di_plus - di_minus) / (di_plus + di_minus)
adx = sma(dx, adx_length)

// Buy and Sell signals based on HiLo Activator and ADX
signalLong = crossover(close, ha) and adx > adx_threshold and di_plus > di_threshold
signalShort = crossunder(close, ha) and adx > adx_threshold and di_minus > di_threshold

// Plot HiLo Activator and ADX
plot(ha, color=color.blue, title="HiLo Activator")
plot(offset_ha, color=color.red, style=plot.style_histogram, title="Offset")
plot(adx, color=color.purple, title="ADX")

// Backtest strategy
strategy.entry("Buy", strategy.long, when = signalLong)
strategy.entry("Sell", strategy.short, when = signalShort)
strategy.close("Buy", when = signalShort)
strategy.close("Sell", when = signalLong)

// Accuracy percentage
var accuracy = 0.0
var totalTrades = 0
var winningTrades = 0

if (signalLong or signalShort)
    totalTrades := totalTrades + 1

if (signalLong and (not na(signalLong[1]) and (not signalLong[1])))
    winningTrades := winningTrades + 1

if (signalShort and (not na(signalShort[1]) and (not signalShort[1])))
    winningTrades := winningTrades + 1

accuracy := totalTrades > 0 ? (winningTrades / totalTrades) * 100 : 0

// Plot accuracy percentage on the chart
plot(accuracy, title="Accuracy Percentage", color=color.purple, style=plot.style_histogram)


Больше