Эта стратегия использует индикаторы импульса ADX, RSI и Bollinger Bands для определения рыночных тенденций и ситуаций перекупки/перепродажи, с тем чтобы реализовать автоматизированную торговлю для покупки низкого и продажи высокого.
Индикатор ADX определяет тренд. Когда ADX больше 32, он указывает на тренд на рынке.
Индикатор RSI определяет уровни перекупа/перепродажи. Когда RSI пересекает уровень выше 30, он сигнализирует о перепроданном рынке. Когда RSI пересекает уровень ниже 70, он сигнализирует о перекупленном рынке.
Боллингерские полосы определяют консолидацию и прорыв. Когда цена закрытия превышает верхнюю полосу, это сигнализирует о конце консолидации и взлету. Когда цена закрытия превышает нижнюю полосу, это сигнализирует о конце консолидации и прорыве вниз.
На основе вышеуказанных показателей стратегия торговли определяется следующим образом:
Условие покупки:
Условия продажи:
Эта стратегия использует несколько индикаторов для определения рыночных условий, избегая вероятности ошибки при использовании одного индикатора.
По сравнению с использованием только индикаторов тренда, эта стратегия может более своевременно улавливать краткосрочные возможности. По сравнению с использованием только осцилляторов, эта стратегия может лучше понять направление тренда. Поэтому она сохраняет преимущество отслеживания тенденций, но также имеет гибкость средней реверсии. Это потенциально эффективная количественная стратегия.
К основным рискам этой стратегии относятся:
Риск ложных сигналов от индикаторов.
Риск того, что остановки будут слишком тесными, краткосрочные колебания рынка могут вывести позицию из строя, если остановки слишком близки.
Риск перенастройки: если параметры показателей будут приспособлены только к историческим данным, стабильность будет сомнительной и может не адаптироваться к изменяющейся динамике рынка.
Меры управления рисками:
Ручное вмешательство при ненормальных рыночных условиях, чтобы приостановить стратегию и избежать потерь от ложных сигналов.
Установите разумное расстояние до остановки, используя скользящие средние для определения уровней остановки, чтобы избежать преждевременной остановки.
Введение модуля настройки параметров, динамическая оптимизация параметров с использованием анализа ходьбы вперед для обеспечения надежности.
К основным аспектам совершенствования этой стратегии относятся:
Оптимизировать параметры показателей с использованием алгоритмов машинного обучения, адаптированных к каждому рынку.
Инженерия функций, внедрение более технических показателей и моделей обучения, таких как SVM, для улучшения точности сигнала.
Включить стратегии выхода на основе характеристик каждого рынка с использованием ценовых каналов, поддержки/сопротивления и т.д. для повышения стабильности.
Оптимизировать механизмы получения прибыли и остановки потерь путем внедрения остановок, движущихся остановок и т. д. для максимизации прибыли и эффективного контроля рисков.
Эта среднесрочная количественная торговая стратегия использует множество технических индикаторов, таких как ADX, RSI и полосы Боллинджера, для определения рыночных условий и размещения сделок при выявлении значительных структурных изменений. Логика ясна и интерпретируема, резко снижая зависимость от одного индикатора. Между тем, риски, такие как ложные сигналы, слишком тесные остановки и перенаправление параметров, необходимо решать путем управления рисками и оптимизации модели для повышения стабильности и эффективности.
/*backtest start: 2023-11-10 00:00:00 end: 2023-12-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("DAX Shooter 5M Strategy", overlay=true) //Creo ADX adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") th = input(title="threshold", type=input.integer, defval=20) dirmov(len) => up = change(high) down = -change(low) plusDM = na(up) ? na : up > down and up > 0 ? up : 0 minusDM = na(down) ? na : down > up and down > 0 ? down : 0 truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, 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] = dirmov(dilen) sig = adx(dilen, adxlen) //Creo RSI src = close len = input(7, minval=1, title="Periodo RSI") up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) bandainf = input(30, title="Livello Ipervenduto") bandasup = input(70, title="Livello Ipercomprato") //Creo Bande di Bollinger source = close length = input(50, minval=1, title="Periodo BB") mult = input(2.0, minval=0.001, maxval=50, title="Dev BB") basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev plot(basis, color=color.white) p1 = plot(upper, color=color.aqua) p2 = plot(lower, color=color.aqua) fill(p1, p2) //Stabilisco regole di ingresso if crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower strategy.entry("COMPRA", strategy.long, limit=upper, oca_name="DaxShooter", comment="COMPRA") else //strategy.exit("exit", "COMPRA", loss = 90) strategy.cancel(id="COMPRA") if crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper strategy.entry("VENDI", strategy.short, limit=lower, oca_name="DaxShooter",comment="VENDI") else //strategy.exit("exit", "VENDI", loss = 90) strategy.cancel(id="VENDI") //Imposto gli alert buy= crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower sell= crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper alertcondition(buy, title='Segnale Acquisto', message='Compra DAX') alertcondition(sell, title='Segnale Vendita', message='Vendi DAX') //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)