












<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="https://code.jquery.com/jquery-3.7.1.js" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script>


<!-- Bootstrap -->
<!-- <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> -->


<!-- 
start:'2023-11-01T00:00',
end: '2023-11-19T00:00',
encoding: 'json',
schema: 'ohlcv-1d',
pretty_ts: 'true',
map_symbols: '1'

 -->


<style>
	.futuresWidget1 table {
    	border-top: none !important;
	}
	tbody.tableBodyLive tr, tbody.tableBodyLive td, tbody.tableBodyLive th {
    	text-align: left;
    	padding: 7px;
	}
	.futuresWidget1{
		max-height: 340px !important;
    	overflow-y: scroll !important;
	}
	.futuresWidget1 {
/*	    background: #212529;*/
/*	    padding: 20px;*/
	    font-size: 12px;
/*	    border-radius: 10px;*/
	}
	.futuresWidget1 table {
    	margin: 0;
	}
	.futuresWidget1 table tr, table td, table th {
    	color: #212529;
    	font-size: 15px;
	}
</style>

<script type="text/javascript">

	let formatted_date = '';

	const formatDate = ( nano_seconds ) => {

		// const nanosecondsTimestamp = d.hd.ts_event; 
		const nanosecondsTimestamp = nano_seconds; 

		const date = convertNanosecondsToDate(nanosecondsTimestamp);
		const year = date.getFullYear();
    	const month = date.getMonth() > 9 ? date.getMonth() + 1 : '0' + date.getMonth() + 1;
    	const day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate() ;
    	let hour = date.getHours() > 9 ? date.getHours() : '0' + date.getHours();
    	hour = (hour % 12) || 12;
    	const minute = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes();
    	const seconds = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds();
    	// console.log('day', day)
		formatted_date = `${month}/${day}/${year} ${hour}:${minute}:${seconds}`;
		return formatted_date;

	}

	


	const nanosecondsToMilliseconds = (nanoseconds) => {
	  return Math.floor(nanoseconds / 1e6); // 1e6 nanoseconds in a millisecond
	}

	const convertNanosecondsToDate = (nanoseconds) => {
	  const milliseconds = nanosecondsToMilliseconds(nanoseconds);
	  const date = new Date(milliseconds);
	  return date;
	}

	const toTimestamp = (strDate) => {
  		const dt = Date.parse(strDate);
  		return dt ;
	};

	const getEquityByInstrumentId = (instrument_id) => {
	
		const to_return = {
			5602: {
				databento_name: "ESM4",
				ttg_name: "E-Mini S&P 500 (ES)"
			},
			669: {
				databento_name: "GCM4", 
				ttg_name: "Gold Futures"
			},
			42004501: {
				databento_name: "ZNM4",
				ttg_name: "10-Year T-Note Futures"
			},
			42035227: {
				databento_name: "ZFM4",
				ttg_name: "5-Year T-Note Futures"
			},
			10: {
				databento_name: "MNQM4",
				ttg_name: "Micro E-mini Nasdaq-100 Index Futures"
			},
			132673: {
				databento_name: "6JM4",
				ttg_name: "Japanese Yen Futures"
			},
			4122:{
				databento_name: "SIK4",
				ttg_name: "Silver Futures"
			},
			13804: {
				databento_name: "MESM4",
				ttg_name: "Micro E-mini S&P 500 Index Futures"
			},
			13743: {
				databento_name: "NQM4",
				ttg_name: "E-mini Nasdaq-100 Futures"
			},
			320510: {
				databento_name: "CLM4",
				ttg_name: "Crude Oil Futures"
			},
			379949: {
				databento_name: "ZBM4",
				ttg_name: "U.S. Treasury Bond Futures"
			},
			123163: {
				databento_name: "6AM4",
				ttg_name: "Australian Dollar Futures"
			},
			25912: {
				databento_name: "RTYZ3",
				ttg_name: "E-mini Russell 2000 Index Futures"
			},
			7128: {
				databento_name: "M2KM4",
				ttg_name: "Micro E-mini Russell 2000 Index Futures"
			},
			74067: {
				databento_name: "HGN4",
				ttg_name: "Copper Futures"
			},
			80420: {
				databento_name: "YMM4",
				ttg_name: "E-mini Dow Jones Industrial Average Index Futures"
			}
		};

		return to_return;
	}


	const appendMultipleDays = ( data, period, live=false) => {
		


		data.forEach( (d, index) => {
			
			
			if (live) {
				// const nanosecondsTimestamp = d.hd.ts_event; 

				// const date = convertNanosecondsToDate(nanosecondsTimestamp);
				// const year = date.getFullYear();
	        	// const month = date.getMonth() > 9 ? date.getMonth() + 1 : '0' + date.getMonth() + 1;
	        	// const day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate() ;
	        	// let hour = date.getHours() > 9 ? date.getHours() : '0' + date.getHours();
	        	// hour = (hour % 12) || 12;
	        	// const minute = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes();
	        	// const seconds = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds();
	        	// // console.log('day', day)
				// formatted_date = `${month}/${day}/${year} ${hour}:${minute}:${seconds}`;

				formatDate(d.hd.ts_event);
				
				// console.log('d', d)

			}else{
				// fix date issue
				let date_temp = new Date( toTimestamp( d.hd.ts_event) ).toISOString();
				date_temp = date_temp.replace('.000Z', '');
				const date = new Date(date_temp);
				// let nanosecondsTimestamp = Math.floor( temp_date * (1000 ) );
				// console.log('nanosecondsTimestamp', nanosecondsTimestamp)
				// console.log('d.hd.ts_event', toTimestamp( d.hd.ts_event) );
        		// const date = convertNanosecondsToDate(nanosecondsTimestamp);
				const year = date.getFullYear();
	        	const month = date.getMonth() > 9 ? date.getMonth() + 1 : date.getMonth() + 1;
	        	const day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate() ;
	        	let hour = date.getHours() > 9 ? date.getHours() : '0' + date.getHours();

	        	// hour = (hour % 12) || 12;
	        	// const minute = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes();
	        	// const seconds = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds();

				formatted_date = `${month}/${day}/${year}`;
			}
			
			
			

			let open = d.open
			let high = d.high
			let low = d.low 
			let close = d.close 
			let volume = d.volume 
			open = ( (d.open/10000000)/100 ).toFixed(2);
			high = ( (d.high/10000000)/100 ).toFixed(2);
			low = ( (d.low/10000000)/100 ).toFixed(2);
			close = ( (d.close/10000000)/100 ).toFixed(4);
			const instrument_id = d.hd.instrument_id;

			close_1 = close
			open_1 = open

			
			open = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol'}).format( open );
			high = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol'}).format( high );
			low = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol'}).format( low );
			close = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol', minimumSignificantDigits: 2, minimumFractionDigits: 4  }).format( close );

			volume = new Intl.NumberFormat('en-IN').format( volume );
			

			if(live){

				console.log('instrument_id', instrument_id);
				// console.log(getEquityByInstrumentId( instrument_id )[instrument_id].ttg_name);

				$('#' + instrument_id).html( `
					<td> ${getEquityByInstrumentId( instrument_id )[instrument_id].ttg_name } </td> 
					<td> ${formatted_date} </td> 
					<td> ${close} </td> 
				` );
			}
		} )
		
		
	}

	const getDollarChange = ( open, close ) => {
		let cal = close - open 
		if(cal < 0) {
			return `<span style="color: red;">${parseFloat(cal).toFixed(2)}</span>`;	
		}
		return `<span style="color: green;">${parseFloat(cal).toFixed(2)}</span>`;	
	}

	const getPercentChange = (open, close) => {
		// =[|(180-240)|/(180+240)/2]× 100
		// let perc_diff = ( (close - open) /  ( (close + open) / 2) ) * 100;
		let perc_diff = ((close - open) / open ) * 100;
		perc_diff = parseFloat(perc_diff).toFixed(2);
		if(perc_diff < 0) {
			return `<span style="color: red;">${perc_diff}%</span>`;	
		}

		return `<span style="color: green;">${perc_diff}%</span>`;	
	}

	const getUrlVars = () => {
	    var vars = {};
	    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
	        vars[key] = value;
	    });
    	return vars;
	}

