ВВМА-ADX Momentum и Bitcoin Long Strategy на основе тренда

Автор:Чао Чжан, Дата: 2024-04-03 17:47:49
Тэги:VWMAADXДМИSMAЕМАRMAWMAHMAСММА

img

Обзор

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

Принципы стратегии

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

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

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

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

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

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

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

Резюме

ВВМА-ADX Биткойн Долгая стратегия эффективно захватывает восходящие возможности на рынке Биткоина путем всестороннего рассмотрения ценовых тенденций, импульса, объема торговли и других технических индикаторов. В то же время строгие меры контроля риска и четкие условия выхода гарантируют, что риск стратегии хорошо контролируется. Однако стратегия также имеет некоторые ограничения, такие как недостаточная адаптация к изменяющейся рыночной среде и необходимость оптимизированных стратегий стоп-лосса. В будущем могут быть внесены улучшения с точки зрения надежности сигнала, контроля риска и оптимизации параметров для дальнейшего повышения надежности и прибыльности стратегии. В целом, ВВМА-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) 

Связанные

Больше

Казвз888Если бы мы добавили мобильный тормоз, это было бы лучше.