PROTECTED SOURCE SCRIPT
USDT.D MA30 MA200 PRO ULTIME

//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)
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)
Geschütztes Skript
Dieses Script ist als Closed-Source veröffentlicht. Sie können es kostenlos und ohne Einschränkungen verwenden – erfahren Sie hier mehr.
Haftungsausschluss
Die Informationen und Veröffentlichungen sind nicht als Finanz-, Anlage-, Handels- oder andere Arten von Ratschlägen oder Empfehlungen gedacht, die von TradingView bereitgestellt oder gebilligt werden, und stellen diese nicht dar. Lesen Sie mehr in den Nutzungsbedingungen.
Geschütztes Skript
Dieses Script ist als Closed-Source veröffentlicht. Sie können es kostenlos und ohne Einschränkungen verwenden – erfahren Sie hier mehr.
Haftungsausschluss
Die Informationen und Veröffentlichungen sind nicht als Finanz-, Anlage-, Handels- oder andere Arten von Ratschlägen oder Empfehlungen gedacht, die von TradingView bereitgestellt oder gebilligt werden, und stellen diese nicht dar. Lesen Sie mehr in den Nutzungsbedingungen.