</script>




<script type="text/javascript">

    window.addEventListener("load", function() {
        // create websocket instance
        // var ws = new WebSocket("ws://localhost:8005/stream/futures"); 
        var ws = new WebSocket("wss://api.truetradinggroup.com/stream/futures");

        ws.addEventListener("open", (event) => {
  			console.log('We are connected!', event);
		});

		ws.addEventListener("message", (e) =>{
			console.log( e.data );
			
			const data = formatToJson(e.data);
			console.log( data );
			appendMultipleDays(data,'s', true);
		});

		addEventListener("close", (event) => {
			console.log('Connection closed');
		});


    });

    const formatToJson = (data_string) => {
    	data = data_string.replaceAll(`{"hd":`, `,{"hd":`);
    	data = data.replace(`,{"hd":`, `{"hd":`);
    	data = data.replaceAll(/\n/g, " ");
    	data = `[${data}]`;
    	try{
			data = JSON.parse(data);
			return data;
    	}catch(err){
    		console.log('Disregard Error:', err.message);
    	}
    }


    const snapShotCall = async () => {
		// Call api snapshot
		try{
			const snapshot_call = await axios({
				method: 'get',
				// url: 'http://localhost:8005/api/databento/snapshot'
                url: 'https://api.truetradinggroup.com/api/databento/snapshot'
			});
			const {data} = snapshot_call.data;
			
			console.log('data', data);

			data.map( (d, index)  => {
				
				const instrument_id = d.hd.instrument_id;

				let close = ( (d.close/10000000)/100 ).toFixed(4);
				close = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol', minimumSignificantDigits: 2, minimumFractionDigits: 4  }).format( close );


				$('#' + instrument_id).html( `
						<td> ${getEquityByInstrumentId( instrument_id )[instrument_id].ttg_name } </td> 
						<td> ${formatDate(d.hd.ts_event)} </td> 
						<td> ${close} </td> 
				` );
			})

			console.log('snapshot_call', snapshot_call.data);
		}catch(err){
			console.log('err', err);
		}
	}

	snapShotCall();

