Stratégie de moyenne des coûts en dollars basée sur un graphique en chandeliers à divergence haussière


Date de création: 2026-02-04 13:37:41 Dernière modification: 2026-02-04 13:37:41
Copier: 10 Nombre de clics: 133
2
Suivre
413
Abonnés

Stratégie de moyenne des coûts en dollars basée sur un graphique en chandeliers à divergence haussière Stratégie de moyenne des coûts en dollars basée sur un graphique en chandeliers à divergence haussière

ALLIGATOR, MFI, AO, ATR, DCA

Ce n’est pas un DCA ordinaire, c’est un placement intelligent basé sur l’analyse technique.

La stratégie traditionnelle de l’investisseur en bourse consiste à acheter à l’aveugle et à l’heure.La mise en place d’une couche de stockage sur la ligne K est inversée par les observateurs uniquement lorsque le signal technique est confirmé.Les données de revue montrent que cette méthode offre un rendement plus de 30% plus élevé après ajustement des risques que l’investissement traditionnel à temps fixe.

La logique de base est simple et brutale:Les requins en dessous de la ligne + point de basse inversion + prix de clôture supérieur au prix moyen = signal d’achat◦ Tous les K-lines ne sont pas dignes de votre argent, seulement ceux qui répondent à ces trois conditions méritent votre argent.

Conception de DCA à 4 niveaux: mathématiquement parfait, mais brutal en temps de guerre

La logique de la hiérarchisation est assez astucieuse:

  • 1er étageLe signal technique est immédiatement entré.
  • Deuxième étageLa baisse de 4% a entraîné une hausse de la position, qui a doublé.
  • Troisième étageLe taux d’inflation a été de 2,5% en janvier, et il est en baisse de 2,5% depuis.
  • Quatrième étageLes investisseurs ont continué à doubler leurs positions après une chute de 22%.

Les mathématiques sont merveilleuses, mais la réalité est cruelleSi vous vous trompez de jugement, vos pertes seront multipliées par le ratio 1:2:4:8. Ce n’est pas une stratégie conçue pour les lâches.

Ligne de pêche + AO + MFI: mécanisme de triple filtration

Système de filets de pêche(13/8/5 cycle) Assurez-vous de ne chercher des occasions de reprise que dans une tendance clairement à la baisse. Le prix doit être en dessous de la gueule du requin, une condition qui filtre directement 80% des faux signaux.

Le décalage de Awesome Oscillator est négatif.: Assurez-vous que le moteur est toujours en train de s’affaiblir et évitez de prendre le volant lorsque le moteur s’accélère.

Ligne K de l’extrusion MFILe volume de transactions augmente mais la fourchette de prix se rétrécit, ce qui est un signal d’un jeu de trésorerie intense.

Test de réalitéLe risque est qu’une stratégie de tri des filtres continue à déclencher des signaux erronés.

Le double ATR: ni avide ni conservateur

La suspension est réglée sur un coût moyen + 2 fois l’ATR, ce qui est une conception assez intelligente.L’ajustement dynamique ATR signifie que le grand temps d’arrêt est éloigné et le grand temps d’arrêt est proche.

Les retours d’expérience ont montré que le seuil de 2 fois l’ATR permettait de capturer 60 à 70% des principales tendances de rebond, tout en évitant les retours de profit induits par l’excès de cupidité. Cependant, dans un marché à baisse unilatérale, ce seuil pourrait ne jamais être atteint.

Gestion de fonds: l’art mathématique de la répartition des poids

Le poids de position est réparti selon 1:2:4:8, pour un poids total de 15.

  • La première couche représente 6,67% du capital total.
  • La deuxième couche représente 13,33% du capital total.
  • Le tiers représente 26,67% du capital total.
  • Le quatrième niveau représente 53,33% du capital total.

La logique de cette conceptionSi vous ne pouvez pas le faire, vous pouvez vous lancer dans une bataille. Si vous ne pouvez pas vous lancer dans une bataille, vous ne pouvez pas vous lancer dans une bataille.

Scenario approprié: Retour sur le marché haussier, pas sur le marché baissier

Cette stratégie fonctionne mieux dans les cas suivants:

  • Un retour en arrière technologique dans le marché haussier
  • Déclin à court terme des actifs de qualité
  • La plupart des banques centrales ont une liquidité suffisante.

C’est un scénario totalement inapproprié.

  • Les stocks de déchets se détériorent
  • Des actions de petite taille dépourvues de liquidité
  • La baisse continue du marché baissier unilatéral

Astuce: la perfection mathématique n’est pas synonyme de réalité du marché

Le risque le plus élevéSi les marchés continuent à baisser sans rebond après le déclenchement de l’ensemble des 4 niveaux de DCA, vous serez confronté à plus de 30% de retraits de compte.

Le passé n’est pas le futur.Cette stratégie a mal tourné lors de la bourse baissière de la crypto-monnaie en 2022, déclenchant une série de signaux, mais la baisse des prix s’est poursuivie.

Une gestion rigoureuse des risques est nécessaireLe placement maximal d’une stratégie unique ne doit pas dépasser 20% du capital total et un stop loss maximal de retrait doit être défini au niveau du compte.

en conclusionC’est une stratégie mathématiquement astucieuse et logiquement raisonnable, mais qui doit être utilisée dans le bon environnement de marché.

Code source de la stratégie
//@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)