免責聲明:以下內容純屬娛樂 + 教學用途!這不是金融建議,也不是代碼(AI 或其他)建議。僅用於演示目的!

SMA 雲的提示

扮演一名資深 TradingView Pine Script v5 開發者。

創建一個名爲:的疊加指標

“技術指標編程 4.0 — SMA 雲設置”

目的

構建一個不重繪的、多時間框架指標,用於提供趨勢背景並對潛在信號進行篩選/確認。不得執行交易,也不得提供金融建議。

框架

該指標使用三個分析層:

1. 8小時結構

   - 在 8 小時週期上確定更廣泛的市場結構。

   - 將其歸類爲看漲、看跌或中性。

   - 在一個小型儀表板中顯示當前分類。

2. 1小時 SMA 雲層

   - 在1小時週期上計算一個快速和一個慢速簡單移動平均線。

   - 讓兩個 SMA 長度都可配置。

   - 默認值:[插入快速 SMA] 和 [插入慢速 SMA]。

   - 在均線之間填充區域:

     • 當快速 SMA 高於慢速 SMA 時爲綠色。

     • 當快速 SMA 低於慢速 SMA 時爲紅色。

     • 當關系不明確時使用中性灰色。

   - 1小時雲層是主要的趨勢方向過濾器。

3. 15分鐘觸發與 IMACD 確認

   - 在15分鐘週期上計算入場觸發。

   - 僅在 IMACD 動量爲正時確認看漲觸發。

   - 僅在 IMACD 動量爲負時確認看跌觸發。

   - 使用以下 IMACD 規範:[插入準確的 IMACD 公式和設置]。

   - 爲已確認的看漲觸發繪製綠色向上三角形。

   - 爲已確認的看跌觸發繪製紅色向下三角形。

信號層級

看漲資格要求:

- 可接受的看漲或中性 8 小時結構。

- 看漲 1 小時 SMA 雲層。

- 看漲 15 分鐘觸發。

- 正向 IMACD 確認。

看跌資格要求是完全相反的條件。

技術要求

- 使用 request.security() 並設置 barmerge.lookahead_off。

- 僅在已確認收盤蠟燭上評估信號。

- 不要重繪歷史信號。

- 不要使用未來數據。

- 允許通過輸入更改三個時間框架和所有計算長度。

- 包含用於顯示或隱藏雲層、結構標籤、觸發標記和儀表板的開關。

- 爲已確認的看漲和看跌資格添加 alertcondition() 規則。

- 保持圖表視覺簡潔。

- 不要包含自動訂單、表現聲明、盈虧或投資建議。

- 清晰註釋代碼,並解釋每個時間框架如何貢獻結果。

在編寫代碼之前,請先識別任何缺失的計算規則或參數。不要發明專有設置。請先向我詢問缺失的值。

收到這些值後,請提供:

1. 完整的 Pine Script v5 代碼。

2. 簡潔說明邏輯。

3. 用於測試指標不重繪的檢查清單。

代碼(複製與粘貼)

//@version=6

indicator("John Wick v 4.0", overlay=true)

//==================================================

// MACD 輸入

//==================================================

fastLength   = input.int(12, "MACD 快速長度")

slowLength   = input.int(26, "MACD 慢速長度")

signalLength = input.int(9, "MACD 信號長度")

atrLength = input.int(14, "ATR 長度")

showExits   = input.bool(true)

showCrosses = input.bool(true)

minProfitATR = input.float(0.30)

//==================================================

// MACD 核心

//==================================================

fastMA   = ta.ema(close, fastLength)

slowMA   = ta.ema(close, slowLength)

macdLine   = fastMA - slowMA

signalLine = ta.ema(macdLine, signalLength)

hist = macdLine - signalLine

//==================================================

// 交叉事件

//==================================================

bullCross = ta.crossover(macdLine, signalLine)

bearCross = ta.crossunder(macdLine, signalLine)

//==================================================

// 標記間距

//==================================================

atrValue = ta.atr(atrLength)

dotOffset = atrValue * 0.28

triOffset = atrValue * 0.70

longExitY  = high + dotOffset

shortExitY = low  - dotOffset

triBullY = low  - triOffset

triBearY = high + triOffset

//==================================================

// 交易狀態引擎

//==================================================

var int   activeDir    = 0

var float entryPrice   = na

var float bestHist     = na

var bool  partialTaken = false

if bullCross

   activeDir    := 1

   entryPrice   := close

   bestHist     := hist

   partialTaken := false

if bearCross

   activeDir    := -1

 entryPrice   := close

   bestHist     := hist

   partialTaken := false

if activeDir == 1

   bestHist := na(bestHist) ? hist : math.max(bestHist, hist)

if activeDir == -1

   bestHist := na(bestHist) ? hist : math.min(bestHist, hist)