</script>

<section>
	<div class="container-fluid">
		<div class="row">
			
			<div class="col-12 p-0">
				<div class="futuresWidget1">	
					<!-- <h3>Realtime Futures Data</h3> -->
					<table class="table">
						<thead>
							<tr>
								<th>Ticker</th>
								<th>Date(m/d/y time)</th>
								<!-- <th>Open</th>
								<th>High</th>
								<th>Low</th> -->
								<th>Current Price</th>
								<!-- <th>Volume</th> -->
								<!-- <th>$ Ch</th>
								<th>% Ch</th> -->
							</tr>
						</thead>

						<tbody class="tableBodyLive">
							<tr id="5602"></tr>
							<tr id="10"></tr>
							<tr id="669"></tr>
							<tr id="4122"></tr>
							<tr id="42004501"></tr>
							<tr id="42035227"></tr>
							<tr id="132673"></tr>
							<tr id="13804"></tr>
							<tr id="13743"></tr>
							<tr id="320510"></tr>
							<tr id="42004286"></tr>
							<tr id="123163"></tr>
							<tr id="25912"></tr>
							<tr id="7128"></tr>
							<tr id="74067"></tr>
							<tr id="80420"></tr>
						</tbody>
						
					</table>
				</div>
			</div>
			
		</div>
	</div> 
</section><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="https://code.jquery.com/jquery-3.7.1.js" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script>


<!-- Bootstrap -->
<!-- <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> -->


<!-- 
start:'2023-11-01T00:00',
end: '2023-11-19T00:00',
encoding: 'json',
schema: 'ohlcv-1d',
pretty_ts: 'true',
map_symbols: '1'

 -->


<style>
	.futuresWidget1 table {
    	border-top: none !important;
	}
	tbody.tableBodyLive tr, tbody.tableBodyLive td, tbody.tableBodyLive th {
    	text-align: left;
    	padding: 7px;
	}
	.futuresWidget1{
		max-height: 340px !important;
    	overflow-y: scroll !important;
	}
	.futuresWidget1 {
/*	    background: #212529;*/
/*	    padding: 20px;*/
	    font-size: 12px;
/*	    border-radius: 10px;*/
	}
	.futuresWidget1 table {
    	margin: 0;
	}
	.futuresWidget1 table tr, table td, table th {
    	color: #212529;
    	font-size: 15px;
	}
