стратегия усреднения долларовой стоимости на графике свечей бычьей дивергенции


Дата создания: 2026-02-04 13:37:41 Последнее изменение: 2026-02-04 13:37:41
Копировать: 10 Количество просмотров: 133
2
Подписаться
413
Подписчики

стратегия усреднения долларовой стоимости на графике свечей бычьей дивергенции стратегия усреднения долларовой стоимости на графике свечей бычьей дивергенции

ALLIGATOR, MFI, AO, ATR, DCA

Это не обычная DCA, это интеллектуальные инвестиции, основанные на техническом анализе.

Традиционная стратегия инвестирования - слепо покупать по времени.Постепенное строительство складов на K-линии только при подтверждении технического сигналаПо данным ретроспективных исследований, этот метод дает более чем на 30% более высокую прибыль после корректировки риска, чем традиционные инвестиции с фиксированным временем.

Основная логика проста:Рак ниже линии + минимальная точка разворота + цена закрытия выше средней цены = сигнал покупкиНе каждая K-линия стоит ваших денег, только K-линия, которая соответствует этим трем условиям, заслуживает ваших денег.

4-слойный дизайн DCA: математически совершенный, жестокий в реальном бою

Это логика, которая была разработана очень хитро:

  • Первый этажПримечание: При подтверждении технического сигнала, сразу же вводятся.
  • Второй этаж“Все, что мы делаем, - это выставляем на продажу.
  • Третий этаж“Если мы упадем на 10%, мы будем увеличивать позиции и удваивать их”.
  • Четвертый этажВ конце концов, они удвоили свои позиции, когда упали на 22%.

Математические ожидания прекрасны, но реальность жестока.Если вы ошибаетесь, ваши потери увеличиваются в пропорции 1:2:4:8. Это не тактика для трусов.

Рыбацкий провод + AO + MFI: тройная фильтрация

Система промысла(13/8/5 циклов) Убедитесь, что вы ищете возможность поворота только при четко выраженной нисходящей тенденции. Цены должны быть ниже устья акулы, что напрямую отфильтровывает 80% ложных сигналов.

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

MFI выдавливает K-линииНапример, в случае, если в течение одного месяца у вас будет более высокий объем сделок, но меньшая цена, это может быть сигналом о том, что вы играете в активные деньги.

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

Двойной ATR: ни жадный, ни консервативный

Это довольно умная конструкция, поскольку тормоза установлены в средней стоимости +2 ATR.Динамическая настройка ATR означает, что колебания в больших часах остановки находятся далеко, а в колебаниях в часах остановки находятся близко

Исторические отсчёты показывают, что параметры остановки в 2 раза выше ATR позволяют уловить 60-70% от основных рывок, избегая при этом излишней жадности, которая приводит к отбросу прибыли. Однако в одностороннем падении рынок может никогда не достичь этого параметра.

Управление деньгами: математическое искусство распределения весов

Позиционные веса распределены по шкале 1:2:4:8 и имеют общий вес 15. Это означает:

  • Первый уровень составляет 6,67% от общего капитала
  • Второй уровень составляет 13,33% от общего капитала
  • Третий уровень составляет 26,67% от общего капитала
  • Четвертый уровень составляет 53,33% от общего капитала

Логика такого дизайнаЕсли вы будете продолжать падать после того, как будет задействован 4-й уровень, вы столкнетесь с огромными провалами.

Сценарий применения: бычий рынок, а не медвежий

Эта стратегия работает лучше всего в следующих случаях:

  • Технический откат на бычьем рынке
  • Высококачественные активы в краткосрочной перспективе
  • Достаточно ликвидный для основных валют

Сценарий не подходит.

  • Ухудшается основное состояние мусора
  • Маленькие акции с истощённой ликвидностью
  • Продолжение падения одностороннего медвежьего рынка

Примечание: математическое совершенствование не равнозначно рыночной реальности

Наибольший рискЕсли рынок будет продолжать падать, а после того, как все четыре уровня DCA будут задействованы, не будет никакого отскока, вы столкнетесь с более чем 30% отзывов счета.

Исторические отзывы не означают будущих доходовЭта стратегия плохо сработала в криптовалютном медвежьем рынке в 2022 году, последовательно запуская сигналы, но цены продолжают падать.

