Live Markets Loading prices…

TPR V75 Scanner

<style>
#tpr-v75-root *{box-sizing:border-box;margin:0;padding:0;}
#tpr-v75-root{position:fixed!important;inset:0!important;z-index:2147483647!important;background:#0a0a0f;overflow-y:auto;overflow-x:hidden;font-family:'Syne',sans-serif;}
#tpr-v75-root::before{content:'';position:fixed;inset:0;background-image:linear-gradient(#1e1e2e 1px,transparent 1px),linear-gradient(90deg,#1e1e2e 1px,transparent 1px);background-size:40px 40px;opacity:.35;pointer-events:none;z-index:0;}
#tpr-v75-root .wrap{position:relative;z-index:1;max-width:920px;margin:0 auto;padding:28px 20px 60px;}
#tpr-v75-root header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:28px;flex-wrap:wrap;gap:12px;}
#tpr-v75-root .brand-tag{font-family:'Space Mono',monospace;font-size:10px;color:#00ff88;letter-spacing:3px;text-transform:uppercase;margin-bottom:3px;}
#tpr-v75-root .brand-name{font-size:22px;font-weight:800;letter-spacing:-.5px;color:#e8e8f0;}
#tpr-v75-root .brand-name span{color:#00ff88;}
#tpr-v75-root .header-right{display:flex;align-items:center;gap:10px;}
#tpr-v75-root .live-badge{display:flex;align-items:center;gap:8px;background:#00ff8822;border:1px solid #00ff88;border-radius:4px;padding:6px 12px;font-family:'Space Mono',monospace;font-size:11px;color:#00ff88;letter-spacing:1px;}
#tpr-v75-root .live-dot{width:7px;height:7px;border-radius:50%;background:#00ff88;animation:tprv75pulse 1.4s ease infinite;}
@keyframes tprv75pulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.4;transform:scale(.7);}}
#tpr-v75-root .close-btn{background:#1e1e2e;border:1px solid #333350;border-radius:4px;color:#555570;font-family:'Space Mono',monospace;font-size:11px;padding:6px 12px;cursor:pointer;letter-spacing:1px;}
#tpr-v75-root .signal-card{border:1px solid #1e1e2e;border-radius:8px;padding:28px;margin-bottom:18px;background:#111118;position:relative;overflow:hidden;transition:border-color .4s;}
#tpr-v75-root .signal-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:#555570;transition:background .4s;}
#tpr-v75-root .signal-card.trend-up{border-color:#00ff8840;}
#tpr-v75-root .signal-card.trend-up::before{background:#00ff88;}
#tpr-v75-root .signal-card.trend-down{border-color:#ff3d5a40;}
#tpr-v75-root .signal-card.trend-down::before{background:#ff3d5a;}
#tpr-v75-root .signal-card.choppy{border-color:#ffb80040;}
#tpr-v75-root .signal-card.choppy::before{background:#ffb800;}
#tpr-v75-root .signal-label{font-family:'Space Mono',monospace;font-size:10px;letter-spacing:3px;color:#555570;text-transform:uppercase;margin-bottom:10px;}
#tpr-v75-root .signal-main{font-size:44px;font-weight:800;letter-spacing:-2px;line-height:1;margin-bottom:8px;transition:color .4s;color:#e8e8f0;}
#tpr-v75-root .signal-main.up{color:#00ff88;}
#tpr-v75-root .signal-main.down{color:#ff3d5a;}
#tpr-v75-root .signal-main.chop{color:#ffb800;}
#tpr-v75-root .signal-sub{font-family:'Space Mono',monospace;font-size:11px;color:#555570;line-height:1.6;}
#tpr-v75-root .signal-icon{position:absolute;right:28px;top:50%;transform:translateY(-50%);font-size:60px;opacity:.1;}
#tpr-v75-root .bot-action{display:inline-block;margin-top:14px;padding:7px 14px;border-radius:4px;font-family:'Space Mono',monospace;font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;}
#tpr-v75-root .bot-action.go{background:#00ff8822;color:#00ff88;border:1px solid #00ff88;}
#tpr-v75-root .bot-action.wait{background:#ffb80022;color:#ffb800;border:1px solid #ffb800;}
#tpr-v75-root .bot-action.caution{background:#ff3d5a22;color:#ff3d5a;border:1px solid #ff3d5a;}
#tpr-v75-root .metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:18px;}
#tpr-v75-root .metric{background:#111118;border:1px solid #1e1e2e;border-radius:6px;padding:14px;position:relative;overflow:hidden;}
#tpr-v75-root .metric-label{font-family:'Space Mono',monospace;font-size:9px;letter-spacing:2px;color:#555570;text-transform:uppercase;margin-bottom:6px;}
#tpr-v75-root .metric-value{font-family:'Space Mono',monospace;font-size:20px;font-weight:700;color:#e8e8f0;transition:color .3s;}
#tpr-v75-root .metric-sub{font-family:'Space Mono',monospace;font-size:9px;color:#555570;margin-top:3px;}
#tpr-v75-root .metric-bar{position:absolute;bottom:0;left:0;height:2px;background:#555570;transition:width .5s ease,background .3s;}
#tpr-v75-root .chart-wrap{background:#111118;border:1px solid #1e1e2e;border-radius:6px;padding:14px;margin-bottom:18px;}
#tpr-v75-root .chart-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;}
#tpr-v75-root .chart-title{font-family:'Space Mono',monospace;font-size:9px;letter-spacing:2px;color:#555570;text-transform:uppercase;}
#tpr-v75-root .chart-price{font-family:'Space Mono',monospace;font-size:13px;color:#e8e8f0;}
#tpr-v75-root canvas{width:100%;height:110px;display:block;}
#tpr-v75-root .log-wrap{background:#111118;border:1px solid #1e1e2e;border-radius:6px;padding:14px;margin-bottom:18px;}
#tpr-v75-root .log-title{font-family:'Space Mono',monospace;font-size:9px;letter-spacing:2px;color:#555570;text-transform:uppercase;margin-bottom:10px;}
#tpr-v75-root .log-entry{font-family:'Space Mono',monospace;font-size:10px;color:#555570;display:flex;gap:10px;align-items:center;padding:4px 0;border-bottom:1px solid #1e1e2e;}
#tpr-v75-root .log-entry:last-child{border-bottom:none;}
#tpr-v75-root .log-time{min-width:60px;}
#tpr-v75-root .log-signal{font-weight:700;min-width:80px;}
#tpr-v75-root .log-signal.up{color:#00ff88;}
#tpr-v75-root .log-signal.down{color:#ff3d5a;}
#tpr-v75-root .log-signal.chop{color:#ffb800;}
#tpr-v75-root .log-detail{color:#44445a;}
#tpr-v75-root .status-bar{display:flex;align-items:center;justify-content:space-between;font-family:'Space Mono',monospace;font-size:10px;color:#555570;flex-wrap:wrap;gap:8px;}
#tpr-v75-root .connecting{text-align:center;padding:30px 20px;font-family:'Space Mono',monospace;color:#555570;font-size:12px;letter-spacing:1px;}
#tpr-v75-root .spinner{width:26px;height:26px;border:2px solid #1e1e2e;border-top-color:#00ff88;border-radius:50%;animation:tprv75spin .8s linear infinite;margin:0 auto 14px;}
@keyframes tprv75spin{to{transform:rotate(360deg);}}
#tpr-v75-root .error-msg{background:#ff3d5a22;border:1px solid #ff3d5a;border-radius:6px;padding:12px 16px;font-family:'Space Mono',monospace;font-size:11px;color:#ff3d5a;margin-bottom:14px;display:none;}
#tpr-v75-root footer{text-align:center;font-family:'Space Mono',monospace;font-size:9px;color:#555570;letter-spacing:2px;margin-top:16px;padding-top:16px;border-top:1px solid #1e1e2e;}
@media(max-width:580px){#tpr-v75-root .metrics{grid-template-columns:1fr 1fr;}}
</style>

<link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&family=Syne:wght@400;600;700;800&display=swap" rel="stylesheet">

<div id="tpr-v75-root">
<div class="wrap">
  <header>
    <div class="brand">
      <div class="brand-tag">The Payout Report</div>
      <div class="brand-name">TPR <span>V75</span> Scanner</div>
    </div>
    <div class="header-right">
      <div class="live-badge"><div class="live-dot"></div>LIVE &middot; R_75</div>
      <button class="close-btn" onclick="tprv75Close()">&#x2715; EXIT</button>
    </div>
  </header>

  <div class="error-msg" id="tprv75err">&#9888; Connection lost. Reconnecting...</div>

  <div class="signal-card" id="tprv75card">
    <div class="signal-label">Market Condition</div>
    <div class="signal-main" id="tprv75main">
      <div class="connecting"><div class="spinner"></div>CONNECTING TO DERIV...</div>
    </div>
    <div class="signal-sub" id="tprv75sub"></div>
    <div id="tprv75action"></div>
    <div class="signal-icon" id="tprv75icon"></div>
  </div>

  <div class="metrics">
    <div class="metric"><div class="metric-label">RSI &middot; 12</div><div class="metric-value" id="tprv75rsiV">&#8212;</div><div class="metric-sub" id="tprv75rsiS">waiting...</div><div class="metric-bar" id="tprv75rsiB" style="width:0"></div></div>
    <div class="metric"><div class="metric-label">SMA 12</div><div class="metric-value" id="tprv75s12V">&#8212;</div><div class="metric-sub" id="tprv75s12S">waiting...</div><div class="metric-bar" id="tprv75s12B" style="width:0"></div></div>
    <div class="metric"><div class="metric-label">SMA 20</div><div class="metric-value" id="tprv75s20V">&#8212;</div><div class="metric-sub" id="tprv75s20S">waiting...</div><div class="metric-bar" id="tprv75s20B" style="width:0"></div></div>
    <div class="metric"><div class="metric-label">Price vs SMA12</div><div class="metric-value" id="tprv75pvV">&#8212;</div><div class="metric-sub" id="tprv75pvS">waiting...</div><div class="metric-bar" id="tprv75pvB" style="width:50%"></div></div>
    <div class="metric"><div class="metric-label">SMA Alignment</div><div class="metric-value" id="tprv75saV">&#8212;</div><div class="metric-sub" id="tprv75saS">waiting...</div><div class="metric-bar" id="tprv75saB" style="width:50%"></div></div>
    <div class="metric"><div class="metric-label">Signals Agree</div><div class="metric-value" id="tprv75cfV">&#8212;</div><div class="metric-sub" id="tprv75cfS">waiting...</div><div class="metric-bar" id="tprv75cfB" style="width:0"></div></div>
  </div>

  <div class="chart-wrap">
    <div class="chart-header">
      <div class="chart-title">Price &middot; Last 60 Ticks</div>
      <div class="chart-price" id="tprv75price">&#8212;</div>
    </div>
    <canvas id="tprv75chart"></canvas>
  </div>

  <div class="log-wrap">
    <div class="log-title">Signal History</div>
    <div id="tprv75log"><div class="log-entry"><span class="log-time">&#8212;</span><span class="log-signal">Waiting for data...</span></div></div>
  </div>

  <div class="status-bar">
    <span>SYMBOL: R_75 &middot; SYNTHETIC</span>
    <span id="tprv75ticks">TICKS: 0</span>
    <span id="tprv75updated">UPDATED: &#8212;</span>
  </div>

  <footer>TPR V75 SCANNER &middot; THE PAYOUT REPORT &middot; DATA: DERIV WEBSOCKET API</footer>
</div>
</div>

<script>
(function(){
  var ROOT = document.getElementById('tpr-v75-root');

  // Hide all sibling elements on the host page
  function lockdown(){
    var kids = document.body.children;
    for(var i=0;i<kids.length;i++){
      if(kids[i].id !== 'tpr-v75-root'){
        kids[i].style.cssText += ';display:none!important;visibility:hidden!important;';
      }
    }
    document.body.style.overflow = 'hidden';
    document.documentElement.style.overflow = 'hidden';
  }
  lockdown();
  // Re-run if site JS injects new elements
  if(window.MutationObserver){
    new MutationObserver(lockdown).observe(document.body,{childList:true});
  }

  window.tprv75Close = function(){
    var kids = document.body.children;
    for(var i=0;i<kids.length;i++){
      kids[i].style.display = '';
      kids[i].style.visibility = '';
    }
    document.body.style.overflow = '';
    document.documentElement.style.overflow = '';
    ROOT.style.display = 'none';
    if(ws) ws.close();
  };

  var WS_URL  = 'wss://ws.binaryws.com/websockets/v3?app_id=1089';
  var SYMBOL  = 'R_75';
  var RSI_PER = 12, SMA_S = 12, SMA_L = 20, NEEDED = 60;
  var ticks=[], ws=null, tickCount=0, signalLog=[], reconnectDelay=2000;

  function sma(arr,n){
    if(arr.length<n) return null;
    var s=arr.slice(-n),sum=0;
    for(var i=0;i<s.length;i++) sum+=s[i];
    return sum/n;
  }
  function rsiCalc(arr,n){
    if(arr.length<n+1) return null;
    var s=arr.slice(-(n+1)),g=0,l=0;
    for(var i=1;i<s.length;i++){var d=s[i]-s[i-1];d>0?g+=d:l+=Math.abs(d);}
    if(l===0) return 100;
    return 100-(100/(1+(g/l)));
  }
  function fmt(n,d){d=d||2;return n===null?'--':n.toFixed(d);}
  function nowStr(){return new Date().toLocaleTimeString('en-GB',{hour:'2-digit',minute:'2-digit',second:'2-digit'});}

  function connect(){
    if(ws){try{ws.close();}catch(e){}}
    ws = new WebSocket(WS_URL);
    ws.onopen = function(){
      reconnectDelay=2000;
      document.getElementById('tprv75err').style.display='none';
      ws.send(JSON.stringify({ticks:SYMBOL,subscribe:1}));
    };
    ws.onmessage = function(e){
      var msg=JSON.parse(e.data);
      if(msg.tick) onTick(msg.tick.quote);
    };
    ws.onerror = ws.onclose = function(){
      document.getElementById('tprv75err').style.display='block';
      setTimeout(connect,reconnectDelay);
      reconnectDelay=Math.min(reconnectDelay*1.5,15000);
    };
  }

  function onTick(price){
    ticks.push(price);
    if(ticks.length>200) ticks.shift();
    tickCount++;
    document.getElementById('tprv75ticks').textContent='TICKS: '+tickCount;
    document.getElementById('tprv75updated').textContent='UPDATED: '+nowStr();
    document.getElementById('tprv75price').textContent=price.toFixed(2);
    drawChart();
    if(ticks.length<NEEDED){
      var pct=Math.round((ticks.length/NEEDED)*100);
      document.getElementById('tprv75main').innerHTML=
        '<div class="connecting"><div class="spinner"></div>LOADING DATA... '+pct+'%</div>';
      return;
    }
    compute(price);
  }

  function compute(price){
    var rv=rsiCalc(ticks,RSI_PER), s12=sma(ticks,SMA_S), s20=sma(ticks,SMA_L);
    if(rv===null||s12===null||s20===null) return;
    var rsiUp=rv>14, rsiDn=rv<14;
    var pUp=price>s12, pDn=price<s12;
    var aUp=s12>s20, aDn=s12<s20;
    var upC=[rsiUp,pUp,aUp].filter(Boolean).length;
    var dnC=[rsiDn,pDn,aDn].filter(Boolean).length;
    var cond,css,icon,sub,act,actC;
    if(upC===3){
      cond='&#9650; TRENDING UP';css='up';icon='&#8593;';
      sub='All 3 signals bullish &middot; RSI '+fmt(rv)+' &middot; Price above SMA12 &middot; SMA12 above SMA20';
      act='&#x1F7E2; BOT READY &mdash; Safe to run TPR V75';actC='go';
    } else if(dnC===3){
      cond='&#9660; TRENDING DOWN';css='down';icon='&#8595;';
      sub='All 3 signals bearish &middot; RSI '+fmt(rv)+' &middot; Price below SMA12 &middot; SMA12 below SMA20';
      act='&#x1F7E2; BOT READY &mdash; Safe to run TPR V75';actC='go';
    } else if(upC>=2||dnC>=2){
      cond='~ WEAK TREND';css='chop';icon='~';
      sub=Math.max(upC,dnC)+'/3 signals agree &middot; Not fully committed yet';
      act='&#x26A0;&#xFE0F; CAUTION &mdash; Wait for full confirmation';actC='wait';
    } else {
      cond='&#x26A1; CHOPPY';css='chop';icon='&#8776;';
      sub='Signals conflicting &middot; RSI '+fmt(rv)+' &middot; No clear directional bias';
      act='&#x1F534; HOLD &mdash; Do not run the bot right now';actC='caution';
    }
    var card=document.getElementById('tprv75card');
    card.className='signal-card '+(upC===3?'trend-up':dnC===3?'trend-down':'choppy');
    var main=document.getElementById('tprv75main');
    main.className='signal-main '+css;
    main.innerHTML=cond;
    document.getElementById('tprv75sub').innerHTML=sub;
    document.getElementById('tprv75icon').innerHTML=icon;
    document.getElementById('tprv75action').innerHTML='<span class="bot-action '+actC+'">'+act+'</span>';

    var rC=rv>60?'#00ff88':rv<40?'#ff3d5a':'#ffb800';
    setM('tprv75rsiV',fmt(rv),rC,'tprv75rsiS',rv>60?'bullish momentum':rv<40?'bearish momentum':'neutral zone','tprv75rsiB',Math.min(100,rv),rC);
    var c12=price>s12?'#00ff88':'#ff3d5a';
    setM('tprv75s12V',fmt(s12),c12,'tprv75s12S','price is '+(price>s12?'ABOVE &uarr;':'BELOW &darr;'),'tprv75s12B',60,c12);
    var c20=s12>s20?'#00ff88':'#ff3d5a';
    setM('tprv75s20V',fmt(s20),c20,'tprv75s20S','SMA12 is '+(s12>s20?'ABOVE &uarr;':'BELOW &darr;'),'tprv75s20B',60,c20);
    var pvd=((price-s12)/s12*100), pvc=pUp?'#00ff88':'#ff3d5a';
    setM('tprv75pvV',(pvd>=0?'+':'')+pvd.toFixed(3)+'%',pvc,'tprv75pvS',pUp?'&#x2713; bullish signal':'&#x2717; bearish signal','tprv75pvB',Math.min(100,Math.abs(pvd)*200+30),pvc);
    var sad=((s12-s20)/s20*100), sac=aUp?'#00ff88':'#ff3d5a';
    setM('tprv75saV',(sad>=0?'+':'')+sad.toFixed(3)+'%',sac,'tprv75saS',aUp?'&#x2713; bullish alignment':'&#x2717; bearish alignment','tprv75saB',Math.min(100,Math.abs(sad)*300+30),sac);
    var tot=Math.max(upC,dnC), cc=tot===3?'#00ff88':tot===2?'#ffb800':'#ff3d5a';
    setM('tprv75cfV',tot+'/3',cc,'tprv75cfS',tot===3?'full confluence':tot===2?'partial signal':'no confluence','tprv75cfB',(tot/3)*100,cc);

    if(tickCount%30===0){
      addLog(cond,css,'RSI '+fmt(rv)+' &middot; SMA12 '+fmt(s12)+' &middot; SMA20 '+fmt(s20));
    }
  }

  function setM(vId,val,col,sId,sub,bId,pct,bCol){
    var v=document.getElementById(vId);v.innerHTML=val;v.style.color=col;
    document.getElementById(sId).innerHTML=sub;
    var b=document.getElementById(bId);b.style.width=pct+'%';b.style.background=bCol;
  }

  function addLog(sig,cls,detail){
    signalLog.unshift({t:nowStr(),s:sig,c:cls,d:detail});
    if(signalLog.length>8) signalLog.pop();
    document.getElementById('tprv75log').innerHTML=signalLog.map(function(e){
      return '<div class="log-entry"><span class="log-time">'+e.t+'</span><span class="log-signal '+e.c+'">'+e.s+'</span><span class="log-detail">'+e.d+'</span></div>';
    }).join('');
  }

  function drawChart(){
    var canvas=document.getElementById('tprv75chart');
    var ctx=canvas.getContext('2d');
    var dpr=window.devicePixelRatio||1;
    var W=canvas.parentElement.clientWidth, H=110;
    canvas.width=W*dpr; canvas.height=H*dpr;
    canvas.style.width=W+'px'; canvas.style.height=H+'px';
    ctx.scale(dpr,dpr);
    var data=ticks.slice(-60);
    if(data.length<2) return;
    var mn=Math.min.apply(null,data), mx=Math.max.apply(null,data), rng=mx-mn||1;
    var x=function(i){return(i/(data.length-1))*W;};
    var y=function(v){return H-10-((v-mn)/rng)*(H-20);};
    ctx.clearRect(0,0,W,H);
    var isUp=data[data.length-1]>data[0];
    var grad=ctx.createLinearGradient(0,0,0,H);
    grad.addColorStop(0,isUp?'rgba(0,255,136,0.18)':'rgba(255,61,90,0.18)');
    grad.addColorStop(1,'rgba(0,0,0,0)');
    ctx.beginPath(); ctx.moveTo(x(0),H);
    for(var i=0;i<data.length;i++) ctx.lineTo(x(i),y(data[i]));
    ctx.lineTo(x(data.length-1),H); ctx.closePath();
    ctx.fillStyle=grad; ctx.fill();
    ctx.beginPath();
    for(var i=0;i<data.length;i++) i===0?ctx.moveTo(x(i),y(data[i])):ctx.lineTo(x(i),y(data[i]));
    ctx.strokeStyle=isUp?'#00ff88':'#ff3d5a'; ctx.lineWidth=1.5; ctx.stroke();
    if(data.length>=SMA_S){
      var sl=data.map(function(_,i){
        var sl2=data.slice(Math.max(0,i-SMA_S+1),i+1);
        return sl2.reduce(function(a,b){return a+b;},0)/sl2.length;
      });
      ctx.beginPath();
      for(var i=0;i<sl.length;i++) i===0?ctx.moveTo(x(i),y(sl[i])):ctx.lineTo(x(i),y(sl[i]));
      ctx.strokeStyle='rgba(68,136,255,0.5)'; ctx.lineWidth=1;
      ctx.setLineDash([3,3]); ctx.stroke(); ctx.setLineDash([]);
    }
  }

  window.addEventListener('resize',drawChart);
  connect();
})();
</script>