</style>

<script type="text/javascript">

	let formatted_date = '';

	const formatDate = ( nano_seconds ) => {

		// const nanosecondsTimestamp = d.hd.ts_event; 
		const nanosecondsTimestamp = nano_seconds; 

		const date = convertNanosecondsToDate(nanosecondsTimestamp);
		const year = date.getFullYear();
    	const month = date.getMonth() > 9 ? date.getMonth() + 1 : '0' + date.getMonth() + 1;
    	const day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate() ;
    	let hour = date.getHours() > 9 ? date.getHours() : '0' + date.getHours();
    	hour = (hour % 12) || 12;
    	const minute = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes();
    	const seconds = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds();
    	// console.log('day', day)
		formatted_date = `${month}/${day}/${year} ${hour}:${minute}:${seconds}`;
		return formatted_date;

	}

	


	const nanosecondsToMilliseconds = (nanoseconds) => {
	  return Math.floor(nanoseconds / 1e6); // 1e6 nanoseconds in a millisecond
	}

	const convertNanosecondsToDate = (nanoseconds) => {
	  const milliseconds = nanosecondsToMilliseconds(nanoseconds);
	  const date = new Date(milliseconds);
	  return date;
	}

	const toTimestamp = (strDate) => {
  		const dt = Date.parse(strDate);
  		return dt ;
	};

	const getEquityByInstrumentId = (instrument_id) => {
	
		const to_return = {
			5602: {
				databento_name: "ESM4",
				ttg_name: "E-Mini S&P 500 (ES)"
			},
			669: {
				databento_name: "GCM4", 
				ttg_name: "Gold Futures"
			},
			42004501: {
				databento_name: "ZNM4",
				ttg_name: "10-Year T-Note Futures"
			},
			42035227: {
				databento_name: "ZFM4",
				ttg_name: "5-Year T-Note Futures"
			},
			10: {
				databento_name: "MNQM4",
				ttg_name: "Micro E-mini Nasdaq-100 Index Futures"
			},
			132673: {
				databento_name: "6JM4",
				ttg_name: "Japanese Yen Futures"
			},
			4122:{
				databento_name: "SIK4",
				ttg_name: "Silver Futures"
			},
			13804: {
				databento_name: "MESM4",
				ttg_name: "Micro E-mini S&P 500 Index Futures"
			},
			13743: {
				databento_name: "NQM4",
				ttg_name: "E-mini Nasdaq-100 Futures"
			},
			320510: {
				databento_name: "CLM4",
				ttg_name: "Crude Oil Futures"
			},
			379949: {
				databento_name: "ZBM4",
				ttg_name: "U.S. Treasury Bond Futures"
			},
			123163: {
				databento_name: "6AM4",
				ttg_name: "Australian Dollar Futures"
			},
			25912: {
				databento_name: "RTYZ3",
				ttg_name: "E-mini Russell 2000 Index Futures"
			},
			7128: {
				databento_name: "M2KM4",
				ttg_name: "Micro E-mini Russell 2000 Index Futures"
			},
			74067: {
				databento_name: "HGN4",
				ttg_name: "Copper Futures"
			},
			80420: {
				databento_name: "YMM4",
				ttg_name: "E-mini Dow Jones Industrial Average Index Futures"
			}
		};

		return to_return;
	}


	const appendMultipleDays = ( data, period, live=false) => {
		


		data.forEach( (d, index) => {
			
			
			if (live) {
				// const nanosecondsTimestamp = d.hd.ts_event; 

				// const date = convertNanosecondsToDate(nanosecondsTimestamp);
				// const year = date.getFullYear();
	        	// const month = date.getMonth() > 9 ? date.getMonth() + 1 : '0' + date.getMonth() + 1;
	        	// const day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate() ;
	        	// let hour = date.getHours() > 9 ? date.getHours() : '0' + date.getHours();
	        	// hour = (hour % 12) || 12;
	        	// const minute = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes();
	        	// const seconds = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds();
	        	// // console.log('day', day)
				// formatted_date = `${month}/${day}/${year} ${hour}:${minute}:${seconds}`;

				formatDate(d.hd.ts_event);
				
				// console.log('d', d)

			}else{
				// fix date issue
				let date_temp = new Date( toTimestamp( d.hd.ts_event) ).toISOString();
				date_temp = date_temp.replace('.000Z', '');
				const date = new Date(date_temp);
				// let nanosecondsTimestamp = Math.floor( temp_date * (1000 ) );
				// console.log('nanosecondsTimestamp', nanosecondsTimestamp)
				// console.log('d.hd.ts_event', toTimestamp( d.hd.ts_event) );
        		// const date = convertNanosecondsToDate(nanosecondsTimestamp);
				const year = date.getFullYear();
	        	const month = date.getMonth() > 9 ? date.getMonth() + 1 : date.getMonth() + 1;
	        	const day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate() ;
	        	let hour = date.getHours() > 9 ? date.getHours() : '0' + date.getHours();

	        	// hour = (hour % 12) || 12;
	        	// const minute = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes();
	        	// const seconds = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds();

				formatted_date = `${month}/${day}/${year}`;
			}
			
			
			

			let open = d.open
			let high = d.high
			let low = d.low 
			let close = d.close 
			let volume = d.volume 
			open = ( (d.open/10000000)/100 ).toFixed(2);
			high = ( (d.high/10000000)/100 ).toFixed(2);
			low = ( (d.low/10000000)/100 ).toFixed(2);
			close = ( (d.close/10000000)/100 ).toFixed(4);
			const instrument_id = d.hd.instrument_id;

			close_1 = close
			open_1 = open

			
			open = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol'}).format( open );
			high = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol'}).format( high );
			low = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol'}).format( low );
			close = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol', minimumSignificantDigits: 2, minimumFractionDigits: 4  }).format( close );

			volume = new Intl.NumberFormat('en-IN').format( volume );
			

			if(live){

				console.log('instrument_id', instrument_id);
				// console.log(getEquityByInstrumentId( instrument_id )[instrument_id].ttg_name);

				$('#' + instrument_id).html( `
					<td> ${getEquityByInstrumentId( instrument_id )[instrument_id].ttg_name } </td> 
					<td> ${formatted_date} </td> 
					<td> ${close} </td> 
				` );
			}
		} )
		
		
	}

	const getDollarChange = ( open, close ) => {
		let cal = close - open 
		if(cal < 0) {
			return `<span style="color: red;">${parseFloat(cal).toFixed(2)}</span>`;	
		}
		return `<span style="color: green;">${parseFloat(cal).toFixed(2)}</span>`;	
	}

	const getPercentChange = (open, close) => {
		// =[|(180-240)|/(180+240)/2]× 100
		// let perc_diff = ( (close - open) /  ( (close + open) / 2) ) * 100;
		let perc_diff = ((close - open) / open ) * 100;
		perc_diff = parseFloat(perc_diff).toFixed(2);
		if(perc_diff < 0) {
			return `<span style="color: red;">${perc_diff}%</span>`;	
		}

		return `<span style="color: green;">${perc_diff}%</span>`;	
	}

	const getUrlVars = () => {
	    var vars = {};
	    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
	        vars[key] = value;
	    });
    	return vars;
	}

