// ==UserScript== // @name BitMex USD Converter // @namespace https://bitmex.com/ // @version 0.12 // @description Get some sanity into your gambling. // @author koinkraft, modified by Jolly // @grant none // @include https://bitmex.com/* // @include https://www.bitmex.com/* // @require https://code.jquery.com/jquery-2.1.4.min.js // @downloadURL https://gist.github.com/AJolly/b45e8f97ef04b11124b2971bcb685c4a/raw/bitmexusd.user.js // @updateURL https://gist.github.com/AJolly/b45e8f97ef04b11124b2971bcb685c4a/raw/bitmexusd.user.js // ==/UserScript== //Updated to show BTC and USD prices in more locations. (function() { 'use strict'; // Script vars let indexPrice = 0; let currentBalance = {total: 0, avail: 0}; // Extract BitMex price const updateIndexPrice = () => { $('.instrument').each(function() { let obj = this; if($(obj).children('.symbol').length > 0 && $(obj).children('.symbol').html() == '.BXBT') { indexPrice = $(obj).children('.price').html(); } }); setTimeout(function() { updateIndexPrice(); }, 1000); }; // Extract Wallet Balance const extractWalletBalance = (callback) => { let balances = currentBalance; $('a[href="/app/wallet"] > span > table > tbody > tr').each(function() { let currentLabel = ''; $(this).children('td').each(function() { if($(this).html() == 'Total' || $(this).html() == 'Avail') { currentLabel = $(this).html(); } else { if(currentLabel == 'Total') { let balanceTotal = formatXBTString($(this).html()); if(balanceTotal !== false) balances.total = balanceTotal; } else if(currentLabel == 'Avail') { let balanceAvail = formatXBTString($(this).html()); if(balanceAvail !== false) balances.avail = balanceAvail; } } }); }); currentBalance = balances; callback(balances); }; // Set USD Wallet Balance const setWalletBalance = (updatedBalances) => { if(updatedBalances.total + ' USD' != $('.balance-usd-total').html()) $('.balance-usd-total').html(updatedBalances.total + ' USD'); if(updatedBalances.avail + ' USD' != $('.balance-usd-avail').html()) $('.balance-usd-avail').html(updatedBalances.avail + ' USD'); }; // Convert XBT String const formatXBTString = (string) => { let parts = string.split(" "); if(parts.length == 2) { if(parts[1] == 'XBT') { return parts[0].replace(",","."); } else if(parts[1] == 'mXBT') { return parts[0].replace(",",".")*0.001; } else if(parts[1] == 'XBt') { return parts[0].replace(".","")*0.00001; } else if(parts[1] == 'μXBT') { return parts[0].replace(".","").replace(",",".")*0.000001; } } return false; }; // Update Wallet Balances const updateWalletBalances = () => { setTimeout(function() { if(indexPrice != 0) { extractWalletBalance(function(balances) { let updatedBalances = {total: (balances.total*indexPrice).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}), avail: (balances.avail*indexPrice).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})}; setWalletBalance(updatedBalances); }); } updateWalletBalances(); }, 1000); }; // Update PNLs const updatePNLs = (setTimeoutCycle) => { if(indexPrice != 0) { // Unrealized PNL $('td.unrealisedPnl').each(function() { let obj = this; let content; let isSpan = false; if($(this).children('div:first-child').children('span').length > 0) { content = $(this).children('div:first-child').children('span:first-child').html(); isSpan = true; } else { content = $(this).children('div:first-child').html(); } let parts = content.split(" "); if(parts[1] == 'XBT' || parts[1] == 'mXBT' || parts[1] == 'XBt' || parts[1] == 'μXBT') { let formatUnrealizedPNL = formatXBTString(parts[0] + ' ' + parts[1]); let unrealizedPNLUSD = (formatUnrealizedPNL*indexPrice).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}); let newDivContent; if(!isSpan) { newDivContent = unrealizedPNLUSD + ' USD | ' + ' BTC ' + formatUnrealizedPNL + ' ' + parts[2]; } else { newDivContent = '' + unrealizedPNLUSD + ' USD | ' + ' BTC ' + formatUnrealizedPNL + ' ' + parts[2] + ''; } if(newDivContent != $(obj).children('div.unrealizedPnlUSD').html()) { $(obj).children('div.unrealizedPnlUSD').html(newDivContent); if(formatUnrealizedPNL*indexPrice < 0) { if(!$(obj).children('div.unrealizedPnlUSD').hasClass('neg')) { $(obj).children('div.unrealizedPnlUSD').addClass('neg').removeClass('pos'); } } else { if(!$(obj).children('div.unrealizedPnlUSD').hasClass('pos')) { $(obj).children('div.unrealizedPnlUSD').addClass('pos').removeClass('neg'); } } } } }); // Realized PNL $('td.combinedRealisedPnl').each(function() { let obj = this; let realizedPNLhover = formatXBTString($(obj).children('.hoverContainer:first-child').children('.hoverVisible').children('.tooltipWrapper').children('span').html()); let realizedPNL = formatXBTString($(obj).children('.hoverContainer:first-child').children('.hoverHidden').children('span').html()); let realizedPNLUSDhoverContent = (realizedPNLhover*indexPrice).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ' USD | BTC ' + realizedPNLhover ; let realizedPNLUSDContent = (realizedPNL*indexPrice).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ' USD | BTC ' + realizedPNL; if($(obj).children('.realizedPNLContainer').children('.hoverVisible').children('.tooltipWrapper').children('span').html() != realizedPNLUSDhoverContent) { $(obj).children('.realizedPNLContainer').children('.hoverVisible').children('.tooltipWrapper').children('span').html(realizedPNLUSDhoverContent); if(realizedPNLhover*indexPrice < 0) { if(!$(obj).children('.realizedPNLContainer').children('.hoverVisible').children('.tooltipWrapper').children('span').hasClass('neg')) { $(obj).children('.realizedPNLContainer').children('.hoverVisible').children('.tooltipWrapper').children('span').addClass('neg').removeClass('pos'); } } else { if(!$(obj).children('.realizedPNLContainer').children('.hoverVisible').children('.tooltipWrapper').children('span').hasClass('pos')) { $(obj).children('.realizedPNLContainer').children('.hoverVisible').children('.tooltipWrapper').children('span').addClass('pos').removeClass('neg'); } } } if($(obj).children('.realizedPNLContainer').children('.hoverHidden').children('span').html() != realizedPNLUSDContent) { $(obj).children('.realizedPNLContainer').children('.hoverHidden').children('span').html(realizedPNLUSDContent); if(realizedPNL*indexPrice < 0) { if(!$(obj).children('.realizedPNLContainer').children('.hoverHidden').children('span').hasClass('neg')) { $(obj).children('.realizedPNLContainer').children('.hoverHidden').children('span').addClass('neg').removeClass('pos'); } } else { if(!$(obj).children('.realizedPNLContainer').children('.hoverHidden').children('span').hasClass('pos')) { $(obj).children('.realizedPNLContainer').children('.hoverHidden').children('span').addClass('pos').removeClass('neg'); } } } }); } if(setTimeoutCycle) { setTimeout(function() { updatePNLs(true); }, 50); } }; // Initialize PNL wrapper const initPNLWrapper = (setTimeoutCycle) => { if($('td.unrealisedPnl').length > 0 && $('.unrealizedPnlUSD').length == 0) { // Unrealized PNL $('td.unrealisedPnl').css('position', 'relative'); $('td.unrealisedPnl > div').css('opacity', '0').css('position','absolute').css('left','0').css('top','0').css('right','0').css('bottom','0'); $('td.unrealisedPnl > div').after('
0.00 USD (0.00%)
'); // Realized PNL $('td.combinedRealisedPnl > .hoverContainer').hide(); $('td.combinedRealisedPnl > .hoverContainer').after('0.00 USD0.00 USD'); } if(setTimeoutCycle) { setTimeout(function() { initPNLWrapper(true); }, 100); } }; // Wait for window to load $(window).load(function() { // Hide BTC balance box $('._1mNCXSUh:first').hide(); $('._2UCMYPbC > ._2wx45MYS:first').hide(); // Init PNL Wrapper initPNLWrapper(true); $(window).resize(function() { initPNLWrapper(false); }); // Insert USD Balance div $('.announcementsDropdown').before('
Total0.00 USD
Avail0.00 USD
'); // Update Functions setInterval(() => { console.log('Updating....'); updateIndexPrice(); updateWalletBalances(); updatePNLs(true); $('td.unrealisedPnl > div').hover(function() { updatePNLs(false); }); }, 30000); }); })();