//==================================================

// 平倉邏輯

//==================================================

longInProfit =

    activeDir == 1

and not na(entryPrice)

and high >= entryPrice + atrValue * minProfitATR

shortInProfit =

    activeDir == -1

and not na(entryPrice)

and low <= entryPrice - atrValue * minProfitATR

多頭動量衰減 =

    activeDir == 1

and bestHist > 0

and hist < hist[1]

shortMomentumFade =

    activeDir == -1

and bestHist < 0

and hist > hist[1]

yellowLongExit =

    showExits

and activeDir == 1

and not partialTaken

and longInProfit

and longMomentumFade

yellowShortExit =

    showExits

and activeDir == -1

and not partialTaken

and shortInProfit

and shortMomentumFade

if yellowLongExit or yellowShortExit

   partialTaken := true

redLongExit =

    showExits

and activeDir == 1

and partialTaken

and bearCross

redShortExit =

    showExits

and activeDir == -1

and partialTaken

and bullCross

if redLongExit or redShortExit

   activeDir    := 0

   entryPrice   := na

   bestHist     := na

   partialTaken := false

//==================================================

// EMA 堆疊(5 層雲)

//==================================================

ema5  = ta.ema(close, 5)

ema9  = ta.ema(close, 9)

ema12 = ta.ema(close, 12)

ema26 = ta.ema(close, 26)

ema50 = ta.ema(close, 50)

//==================================================

// 繪製 EMA(細線 / 低飽和)

//==================================================

p5  = plot(ema5,  color=color.new(color.aqua, 20),  linewidth=1)

p9  = plot(ema9,  color=color.new(color.blue, 20),  linewidth=1)

p12 = plot(ema12, color=color.new(color.gray, 20),  linewidth=1)

p26 = plot(ema26, color=color.new(color.orange,20), linewidth=1)

p50 = plot(ema50, color=color.new(color.red, 20),   linewidth=1)

//==================================================

// 雲層

//==================================================

// 5–9 快速反應

fill(p5, p9, color=color.new(color.aqua, 80))

// 9–12 動量

fill(p9, p12, color=color.new(color.blue, 82))

// 12–26 結構

fill(p12, p26, color=color.new(color.gray, 84))

// 26–50 趨勢

fill(p26, p50, color=color.new(color.orange, 86))

//==================================================

// 平倉圓點

//==================================================

plotshape(

    yellowLongExit ? longExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.new(color.yellow, 20),

    size=size.tiny

)

plotshape(

    yellowShortExit ? shortExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.new(color.yellow, 20),

    size=size.tiny

)

plotshape(

    redLongExit ? longExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.red,

    size=size.tiny

)

plotshape(

    redShortExit ? shortExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.red,

    size=size.tiny

)

//==================================================

// 入場三角形

//==================================================

plotshape(

    showCrosses and bullCross ? triBullY : na,

    style=shape.triangleup,

    location=location.absolute,

    color=color.lime,

    size=size.small

)

plotshape(

    showCrosses and bearCross ? triBearY : na,

    style=shape.triangledown,

    location=location.absolute,

    color=color.red,

    size=size.small

)

ATR 提示與代碼

提示

扮演一名資深 TradingView Pine Script v5 開發者。

創建一個名爲以下內容的疊加指標:

“技術指標編碼 5.2 — 平均真實波幅”

目的

構建一個使用遞增式 ATR 跟蹤水平的、可適應波動性的趨勢方向指標。該指標用於教育分析,不得執行交易或做出表現聲明。

核心設置

- ATR 週期:10

- ATR 乘數:1.9

- 計算來源:收盤價

- 使 ATR 週期、乘數和來源可配置。

計算

1. 計算10個週期的平均真實波幅。

2. 計算跟蹤距離:

   trailingDistance = 1.9 × ATR(10)

3. 創建一個會隨價格遞增上移的遞歸跟蹤水平:

   - 只要價格保持在前一個跟蹤水平之上,該水平可以上移但絕不下移。

   - 只要價格保持在前一個跟蹤水平下方,該水平可以下移但絕不上漲。

   - 當價格突破跟蹤水平時,改變編碼方向。

方向邏輯

- 當收盤價上穿跟蹤水平時,將方向改爲看漲。

- 當收盤價跌破跟蹤水平時,將方向改爲看跌。

- 僅在方向變化時生成信號。

- 不要在每根蠟燭上生成重複信號。

視覺輸出

- 繪製 ATR 跟蹤水平。

- 當編碼方向爲看漲時使用綠色。

- 當編碼方向爲看跌時使用紅色。

- 在看漲方向變化時繪製一個綠色向上三角形。

- 在看跌方向變化時繪製一個紅色向下三角形。

- 可選地根據當前方向爲蠟燭上色。

