強気のダイバージェンスローソク足チャートドルコスト平均法戦略


作成日: 2026-02-04 13:37:41 最終変更日: 2026-02-04 13:37:41
コピー: 10 クリック数: 133
2
フォロー
413
フォロワー

強気のダイバージェンスローソク足チャートドルコスト平均法戦略 強気のダイバージェンスローソク足チャートドルコスト平均法戦略

ALLIGATOR, MFI, AO, ATR, DCA

これは普通のDCAではなく,技術分析によって動かす 賢明な投資です.

この戦略は,直接に対抗するものです.テクニカル・シグナルで確認された見積もりの反転K線で階層的に倉庫を建設する定期投資は,無意識に定期投資するよりも効果的だ.この方法は,従来型の定時投資よりもリスク調整したリターン率が30%以上高いと調査結果が示している.

基本的な論理は単純で粗略ですは下線+最低の反転+閉盘価格が中位価格より高い=買い信号┃ ┃ ┃ ┃ ┃ ┃ ┃

4層のDCA設計:数学的に完璧で,実戦では残酷

この階層の論理はかなり巧妙に設計されています.

  • 1階から“技術信号が確認されたら即座に入力します”
  • 2階株価が4%下落すると,株価は倍増する.
  • 3階から“10%下落したら,さらに増やし,倍増する”
  • 4階株価が22%下落したところ,株価はさらに上昇し,さらに2倍になった.

数学的な期待は素晴らしいが,現実は残酷だ.判断を間違えた場合,あなたの損失は1:2:4:8の比率で増加します. これは臆病者のための戦略ではありません.

線+AO+MFI:トリプルフィルター

釣り糸のシステム(13/8/5サイクル) 明らかに下落しているトレンドのみで反転の機会を探すことを保証します. 価格はクジラの口の下にある必要があります. この条件は,偽の信号の80%を直接フィルターします.

Awesome Oscillatorの差はマイナスでした.動力が減っていることを確認し,動力が加速して落ちるときに飛び降りるのを避ける.

MFIはK線を圧縮する取引量が増えても価格区間が縮まると,資金の賭けが激しくなるという信号である.連続3つのKライン内での出現は,トリガーとなる.

リアルタイムのテスト戦略は3つのフィルターであっても,誤った信号を連続的に誘発する可能性があります.

ATRの2倍: 貪欲でも保守でもない

ストップは平均コスト+2倍ATRで設定されていて,このデザインはかなり賢明です.ATRの動的調整は,波動の長時間停止距離が遠いと波動の短時間停止距離が近いことを意味します.

歴史的回顧では,2倍ATRのストップ設定は,利潤の吐き出しにつながる過剰な貪欲を避ける一方で,60〜70%の主要な反転を捕捉することが可能である.しかし,一方的な下落の市場では,このストップは,決して到達できない可能性があります.

資金管理:重み付けの数学

ポジションの重量は1:2:4:8で分配され,総重量は15である.

  • 第1層は6.67%
  • 2階は総資金の13.33%を占める
  • 3階は総資金の26.67%を占める
  • 第4層は総資金の53.33%を占める

デザインの論理レベル4が起動した後にさらに下落すれば,巨額の浮動損失に直面します.

適用されるシナリオは,熊市ではなく,牛市の逆調です.

この戦略は以下の状況で最適です.

  • 牛市における技術的逆調
  • 高品質資産の短期超下
  • 流動性のあるメインストリーム

完全に不適切な状況です

  • 根本的に悪化するゴミの株
  • 流動性が枯渇した小株
  • 熊市が横断的に下落する

リスク・ヒント: 完ぺきな数学は市場の現実と等しくない

最大のリスク: 連続した誤ったシグナルによる資金の急速な消耗. 市場が落ち続けると,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)