</script>




<script type="text/javascript">

    window.addEventListener("load", function() {
        // create websocket instance
        // var ws = new WebSocket("ws://localhost:8005/stream/futures"); 
        var ws = new WebSocket("wss://api.truetradinggroup.com/stream/futures");

        ws.addEventListener("open", (event) => {
  			console.log('We are connected!', event);
		});

		ws.addEventListener("message", (e) =>{
			console.log( e.data );
			
			const data = formatToJson(e.data);
			console.log( data );
			appendMultipleDays(data,'s', true);
		});

		addEventListener("close", (event) => {
			console.log('Connection closed');
		});


    });

    const formatToJson = (data_string) => {
    	data = data_string.replaceAll(`{"hd":`, `,{"hd":`);
    	data = data.replace(`,{"hd":`, `{"hd":`);
    	data = data.replaceAll(/\n/g, " ");
    	data = `[${data}]`;
    	try{
			data = JSON.parse(data);
			return data;
    	}catch(err){
    		console.log('Disregard Error:', err.message);
    	}
    }


    const snapShotCall = async () => {
		// Call api snapshot
		try{
			const snapshot_call = await axios({
				method: 'get',
				// url: 'http://localhost:8005/api/databento/snapshot'
                url: 'https://api.truetradinggroup.com/api/databento/snapshot'
			});
			const {data} = snapshot_call.data;
			
			console.log('data', data);

			data.map( (d, index)  => {
				
				const instrument_id = d.hd.instrument_id;

				let close = ( (d.close/10000000)/100 ).toFixed(4);
				close = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol', minimumSignificantDigits: 2, minimumFractionDigits: 4  }).format( close );


				$('#' + instrument_id).html( `
						<td> ${getEquityByInstrumentId( instrument_id )[instrument_id].ttg_name } </td> 
						<td> ${formatDate(d.hd.ts_event)} </td> 
						<td> ${close} </td> 
				` );
			})

			console.log('snapshot_call', snapshot_call.data);
		}catch(err){
			console.log('err', err);
		}
	}

	snapShotCall();