Строгое управление рисками необходимоМаксимальный вклад в единую стратегию не должен превышать 20% от общего объема средств, и необходимо установить максимальный сброс убытков на уровне счета.

в заключениеЭто математически хитрая, логически обоснованная стратегия, но она должна использоваться в правильных рыночных условиях.

Исходный код стратегии
//@version=6
strategy(title = "Bullish Divergent Bar DCA Strategy [Skyrexio]", 
         shorttitle = "BDB DCA", 
         overlay = true, 
         pyramiding = 4,
         default_qty_type = strategy.percent_of_equity,
         default_qty_value = 10,
         initial_capital = 10000,
         currency = currency.USD)

//_______ <constant_declarations>
var const color skyrexGreen = color.new(#2ECD99, 0)

//________<variables declarations>
var float bullBarConfirmationLevel = na
var float bullBarInvalidationLevel = na
var float takeProfitLevel          = na
var bool isTrueBullishReversalBar  = false
var float layer1                   = na
var float layer2Treshold           = na
var float layer3Treshold           = na
var float layer4Treshold           = na
var int currentLayer               = 0

//_______ <inputs>
showDcaLevels                = input.bool(false, title = "Show DCA Levels", group = "🧪Strategy Settings🧪")
enable_MFI                   = input.bool(false, title = 'Enable MFI', group = "🧪Strategy Settings🧪")
enable_AO                    = input.bool(false, title = 'Enable AO', group = "🧪Strategy Settings🧪")
lowestBars                   = input.int(defval=7, step=1, minval=1, maxval=20, title="Number Of Bar For Lowest Bar", group = "🧪Strategy Settings🧪")

layer2TresholdPercent        = input.float(defval=4.0, step=0.5, maxval=100.0, minval=0.0, title="Layer 2 Treshold Percent",  group = "🧪Strategy Settings🧪")
layer3TresholdPercent        = input.float(defval=10.0, step=0.5, maxval=100.0, minval=0.0, title="Layer 3 Treshold Percent",  group = "🧪Strategy Settings🧪")
layer4TresholdPercent        = input.float(defval=22.0, step=0.5, maxval=100.0, minval=0.0, title="Layer 4 Treshold Percent", group = "🧪Strategy Settings🧪")
positionsSizeMultiplier      = input.float(defval=2.0, step=0.5, minval=1.0, maxval=4.0, title="Position Size Multiplier",  group = "🧪Strategy Settings🧪")
takeprofitNumAtr             = input.float(defval=2.0, step=0.5, minval=0.5, maxval=10.0, title="Number Of ATR For Take Profit",  group = "🧪Strategy Settings🧪")

isLowestBar = ta.lowest(lowestBars) == low

//_______ <function_declarations>
smma(src, length) =>
    var float smma = na
    sma_value = ta.sma(src, length)
    smma := na(smma) ? sma_value : (smma * (length - 1) + src) / length
    smma

isBullishReversalBar() =>
    close > hl2 and isLowestBar

getLayerEquityQty(mult, layer, price) =>
    float sumW = 1.0 + mult + math.pow(mult, 2) + math.pow(mult, 3)
    float wCur = math.pow(mult, layer)
    float pct  = wCur / sumW                     
    float cap  = strategy.equity * pct           
    float qty  = cap / price
    math.max(qty, 0.001)  // 确保最小数量

//_______ <calculations>
atr = ta.atr(14)

//Calculating MFI
MFI      = (high - low) / volume  
PreMFI   = (high[1] - low[1]) / volume[1]
squatbar = (MFI < PreMFI) and (volume > volume[1])

//Calculating Awesome Oscillator
ao   = ta.sma(hl2, 5) - ta.sma(hl2, 34)
diff = ao - ao[1]

//Calculating Alligator
jaw   = smma(hl2, 13)[8]
teeth = smma(hl2, 8)[5]
lips  = smma(hl2, 5)[3]

// 重置信号状态
isTrueBullishReversalBar := false

//Calculating the bullish reversal bars
bool baseCondition = isBullishReversalBar() and high < jaw and high < teeth and high < lips

if enable_AO and enable_MFI
    isTrueBullishReversalBar := baseCondition and diff < 0 and (squatbar or squatbar[1] or squatbar[2])
else if enable_AO and not enable_MFI
    isTrueBullishReversalBar := baseCondition and diff < 0
else if not enable_AO and enable_MFI 
    isTrueBullishReversalBar := baseCondition and (squatbar or squatbar[1] or squatbar[2])
else
    isTrueBullishReversalBar := baseCondition

// 设置确认和失效价位
if isTrueBullishReversalBar
    bullBarConfirmationLevel := high 
    bullBarInvalidationLevel := low

// 检查失效
isBullBarInvalidated = ta.crossunder(low, bullBarInvalidationLevel)

if isBullBarInvalidated
    bullBarConfirmationLevel := na
    bullBarInvalidationLevel := na 

// Defining current DCA layer
if strategy.opentrades == 1 and strategy.opentrades[1] == 0
    layer1 := strategy.position_avg_price
    currentLayer := 1

if strategy.opentrades == 2 and strategy.opentrades[1] == 1
    currentLayer := 2

if strategy.opentrades == 3 and strategy.opentrades[1] == 2
    currentLayer := 3

if strategy.opentrades == 4 and strategy.opentrades[1] == 3
    currentLayer := 4

if strategy.opentrades == 0
    currentLayer := 0
    layer1 := na

// Tresholds price from layer1
layer2Treshold := na(layer1) ? na : layer1 * (100 - layer2TresholdPercent) / 100
layer3Treshold := na(layer1) ? na : layer1 * (100 - layer3TresholdPercent) / 100
layer4Treshold := na(layer1) ? na : layer1 * (100 - layer4TresholdPercent) / 100

//Calculating take profit level 
takeProfitLevel := strategy.opentrades > 0 ? strategy.position_avg_price + atr * takeprofitNumAtr : na

// ------- 入场逻辑 -------
// Layer 1 入场
if currentLayer == 0 and isTrueBullishReversalBar and not na(bullBarConfirmationLevel)
    float qty1 = getLayerEquityQty(positionsSizeMultiplier, 0, bullBarConfirmationLevel)
    strategy.entry(id = 'entry1', direction = strategy.long, stop = bullBarConfirmationLevel, qty = qty1)

// Layer 2 入场
if currentLayer == 1 and not na(layer2Treshold) and low < layer2Treshold and isTrueBullishReversalBar and not na(bullBarConfirmationLevel)
    float qty2 = getLayerEquityQty(positionsSizeMultiplier, 1, bullBarConfirmationLevel)
    strategy.entry(id = 'entry2', direction = strategy.long, stop = bullBarConfirmationLevel, qty = qty2)

// Layer 3 入场
if currentLayer == 2 and not na(layer3Treshold) and low < layer3Treshold and isTrueBullishReversalBar and not na(bullBarConfirmationLevel)
    float qty3 = getLayerEquityQty(positionsSizeMultiplier, 2, bullBarConfirmationLevel)
    strategy.entry(id = 'entry3', direction = strategy.long, stop = bullBarConfirmationLevel, qty = qty3)

// Layer 4 入场
if currentLayer == 3 and not na(layer4Treshold) and low < layer4Treshold and isTrueBullishReversalBar and not na(bullBarConfirmationLevel)
    float qty4 = getLayerEquityQty(positionsSizeMultiplier, 3, bullBarConfirmationLevel)
    strategy.entry(id = 'entry4', direction = strategy.long, stop = bullBarConfirmationLevel, qty = qty4)

// ------- 出场逻辑 -------
if strategy.opentrades > 0 and not na(takeProfitLevel)
    strategy.exit(id = 'exit1', from_entry = 'entry1', limit = takeProfitLevel)
    strategy.exit(id = 'exit2', from_entry = 'entry2', limit = takeProfitLevel)
    strategy.exit(id = 'exit3', from_entry = 'entry3', limit = takeProfitLevel)
    strategy.exit(id = 'exit4', from_entry = 'entry4', limit = takeProfitLevel)

// ------- 绘图 -------
plot(takeProfitLevel, color=skyrexGreen, style=plot.style_linebr, linewidth=2, title="Take Profit")
plot(showDcaLevels ? layer1 : na, color=color.orange, title="Layer 1")
plot(showDcaLevels ? layer2Treshold : na, color=color.orange, title="Layer 2")
plot(showDcaLevels ? layer3Treshold : na, color=color.orange, title="Layer 3")
plot(showDcaLevels ? layer4Treshold : na, color=color.orange, title="Layer 4")

// 调试标签(可删除)
plotshape(isTrueBullishReversalBar, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)