EMA 雲層

- 添加一個12週期和26週期的指數移動平均線雲。

- 當 EMA 12 高於 EMA 26 時,將雲層填充爲綠色。

- 當 EMA 12 低於 EMA 26 時,將其填充爲紅色。

- 將 EMA 雲層視爲動量背景;它不得改變 ATR 方向變化計算。

- 添加一個用於隱藏 EMA 雲層的輸入。

技術要求

- 使用已確認的收盤價。

- 不要重繪。

- 不要使用未來信息或前瞻。

- 通過遞歸變量邏輯保留跟蹤水平。

- 爲看漲和看跌方向變化添加 alertcondition() 規則。

- 包含標記、蠟燭顏色、跟蹤水平和 EMA 雲層的開關。

- 不要創建策略訂單、結果表、盈虧計算或財務建議。

- 清晰組織並註釋代碼。

提供:

1. 完整的 Pine Script v5 代碼。

2. ATR 和遞增式上移機制的通俗解釋。

3. 生成每個標記的條件說明。

4. 一個簡短的不重繪驗證檢查清單。


代碼

//@version=6

indicator("JW V5.2", overlay=true)

// ── 輸入 ──────────────────────────────────────────

atrPeriod     = input.int(10, "ATR 週期")

keyValue      = input.float(1.9, "關鍵值 / ATR 乘數", step=0.1)

warnZoneATR   = input.float(0.25, "警告區間 (x ATR)", step=0.05)

cloudSmooth   = input.int(3, "雲層平滑度", minval=1, tooltip="僅平滑繪製帶狀區域——不會影響信號時機")

src           = close

// ── ATR 跟蹤止損核心 — 原始數據,驅動一切真實邏輯 ──

xATR  = ta.atr(atrPeriod)

nLoss = keyValue * xATR

var float trailStop = 0.0

trailStop := src > nz(trailStop[1], 0) and src[1] > nz(trailStop[1], 0) ? math.max(nz(trailStop[1]), src - nLoss) :

            src < nz(trailStop[1], 0) and src[1] < nz(trailStop[1], 0) ? math.min(nz(trailStop[1]), src + nLoss) :

            src > nz(trailStop[1], 0) ? src - nLoss : src + nLoss

var int pos = 0

pos := src[1] < nz(trailStop[1], 0) and src > nz(trailStop[1], 0) ? 1 :

      src[1] > nz(trailStop[1], 0) and src < nz(trailStop[1], 0) ? -1 : nz(pos[1], 0)

trendColor = pos == 1 ? color.new(color.green, 0) : pos == -1 ? color.new(color.red, 0) : color.gray

// ── 雲層 — 爲流暢性而進行視覺平滑,僅作外觀用途 ──

plotSrc  = ta.ema(src, cloudSmooth)

plotStop = ta.ema(trailStop, cloudSmooth)

pricePlot = plot(plotSrc,  title="Price (smoothed)",      color=trendColor, linewidth=1)

stopPlot  = plot(plotStop, title="跟蹤止損(平滑)", color=trendColor, linewidth=1)

fill(pricePlot, stopPlot, color=color.new(trendColor, 75), title="趨勢雲")

// ── 信號 — 由原始數值驅動,不受平滑影響 ──

buySignal  = pos == 1  and pos[1] == -1

sellSignal = pos == -1 and pos[1] == 1

plotshape(buySignal,  title="Buy",  text="buy",  style=shape.triangleup,   location=location.belowbar, color=color.green, textcolor=color.white, size=size.small)

plotshape(sellSignal, title="Sell", text="sell", style=shape.triangledown, location=location.abovebar, color=color.red,   textcolor=color.white, size=size.small)

alertcondition(buySignal,  "買入信號",  "ATR 跟蹤翻轉爲看漲")

alertcondition(sellSignal, "賣出信號", "ATR 跟蹤翻轉爲看跌")

// ── 翻轉接近度 — 原始缺口,與信號數學相同 ──

gapATR    = pos == 1 ? (src - trailStop) / xATR : (trailStop - src) / xATR

pctToFlip = math.max(0, math.min(100, 100 * (1 - gapATR / keyValue)))

dirText   = pos == 1 ? "LONG" : pos == -1 ? "SHORT" : "FLAT"

nearFlip  = gapATR <= warnZoneATR

labelColor = nearFlip ? color.new(color.orange, 0) : trendColor

labelText  = dirText + "  —  " + str.tostring(gapATR, "#.##") + " ATR 纔會翻轉  (" + str.tostring(pctToFlip, "#") + "%)"

var label proximityLabel = na

if barstate.islast

   label.delete(proximityLabel)

   proximityLabel := label.new(bar_index + 2, src, labelText, style=label.style_label_left, color=labelColor, textcolor=color.white, size=size.normal)