Длинная стратегия VWMA-ADX Bitcoin, основанная на импульсе и тренде

VWMA ADX DMI SMA EMA RMA WMA HMA SMMA
Дата создания: 2024-04-03 17:47:49 Последнее изменение: 2024-04-03 17:47:49
Копировать: 8 Количество просмотров: 951
1
Подписаться
1617
Подписчики

Длинная стратегия VWMA-ADX Bitcoin, основанная на импульсе и тренде

Обзор

Эта стратегия использует несколько движущихся средних (VWMA), средне-направленный индекс (ADX) и динамический индикатор (DMI) для захвата многообещающих возможностей в биткоин-рынке. С помощью комбинации нескольких технических показателей, таких как динамика цены, направление тенденции и объем торгов, эта стратегия направлена на то, чтобы найти входные точки с сильной и достаточной динамикой вверх, при этом строго контролировать риск.

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

  1. Используйте VWMA на 9 и 14 день для определения многородной тенденции, когда кратковременная средняя линия пересекает долгосрочную среднюю линию.
  2. Введение адаптивной средней линии, построенной из 89-дневных максимумов и минимумов VWMA, в качестве фильтра на тенденции, и только тогда, когда цена закрытия или цена открытия считается выше этой средней линии.
  3. Тенденция считается достаточно сильной только тогда, когда ADX больше 18, а разница между +DI и -DI больше 15.
  4. Используйте процентную функцию объема сделок, чтобы отфильтровать количество сделок в пределах от 60% до 95%, избегая периодов с низким объемом сделок.
  5. Стоп-лост устанавливается в 0,96 - 0,99 раза выше предыдущей высоты K-линии и уменьшается с увеличением временных рамок для контроля риска.
  6. При достижении заданного времени удержания позиции или при падении цены ниже адаптивной средней линии.

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

  1. В сочетании с несколькими техническими показателями, чтобы оценить состояние рынка в нескольких измерениях, таких как тенденции, динамика и объем торгов, сигнал более надежен.
  2. Устройства фильтрации с помощью адаптивных средних линий и количества сделок позволяют эффективно отфильтровывать ложные сигналы и уменьшать количество недействительных сделок.
  3. Строгие ограничения на время хранения позиций и установка стоп-лосс значительно снижают риск входа в стратегию.
  4. Модульный дизайн кода, лучшая читабельность и поддерживаемость, способствуют дальнейшей оптимизации и расширению.

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

  1. Эта стратегия может создавать больше ложных сигналов, когда рынок находится в состоянии колебаний или когда тенденция неясна.
  2. Стоп-потери относительно близки, и при больших колебаниях рынка могут быть преждевременно вызваны стоп-потери, что приводит к увеличению потерь.
  3. Отсутствие учета макроэкономической ситуации и крупных событий может оказаться неэффективным перед лицом “Черных свинцов”.
  4. Параметры настроены относительно фиксированно, отсутствует адаптивность и может быть нестабильной в различных рыночных условиях.

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

  1. Введение большего количества индикаторов, которые могут изобразить рыночную обстановку, таких как относительно сильный индекс (RSI) и бринговые полосы, повышает надежность сигналов.
  2. Динамическая оптимизация стоп-позиции, например, использование ATR или стопроцентного стоп-позиции для реагирования на различные рыночные колебания.
  3. Вместе с макроэкономическими данными и аналитикой настроений, в стратегию внедряется модуль управления рисками.
  4. Применение алгоритмов машинного обучения для автоматической оптимизации параметров, повышения адаптивности и стабильности стратегии.

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

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

Исходный код стратегии
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
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/
// © Q_D_Nam_N_96

//@version=5
strategy("Long BTC Strategy", overlay=true, 
     default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 100, initial_capital = 1000, currency = currency.USD)

Volume_Quartile(vol) =>
    qvol1 = ta.percentile_linear_interpolation(vol, 60,15)
    qvol2 = ta.percentile_linear_interpolation(vol, 60,95)
    vol > qvol1 and vol < qvol2

smma(src, length) =>
	smma =  0.0
	smma := na(smma[1]) ? ta.sma(src, length) : (smma[1] * (length - 1) + src) / length
	smma

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "RMA" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)
        "HMA" => ta.hma(source, length)
        "SMMA" => smma(source, length)

DMI(len, lensig) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    trur = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / trur)+11
    minus = fixnan(100 * ta.rma(minusDM, len) / trur)-11
    sum = plus + minus
    adx = 100 * ta.vwma(math.abs(plus - minus-11) / (sum == 0 ? 1 : sum), lensig)

    [adx, plus, minus]

cond1 = Volume_Quartile(volume*hlcc4)

ma1 = ma(close,9, "VWMA")
// plot(ma1, color = color.blue)
ma2 = ma(close,14, "VWMA")
// plot(ma2, color = color.orange)

n = switch timeframe.period
    "240" => 0.997
    => 0.995

ma3 = (0.1*ma(ta.highest(close,89),89, "VWMA") + 
     0.9*ma(ta.lowest(close,89),89, "VWMA"))*n

plot(ma3, color = color.white)

[adx, plus, minus] = DMI(7, 10)


cond2 = adx > 18 and plus - math.abs(minus) > 15

var int count = 0

if barstate.isconfirmed and strategy.position_size != 0
    count += 1
else
    count := 0

p_roc = 0
if timeframe.period == '240'
    p_roc := 14
else
    p_roc := 10

longCondition = ta.crossover(ma1, ma2) and (close > open ? close > ma3 : open > ma3) and ((ma3 - ma3[1])*100/ma3[1] >= -0.2) and ((close-close[p_roc])*100/close[p_roc] > -2.0)
float alpha = 0.0
float sl_src = high[1]
if (longCondition and cond1 and cond2 and strategy.position_size == 0)
    strategy.entry("buy", strategy.long)
    if timeframe.period == '240'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+5, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '30'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '45'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '60'
        alpha := 0.98
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '120'
        alpha := 0.97
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '180'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == 'D'
        alpha := 0.95
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else 
        alpha := 0.93
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)

period = switch timeframe.period
    "240" => 90
    "180" => 59
    "120" => 35
    "30" => 64
    "45" => 40
    "60" => 66
    "D" => 22
    => 64

if (count > period or close < ma3)
    strategy.close('buy', immediately = true)