</script>

<section>
	<div class="container-fluid">
		<div class="row">
			
			<div class="col-12 p-0">
				<div class="futuresWidget1">	
					<!-- <h3>Realtime Futures Data</h3> -->
					<table class="table">
						<thead>
							<tr>
								<th>Ticker</th>
								<th>Date(m/d/y time)</th>
								<!-- <th>Open</th>
								<th>High</th>
								<th>Low</th> -->
								<th>Current Price</th>
								<!-- <th>Volume</th> -->
								<!-- <th>$ Ch</th>
								<th>% Ch</th> -->
							</tr>
						</thead>

						<tbody class="tableBodyLive">
							<tr id="5602"></tr>
							<tr id="10"></tr>
							<tr id="669"></tr>
							<tr id="4122"></tr>
							<tr id="42004501"></tr>
							<tr id="42035227"></tr>
							<tr id="132673"></tr>
							<tr id="13804"></tr>
							<tr id="13743"></tr>
							<tr id="320510"></tr>
							<tr id="42004286"></tr>
							<tr id="123163"></tr>
							<tr id="25912"></tr>
							<tr id="7128"></tr>
							<tr id="74067"></tr>
							<tr id="80420"></tr>
						</tbody>
						
					</table>
				</div>
			</div>
			
		</div>
	</div> 
