PROTECTED SOURCE SCRIPT

USDT.D MA30 MA200 PRO ULTIME

25
//version=5
indicator("USDT.D MA30 MA200 PRO ULTIME", shorttitle="USDT.D Pro", overlay=false, max_labels_count=500, max_lines_count=500)

///// PARAMETRES COMPLETS /////
len30 = input.int(30, "MA30 Periode", minval=1, maxval=500)
len200 = input.int(200, "MA200 Periode", minval=1, maxval=1000)
tf = input.timeframe("1D", "Timeframe USDT.D")
normalize = input.bool(true, "Normaliser 0-100")
forceLive = input.bool(true, "Force Update Live")
showDebug = input.bool(false, "Tableau Debug")
showAlerts = input.bool(true, "Alertes Cross")

///// RECUPERATION MULTI-SOURCES + ANTI-PLAT /////
usdt1 = request.security("TVC:USDT.D", tf, close, ignore_invalid_symbol=true, lookahead=barmerge.lookahead_off)
usdt2 = request.security("CRYPTOCAP:USDT.D", tf, close, ignore_invalid_symbol=true, lookahead=barmerge.lookahead_off)
usdtD = na(usdt1) or (forceLive and barstate.isrealtime) ? usdt2 : usdt1

///// CALCULS MA + DETECTION PLATS CORRIGEE /////
ma30 = ta.sma(usdtD, len30)
ma200 = ta.sma(usdtD, len200)

// CORRECTION CRITIQUE : flat_bars safe
flat30_bars = na(ta.valuewhen(ta.change(ma30) != 0, bar_index, 0)) ? 0 : bar_index - ta.valuewhen(ta.change(ma30) != 0, bar_index, 0)
flat200_bars = na(ta.valuewhen(ta.change(ma200) != 0, bar_index, 0)) ? 0 : bar_index - ta.valuewhen(ta.change(ma200) != 0, bar_index, 0)
isFlat30 = flat30_bars > 10
isFlat200 = flat200_bars > 10

///// NORMALISATION INTELLIGENTE /////
lookback = 1000
ma30_norm = normalize and not na(ma30) ? (ma30 - ta.lowest(ma30, lookback)) / (ta.highest(ma30, lookback) - ta.lowest(ma30, lookback)) * 100 : ma30
ma200_norm = normalize and not na(ma200) ? (ma200 - ta.lowest(ma200, lookback)) / (ta.highest(ma200, lookback) - ta.lowest(ma200, lookback)) * 100 : ma200

///// PLOTS AVANCES /////
ma30_color = isFlat30 ? color.new(color.gray, 50) : (ma30 > ma200 ? color.new(color.lime, 0) : color.new(color.blue, 0))
ma200_color = isFlat200 ? color.new(color.gray, 50) : (ma30 > ma200 ? color.new(color.orange, 20) : color.new(color.red, 0))

p30 = plot(ma30_norm, "MA30", ma30_color, 4)
p200 = plot(ma200_norm, "MA200", ma200_color, 4)
fill(p30, p200, color=ma30_norm > ma200_norm ? color.new(color.green, 88) : color.new(color.red, 88), title="Trend Fill")

///// NIVEAUX REFERENCE /////
hline_level = normalize ? 50 : 5
hline_high = normalize ? 80 : 7
hline_low = normalize ? 20 : 3
hline(hline_high, "Surachat", color=color.red, linestyle=hline.style_dashed, linewidth=2)
hline(hline_low, "Survente", color=color.green, linestyle=hline.style_dashed, linewidth=2)
hline(hline_level, "Milieu", color=color.gray, linestyle=hline.style_solid)

///// SIGNAUX CROSS + PLATS /////
bullCross = ta.crossover(ma30, ma200)
bearCross = ta.crossunder(ma30, ma200)
plotshape(bullCross and showAlerts, "ACHAT", shape.triangleup, location.bottom, color.lime, size=size.normal)
plotshape(bearCross and showAlerts, "VENTE", shape.triangledown, location.top, color.red, size=size.normal)
plotshape(isFlat30, "Plat MA30", shape.xcross, location.top, color.new(color.gray, 0), size=size.tiny)
plotshape(isFlat200, "Plat MA200", shape.xcross, location.bottom, color.new(color.gray, 0), size=size.tiny)
bgcolor((isFlat30 or isFlat200) ? color.new(color.yellow, 92) : na, title="Plat Alert")

///// ALERTES PROFESSIONNELLES /////
alertcondition(bullCross, "USDT.D Bull Cross", "USDT.D: MA30 croise AU-DESSUS MA200")
alertcondition(bearCross, "USDT.D Bear Cross", "USDT.D: MA30 croise EN-DESSOUS MA200")
alertcondition(isFlat30 or isFlat200, "USDT.D Flat", "USDT.D: MA PLAT detecte")

///// TABLEAU DEBUG LIVE CORRIGE /////
if showDebug and barstate.islast
var table dashboard = table.new(position.top_right, 2, 8, bgcolor=color.new(color.white, 10), border_width=2)
table.cell(dashboard, 0, 0, "USDT.D", text_color=color.purple, text_size=size.normal, bgcolor=color.new(color.purple, 90))
table.cell(dashboard, 1, 0, str.tostring(usdtD, "#.###") + "%", text_color=color.white, text_size=size.normal, bgcolor=color.new(color.purple, 90))
table.cell(dashboard, 0, 1, "MA30", text_color=ma30_color, text_size=size.small)
table.cell(dashboard, 1, 1, str.tostring(ma30, "#.###"), text_color=ma30_color, text_size=size.small)
table.cell(dashboard, 0, 2, "MA200", text_color=ma200_color, text_size=size.small)
table.cell(dashboard, 1, 2, str.tostring(ma200, "#.###"), text_color=ma200_color, text_size=size.small)
table.cell(dashboard, 0, 3, "Flat30", text_color=color.gray, text_size=size.small)
table.cell(dashboard, 1, 3, str.tostring(flat30_bars) + "b", text_color=isFlat30 ? color.red : color.green, text_size=size.small)
table.cell(dashboard, 0, 4, "Flat200", text_color=color.gray, text_size=size.small)
table.cell(dashboard, 1, 4, str.tostring(flat200_bars) + "b", text_color=isFlat200 ? color.red : color.green, text_size=size.small)
table.cell(dashboard, 0, 5, "Trend", text_color=color.black, text_size=size.small, bgcolor=color.new(color.yellow, 80))
table.cell(dashboard, 1, 5, ma30 > ma200 ? "HAUSSIER" : "BAISSIER", text_color=ma30 > ma200 ? color.green : color.red, text_size=size.normal, bgcolor=color.new(color.yellow, 80))
table.cell(dashboard, 0, 6, "TF", text_color=color.blue, text_size=size.small)
table.cell(dashboard, 1, 6, tf, text_color=color.blue, text_size=size.small)
table.cell(dashboard, 0, 7, "Plan OK", text_color=not na(usdtD) ? color.green : color.red, text_size=size.small)
table.cell(dashboard, 1, 7, not na(usdtD) ? "OK" : "NO", text_color=not na(usdtD) ? color.green : color.red, text_size=size.normal)

Pernyataan Penyangkalan

Informasi dan publikasi ini tidak dimaksudkan, dan bukan merupakan, saran atau rekomendasi keuangan, investasi, trading, atau jenis lainnya yang diberikan atau didukung oleh TradingView. Baca selengkapnya di Ketentuan Penggunaan.