Эта стратегия использует индикаторы импульса, включая средний индекс направления (ADX), индекс направления движения (DMI) и индекс товарного канала (CCI), для определения направления тренда и следования тенденциям.
Расчет показателей ADX, DMI и CCI.
Определите направление тренда.
Войдите на позиции.
Выходные позиции со стоп-лосом.
ADX отфильтровывает торговлю во время слабых тенденций.
DMI уменьшает ошибки в определении тренда.
Принятие мер по чрезмерному продлению CCI улучшает сроки и снижает риск.
Объединение индикаторов импульса повышает точность.
Ограничения по потерям стоп-лосса на одну сделку.
Поднимите порог ADX, чтобы обеспечить достаточно сильный тренд.
DMI отстает от тренда на ранней стадии. Добавьте другой анализ для выявления возможностей.
Высокая торговая частота CCI. Расширить диапазон CCI для фильтрации шума.
Рассматривать нейтральную стратегию рынка при длинном и коротком периодах, чтобы хеджировать общий риск позиции.
Оптимизировать параметры ADX для сбалансирования фильтрации шума и тенденции улавливания.
Оптимизируйте параметры DMI для баланса задержки и чувствительности.
Оптимизировать параметры CCI для сбалансирования частоты торговли и отслеживания отклонений.
Проверка добавления или изменения индикаторов для улучшения комбинаций, например MACD, KDJ.
Испытать на разных продуктах, чтобы найти лучшее соответствие.
Оптимизировать размер позиций для контроля риска при сохранении отслеживания трендов.
Стратегия логически использует ADX для тренда, DMI для направления и CCI для отклонений. Но параметры нуждаются в оптимизации и размещении позиций для контроля риска. Правильно настроенная и применяемая к трендовым продуктам, она может обеспечивать стабильную доходность. Трейдеры должны динамично адаптироваться к изменяющимся рынкам.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("ADX Strategy", currency = "USD", initial_capital = 1000, overlay=true) adxlen = input(9, title="ADX Smoothing") dilen = input(14, title="DI Length") ADX_Entry = input(25, title="ADX Entry") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [sig, up, down] = adx(dilen, adxlen) cci_length = input(20, minval=1, title="CCI Length") cci_ma = sma(close, cci_length) cci = (close - cci_ma) / (0.015 * dev(close, cci_length)) stop_loss = syminfo.mintick * 100 open_longs = strategy.position_size > 0 open_shorts = strategy.position_size < 0 possible_bull = false possible_bull := not open_longs ? (possible_bull[1] and not crossunder(up,down) ? true : false) : false possible_bear = false possible_bear := not open_shorts ? (possible_bear[1] and not crossunder(down,up) ? true : false) : false bool bull_entry = crossover(up,down) if(bull_entry and up < ADX_Entry and cci < 0) possible_bull := true bull_entry := false if(possible_bull and up > ADX_Entry and cci > -100) bull_entry := true bool bear_entry = crossover(down,up) if(bear_entry and down < ADX_Entry and cci > 0) possible_bear := true bear_entry := false if(possible_bear and down >= ADX_Entry and cci < 100) bear_entry := true strategy.entry("Short", strategy.short, qty = 1,comment="Short", stop=high[1] - stop_loss, when = bear_entry) strategy.entry("Long", strategy.long, qty = 1, comment="Long", stop=low[1] - stop_loss, when = bull_entry ) strategy.close_all(when = (open_shorts and (crossover(up,down) or crossover(sig,down))) or (open_longs and ( crossover(down,up) or crossover(sig, up))))