</section>{"id":104812,"date":"2024-01-08T10:40:35","date_gmt":"2024-01-08T15:40:35","guid":{"rendered":"https:\/\/truetradinggroup.com\/?page_id=104812"},"modified":"2024-01-08T10:40:35","modified_gmt":"2024-01-08T15:40:35","slug":"test-8","status":"publish","type":"page","link":"https:\/\/truetradinggroup.com\/announce-ending\/test-8\/","title":{"rendered":"Test"},"content":{"rendered":"\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":812,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":"","_members_access_role":[],"_members_access_error":""},"class_list":["post-104812","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.2 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Test - True Trading Group<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/truetradinggroup.com\/announce-ending\/test-8\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Test\" \/>\n<meta property=\"og:url\" content=\"https:\/\/truetradinggroup.com\/announce-ending\/test-8\/\" \/>\n<meta property=\"og:site_name\" content=\"True Trading Group\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/truetradegroup\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@truetradinggrp\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/test-8\\\/\",\"url\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/test-8\\\/\",\"name\":\"Test - True Trading Group\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/#website\"},\"datePublished\":\"2024-01-08T15:40:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/test-8\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/test-8\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/test-8\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Test\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/#website\",\"url\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/\",\"name\":\"True Trading Group\",\"description\":\"Learn. Trade. Profit\",\"publisher\":{\"@id\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/#organization\"},\"alternateName\":\"TTG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/#organization\",\"name\":\"True Trading Group, LLC\",\"alternateName\":\"True Trading Group\",\"url\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/truetradinggroup.com\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/truetradinggroup-logo.png\",\"contentUrl\":\"https:\\\/\\\/truetradinggroup.com\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/truetradinggroup-logo.png\",\"width\":696,\"height\":696,\"caption\":\"True Trading Group, LLC\"},\"image\":{\"@id\":\"https:\\\/\\\/truetradinggroup.com\\\/announce-ending\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/truetradegroup\",\"https:\\\/\\\/x.com\\\/truetradinggrp\",\"https:\\\/\\\/www.instagram.com\\\/truetradinggroup\",\"https:\\\/\\\/www.youtube.com\\\/@TrueTradingGroup?sub_confirmation=1\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Test - True Trading Group","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/truetradinggroup.com\/announce-ending\/test-8\/","og_locale":"en_US","og_type":"article","og_title":"Test","og_url":"https:\/\/truetradinggroup.com\/announce-ending\/test-8\/","og_site_name":"True Trading Group","article_publisher":"https:\/\/www.facebook.com\/truetradegroup","twitter_card":"summary_large_image","twitter_site":"@truetradinggrp","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/truetradinggroup.com\/announce-ending\/test-8\/","url":"https:\/\/truetradinggroup.com\/announce-ending\/test-8\/","name":"Test - True Trading Group","isPartOf":{"@id":"https:\/\/truetradinggroup.com\/announce-ending\/#website"},"datePublished":"2024-01-08T15:40:35+00:00","breadcrumb":{"@id":"https:\/\/truetradinggroup.com\/announce-ending\/test-8\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/truetradinggroup.com\/announce-ending\/test-8\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/truetradinggroup.com\/announce-ending\/test-8\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/truetradinggroup.com\/announce-ending\/"},{"@type":"ListItem","position":2,"name":"Test"}]},{"@type":"WebSite","@id":"https:\/\/truetradinggroup.com\/announce-ending\/#website","url":"https:\/\/truetradinggroup.com\/announce-ending\/","name":"True Trading Group","description":"Learn. Trade. Profit","publisher":{"@id":"https:\/\/truetradinggroup.com\/announce-ending\/#organization"},"alternateName":"TTG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/truetradinggroup.com\/announce-ending\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/truetradinggroup.com\/announce-ending\/#organization","name":"True Trading Group, LLC","alternateName":"True Trading Group","url":"https:\/\/truetradinggroup.com\/announce-ending\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/truetradinggroup.com\/announce-ending\/#\/schema\/logo\/image\/","url":"https:\/\/truetradinggroup.com\/wp-content\/uploads\/2023\/10\/truetradinggroup-logo.png","contentUrl":"https:\/\/truetradinggroup.com\/wp-content\/uploads\/2023\/10\/truetradinggroup-logo.png","width":696,"height":696,"caption":"True Trading Group, LLC"},"image":{"@id":"https:\/\/truetradinggroup.com\/announce-ending\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/truetradegroup","https:\/\/x.com\/truetradinggrp","https:\/\/www.instagram.com\/truetradinggroup","https:\/\/www.youtube.com\/@TrueTradingGroup?sub_confirmation=1"]}]}},"_links":{"self":[{"href":"https:\/\/truetradinggroup.com\/announce-ending\/wp-json\/wp\/v2\/pages\/104812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/truetradinggroup.com\/announce-ending\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/truetradinggroup.com\/announce-ending\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/truetradinggroup.com\/announce-ending\/wp-json\/wp\/v2\/users\/812"}],"replies":[{"embeddable":true,"href":"https:\/\/truetradinggroup.com\/announce-ending\/wp-json\/wp\/v2\/comments?post=104812"}],"version-history":[{"count":1,"href":"https:\/\/truetradinggroup.com\/announce-ending\/wp-json\/wp\/v2\/pages\/104812\/revisions"}],"predecessor-version":[{"id":104813,"href":"https:\/\/truetradinggroup.com\/announce-ending\/wp-json\/wp\/v2\/pages\/104812\/revisions\/104813"}],"wp:attachment":[{"href":"https:\/\/truetradinggroup.com\/announce-ending\/wp-json\/wp\/v2\/media?parent=104812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}