На основе стратегии индекса двустороннего движения


Дата создания: 2024-02-18 10:00:22 Последнее изменение: 2024-02-18 10:00:22
Копировать: 0 Количество просмотров: 620
1
Подписаться
1617
Подписчики

На основе стратегии индекса двустороннего движения

Обзор

Эта стратегия создает торговый сигнал, рассчитывая двусторонний индекс движения DI+ , DI- и средний индекс направления ADX, в сочетании с индексом движущейся средней EMA. Покупайте, когда DI+ превышает DI- и ADX превышает 20, продавайте, когда DI+ превышает DI- и ADX превышает 25.

Стратегический принцип

  1. Вычислить DI+, DI- и ADX

    • Функция ta.dmi () вычисляет DI+, DI- и ADX
    • DI+/DI- отражает направленность цены
    • ADX отражает среднюю величину изменения цен
  2. Вычислить скользящий средний показатель EMA

    • Вычислить EMA с помощью функции my_ema ().
    • EMA может эффективно сгладить цены
  3. Создание торгового сигнала

    • Сигнал покупки: DI+ на DI- и ADX> 20 и цена закрытия> EMA
      • Описание тенденции к росту цен и больших колебаний
    • Продающий сигнал: DI-под DI+ и ADX>25 и закрытие
    • Описание тенденции к снижению цен и больших колебаний
  4. Остановка сделок

    • Покупать стоп-лост: DI+ на DI- и ADX>30
      • Обратная тенденция цен
    • Продажа с убытком: DI+ под DI- и ADX> 30
      • Обратная тенденция цен

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

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

  1. Используйте двойной DI, чтобы избежать ложных сигналов
    • Одиночный DI легко приводит к ошибочным сигналам, в сочетании с DI+ и DI- обеспечивается тенденционность
  2. Условия ADX гарантируют большие колебания цен
    • Торгуйте только в условиях повышенных колебаний цен, чтобы избежать рыночных потрясений.
  3. Условия EMA совместимы с DI
    • EMA может эффективно идентифицировать длинные тренды цен
  4. Строгие условия остановки
    • Своевременная ликвидация и предотвращение крупных потерь

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

  1. Частые остановки
    • Если в стране произойдут сильные землетрясения, то они будут слишком частыми.
  2. Параметры зависимости
    • Параметры DI и ADX нуждаются в оптимизации, чтобы найти оптимальную комбинацию
  3. Низкая частота торгов
    • Более жесткие условия торговли снижают частоту торгов

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

Направление оптимизации

  1. Параметры оптимизации
    • Оптимизация DI и ADX параметров, чтобы найти оптимальную комбинацию параметров
  2. Добавить фильтр
    • Фильтрация сигналов, например, при добавлении объема сделок, отклонении от них.
  3. Расширяйте стоп-лосс
    • Соответствующая смягчение условий погашения, снижение частоты погашения

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tamil_FNO_Trader

//@version=5
strategy("Overlay Signals by TFOT", overlay=true)

// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)

// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")

my_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)

// Variables
var bool buycondition1 = false
var bool sellcondition1 = false

var int firstbuybar = na
var int firstsellbar = na

var int buyexitbar = na
var int sellexitbar = na

var bool buyexit1 = false
var bool sellexit1 = false

// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)

buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)

if buycondition1
    if(na(firstbuybar))
        firstbuybar := bar_index
        buyexitbar := na
        firstsellbar := na
        strategy.entry("Buy", strategy.long)

if sellcondition1
    if(na(firstsellbar))
        firstsellbar := bar_index
        sellexitbar := na
        firstbuybar := na
        strategy.entry("Sell", strategy.short)

if buyexit1 and not na(firstbuybar)
    if(na(buyexitbar))
        buyexitbar := bar_index
        firstbuybar := na
        firstsellbar := na
        strategy.close("Buy")

if sellexit1 and not na(firstsellbar)
    if(na(sellexitbar))
        sellexitbar := bar_index
        firstsellbar := na
        firstbuybar := na
        strategy.close("Sell")

// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")

plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)

plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)