
ALLIGATOR, MFI, AO, ATR, DCA
이 전략은 직접적인 대면이다.기술 신호만 확인된 전망대 반전 K선에서 계층화 창고 건설이 방법은 전통적인 시간적 투자보다 30% 이상 높은 리스크 조정 수익률을 나타냅니다.
핵심 논리는 간단하고 무겁습니다.상어선 아래 + 최저 반전점 + 중위점보다 높은 종점 가격 = 구매 신호모든 K라인들이 당신의 돈을 받을 가치가 있는 것은 아닙니다. 오직 이 세 가지 조건을 만족시키는 K라인만이 당신의 돈을 받을 가치가 있습니다.
이 단계적 논리는 매우 현명하게 설계되었습니다.
수학은 희망이 좋지만 현실은 잔인합니다.만약 당신이 판단을 잘못하면, 당신의 손실은 1:2:4:8의 비율로 커질 것입니다. 이것은 겁쟁이들을 위해 설계된 전략이 아닙니다.
고래줄 시스템(13/8/5 주기) 명확한 하향 추세에서만 역전 기회를 찾는 것을 보장합니다. 가격은 상어 입 아래에 있어야합니다. 이 조건은 80%의 가짜 신호를 직접 필터링합니다.
Awesome Oscillator의 차이는 음수입니다.: 동력이 여전히 약화되고 있는지 확인하고, 동력이 가속되어 떨어질 때 발사 칼을 잡는 것을 피하십시오.
MFI 압축 K선: 거래량이 커지고 가격대가 좁아지는 것은 금융 도박의 격렬한 신호입니다. 연속으로 3개의 K 라인 안에 나타나면 촉발될 수 있습니다.
실체 테스트3번 필터링이 있더라도, 전략은 계속해서 잘못된 신호를 유발할 수 있습니다. 특히나 불안정한 시장에서는 좋지 않습니다.
은 평균 비용 + 2배의 ATR에 설치되어 있는데, 이 디자인은 꽤 똑똑합니다.ATR 동적 조정은 파동 큰 시간 정지 거리가 멀고 파동 시간 정지 거리가 가깝다는 것을 의미합니다.。
2배의 ATR의 정지 세팅은 60~70%의 주요 반동 상황을 포착할 수 있으며, 과도한 탐욕으로 인해 수익이 뒤집히는 것을 방지합니다. 하지만 단방향 하락 시장에서는 이 정지 세팅은 결코 도달할 수 없습니다.
포지션의 무게는 1:2:4:8로 분배되어 총 무게는 15 이다. 이것은 다음과 같은 것을 의미한다:
이 디자인의 논리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)