From bf08fd7cb47fec1791c96ed685e9ca1ca74817f7 Mon Sep 17 00:00:00 2001 From: 2ManyProjects Date: Sun, 11 May 2025 10:54:03 -0500 Subject: [PATCH] multi currency support better logging --- .gitignore | 5 + index.js | 268 ++++ logs/log.txt | 0 logs/output.txt | 0 logs/output2.txt | 0 package-lock.json | 1264 +++++++++++++++++ package.json | 21 + src/LocalStore/ClosedTrades.json | 2255 ++++++++++++++++++++++++++++++ src/LocalStore/OpenTrades.json | 105 ++ src/LocalStore/Settings.json | 38 + testdata.json | 1452 +++++++++++++++++++ utils.js | 530 +++++++ 12 files changed, 5938 insertions(+) create mode 100644 .gitignore create mode 100644 index.js create mode 100644 logs/log.txt create mode 100644 logs/output.txt create mode 100644 logs/output2.txt create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/LocalStore/ClosedTrades.json create mode 100644 src/LocalStore/OpenTrades.json create mode 100644 src/LocalStore/Settings.json create mode 100644 testdata.json create mode 100644 utils.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee39897 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +.env +npm-debug.log +yarn-error.log +.DS_Store \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..063820b --- /dev/null +++ b/index.js @@ -0,0 +1,268 @@ + +const { ToadScheduler, SimpleIntervalJob, AsyncTask } = require('toad-scheduler'); + +const { + settings, + transferProfit, + saveProfit, + getAllClosedOrders, + getAllOpenOrders, + getOpenOrder, + monitorOrderComplete, + calculateAdaptiveTargets, + sleep, + placeSellOrder, + placeBuyOrder, + evaluateMarketConditions, + getAvailableUSDBalance, + getHistoricalData, + readJsonFile, + writeJsonFile, + settingsFile, + getCurrencyInfo, + openTradesFile, + closedTradesFile, + setTradingCurrency, + setCurrencyInfo, + manageStaleOrders, + shuffle, + syncSettings +} = require("./utils") + +async function monitorAndPlace(currencyData, usdAllocatedBalance, currency) { + let CURRENCY_INFO = currencyData; + // const settings = readJsonFile(settingsFile); + // console.log(tradingCurrency + 'USD', CURRENCY_INFO) + let openTrades = readJsonFile(openTradesFile); + if (!settings) return {openTrades, removedIds: []}; + + let closedTrades = await getAllClosedOrders(); + // console.log("closedTrades", JSON.stringify(closedTrades, null, 4)) + // return + const pair = currency.tradingCurrency + 'USD'; + let candleQuant = 16; + const marketCondition = await evaluateMarketConditions(pair); + const averageLow = (await getHistoricalData(pair, 15)).slice(-candleQuant).reduce((acc, candle) => acc + parseFloat(candle[3]), 0) / candleQuant; + const availableUSD = usdAllocatedBalance; + let removedIds = []; + if(availableUSD <= 0){ + console.log("Insufficient / error reaching funds") + return {openTrades, removedIds: []} + } + const balance = availableUSD * settings.maximumOrderSize; + let oTrades = await getAllOpenOrders(false); + for(let x = 0; x < Object.keys(oTrades).length; x++){ + let id = Object.keys(oTrades)[x]; + let sellid = null; + let trade = oTrades[id]; + //make sure we are only working with orders for this pair + if(!(trade.descr.pair === pair || trade.descr.pair === currency?.compPair)){ + continue; + } + if(trade.descr.type === 'sell'){ + //find original buying order + sellid = id; + console.log("id ", id); + let buyingOrder = Object.entries(openTrades).find(itemArr => itemArr[1].sellid === id) + if(!buyingOrder){ + console.log("Unable to find local trade") + continue; + } + id = buyingOrder[1].id; + console.log(buyingOrder) + openTrades[id].sellid = sellid; + } + let localTrade = openTrades[id]; + if(!localTrade){ + openTrades[id] = { + ...openTrades[id], + id: id, + userref: trade.userref, + pair: pair, + starttimestamp: new Date().toISOString(), + type: trade.descr.type, + status: trade.status, + ordertype: trade.descr.ordertype, + volume: trade.vol, + } + console.log(typeof trade.descr.price) + if(trade.descr.type === 'sell'){ + openTrades[id].sellprice = Number(trade.descr.price).toFixed(CURRENCY_INFO.pair_decimals); + }else { + openTrades[id].price = Number(trade.descr.price).toFixed(CURRENCY_INFO.pair_decimals); + } + // writeJsonFile(openTradesFile, openTrades); + } + } + let allIds = Object.keys(openTrades); + for(let x = 0; x < allIds.length; x++){ + let id = allIds[x]; + console.log(id); + + let trade = oTrades[id]; + let localTrade = openTrades[id]; + let closedTrade = closedTrades[id]; + // console.log("trade", localTrade) + if(!(localTrade.pair === pair || localTrade.pair === currency?.compPair)){ + continue; + } + + await calculateAdaptiveTargets(pair, settings.profitTargetPercent, settings.stopLossPercentage, riskRewardRatio = 10) + if(localTrade.type === 'buy'){ + if(['pending', 'open', 'closed'].includes(closedTrade?.status) || ['pending', 'open', 'closed'].includes(localTrade.status)){ + if(closedTrade?.status === 'closed' || localTrade.status === 'closed'){ + console.log('Buy order completed:', localTrade); + const sellPrice = parseFloat(localTrade.price) * (1 + settings.profitTargetPercent); + const stopLoss = parseFloat(localTrade.price) * (1 - settings.stopLossPercentage); + const sellOrder = await placeSellOrder(pair, localTrade.volume, sellPrice, stopLoss, localTrade.userref, localTrade.id, localTrade); + if(sellOrder){ + openTrades[localTrade.id] = sellOrder; + console.log('Sell order placed:', sellOrder); + } + // writeJsonFile(openTradesFile, openTrades); + } + }else { + console.log("Buy order expired or cancelled, clearing from local list") + //order expired or cancelled, whipe from list + delete openTrades[id]; + removedIds.push(id) + // writeJsonFile(openTradesFile, openTrades); + } + }else{ + localTrade = openTrades[id]; //originalBuyTrade + trade = oTrades[localTrade.sellid]; //openselltrade + closedTrade = closedTrades[localTrade.sellid]; //potentially closed sell trade + if(['pending', 'open', 'closed'].includes(closedTrade?.status) || ['pending', 'open', 'closed'].includes(trade.status)){ + if(closedTrade?.status === 'closed' || trade.status === 'closed'){ + let sellOrder = {...openTrades[localTrade.id]}; + console.log('Sell order completed:', sellOrder); + delete openTrades[sellOrder.id]; + removedIds.push(sellOrder.id) + // writeJsonFile(openTradesFile, openTrades); + const sellPrice = parseFloat(localTrade.sellprice) + + const closedTrades = readJsonFile(closedTradesFile); + const buyTotal = parseFloat(localTrade.price) * localTrade.volume; + const sellTotal = sellPrice * localTrade.volume; + const transactionFees = (settings.transactionFeePercent) * (buyTotal + sellTotal); + const profit = sellTotal - buyTotal - transactionFees; + console.log('Sell order Profit:', profit); + + if (settings.profitWallet && settings.profitSavePercent) { + const profitSaveAmount = profit * (settings.profitSavePercent); + console.log('Saving Profit:', profitSaveAmount); + await saveProfit(profitSaveAmount, profit); + } + + closedTrades[sellOrder.id] = { + ...sellOrder, + sellPrice, + volume: localTrade.volume, + profit, + timestamp: new Date().toISOString(), + }; + writeJsonFile(closedTradesFile, closedTrades); + //transfer profits and write to closedTrades.json + + } + }else { + //order expired or cancelled, whipe from list + console.log("Sell order expired or cancelled, clearing from local list") + console.log("trade", trade) + console.log("localTrade", localTrade) + console.log("closedTrade", closedTrade) + console.log("closedTrades", JSON.stringify(closedTrades, null, 4)) + + delete openTrades[id]; + removedIds.push(id) + // writeJsonFile(openTradesFile, openTrades); + } + } + } + + oTrades = await getAllOpenOrders(false); + let openTradeIds = Object.keys(oTrades); + let priceRangeExclusion = settings.priceRangeExclusion; + let excludeBasedOnPrevOrder = []; + for(let x = 0; x < openTradeIds.length; x++){ + + let id = openTradeIds[x]; + let trade = oTrades[id]; + if(!(trade.descr.pair === pair || trade.descr.pair === currency?.compPair)){ + continue; + } + let price = parseFloat(trade.descr.price); + let diffPer = Math.abs(price - averageLow) / averageLow; + // console.log(`DIff Percentage ${diffPer} ${price} ${averageLow}`) + if(diffPer < priceRangeExclusion){ + excludeBasedOnPrevOrder.push(id); + } + if(excludeBasedOnPrevOrder.length >= settings.priceRangeExclusionMaxOpen){ + break; + } + } + if(excludeBasedOnPrevOrder.length >= settings.priceRangeExclusionMaxOpen){ + console.log('Excluding based on open orders: ', excludeBasedOnPrevOrder.join(", ")) + + return {openTrades, removedIds} + } + console.log(` Attempting to place buy order for ${balance} USD worth of ${currency.tradingCurrency} at ${averageLow} USD = ${balance / averageLow} ${currency.tradingCurrency}`); + + + if (marketCondition) { + const buyOrder = await placeBuyOrder(pair, balance / averageLow, averageLow); + if (buyOrder) { + console.log('Buy order placed:', buyOrder); + openTrades[buyOrder.id] = {...buyOrder}; + // writeJsonFile(openTradesFile, openTrades); + } + } + + return {openTrades, removedIds} +} + +async function cycleCurrencies(){ + let builtCurriencies = []; + let settings = syncSettings(); + for(let x = 0; x < settings.tradingCurrencies.length; x++){ + let currency = settings.tradingCurrencies[x]; + let CURRENCY_INFO = await getCurrencyInfo(currency.tradingCurrency); + const availableUSD = await getAvailableUSDBalance(currency.allocation) + builtCurriencies.push({CURRENCY_INFO, availableUSD, currency}); + } + shuffle(builtCurriencies); + let trades = readJsonFile(openTradesFile); + for(let x = 0; x < builtCurriencies.length; x++){ + console.log("*********************************************") + console.log("*********************************************") + console.log("***************TRADING***********************") + console.log("*********************************************") + console.log(`*****************${builtCurriencies[x].currency.tradingCurrency}*************************`) + console.log("*********************************************") + console.log("*********************************************") + console.log("*********************************************") + setTradingCurrency(builtCurriencies[x].currency.tradingCurrency); + setCurrencyInfo(builtCurriencies[x].CURRENCY_INFO); + + let {openTrades, removedIds} = await monitorAndPlace(builtCurriencies[x].CURRENCY_INFO, builtCurriencies[x].availableUSD, builtCurriencies[x].currency); + trades = {...trades, ...openTrades}; + for(let i = 0; i < removedIds.length; i++){ + delete trades[removedIds[i]] + } + writeJsonFile(openTradesFile, trades); + } + await manageStaleOrders(); +} +const scheduler = new ToadScheduler(); + +const task = new AsyncTask('monitor and place orders', cycleCurrencies, (err) => { + console.error('Error in scheduled task:', err); +}); + +cycleCurrencies(); + +const job = new SimpleIntervalJob({ [settings.tradingIntervalType]: settings.tradingInterval }, task); +scheduler.addSimpleIntervalJob(job); + +console.log('Trading bot is running.'); + diff --git a/logs/log.txt b/logs/log.txt new file mode 100644 index 0000000..e69de29 diff --git a/logs/output.txt b/logs/output.txt new file mode 100644 index 0000000..e69de29 diff --git a/logs/output2.txt b/logs/output2.txt new file mode 100644 index 0000000..e69de29 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ae9633e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1264 @@ +{ + "name": "simpletrader", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bin-build": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "requires": { + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" + }, + "dependencies": { + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==", + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + }, + "bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "crc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", + "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==" + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==" + } + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" + }, + "download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + } + } + }, + "duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + } + } + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "requires": { + "pend": "~1.2.0" + } + }, + "ffish-es6": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/ffish-es6/-/ffish-es6-0.7.7.tgz", + "integrity": "sha512-XSKZDq8ioM6f4/Qhk2XqxlCpxh6avWHUnvsh/0+QStoMjiKHLrG0+P18WJ1HKlLhLf8KgIxYI0law8WjH/XRtA==" + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==" + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" + }, + "form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "requires": { + "npm-conf": "^1.1.0" + } + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + } + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==" + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "requires": { + "is-invalid-path": "^0.1.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "requires": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + } + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "node-downloader-helper": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz", + "integrity": "sha512-FSvAol2Z8UP191sZtsUZwHIN0eGoGue3uEXGdWIH5228e9KH1YHXT7fN8Oa33UGf+FbqGTQg3sJfrRGzmVCaJA==" + }, + "node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "optional": true + }, + "node-jq": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-jq/-/node-jq-4.4.0.tgz", + "integrity": "sha512-L9FC47dT/nT0wCLn7K/xNdFd4N0uLsfHBZaAGdQr2ViledRnohnX9dLhVWVtN0iT0pFzjHL7fyJUt3RCW1woYw==", + "requires": { + "bin-build": "^3.0.0", + "is-valid-path": "^0.1.1", + "joi": "^17.4.0", + "node-downloader-helper": "^2.1.6", + "strip-final-newline": "^2.0.0", + "tempfile": "^3.0.0" + } + }, + "node-kraken-api": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/node-kraken-api/-/node-kraken-api-2.2.2.tgz", + "integrity": "sha512-f+BZpgT1gD9705hlsRDDGj9m96Psb0Gxu3Td/P2fs0/gFy58YQONrTPiqfYzOBxvpmYnuAMxCRuRmdmkw04eRw==", + "requires": { + "bufferutil": "^4.0.6", + "crc": "^4.1.0", + "ts-ev": "^0.4.0", + "utf-8-validate": "^5.0.9", + "ws": "^8.5.0" + } + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "requires": { + "path-key": "^2.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", + "requires": { + "p-timeout": "^1.1.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + }, + "p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==", + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==" + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "requires": { + "p-finally": "^1.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "requires": { + "pinkie": "^2.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "requires": { + "side-channel": "^1.0.6" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "requires": { + "commander": "^2.8.1" + } + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "requires": { + "sort-keys": "^1.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==" + }, + "tempfile": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-3.0.0.tgz", + "integrity": "sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==", + "requires": { + "temp-dir": "^2.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "toad-scheduler": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/toad-scheduler/-/toad-scheduler-1.6.1.tgz", + "integrity": "sha512-UjNerGmJIp72lt1d6wtGZUdgzgYFM9xVJBeDJzCLOVIHbrf8c6e3iq6rswRV/8/KA8WJLUuH71LYu96yoXgNRQ==" + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "ts-ev": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/ts-ev/-/ts-ev-0.4.0.tgz", + "integrity": "sha512-rLX6QdkC1/jA9sS4y9/DxHABTcOussp33J90h+TxHmya9CWvbGc9uLqdM4c/N4pNRmSdtq9zqhz7sB9KcN1NFQ==" + }, + "ts-kraken": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/ts-kraken/-/ts-kraken-4.0.4.tgz", + "integrity": "sha512-5LtBI5Up2+kPmMvvbvlRvFdlSqCIqw55VyonGq7a2ag/I6ZH6lZCLfX4eF0ZhNNgOJTEixtrpve8pcY9YzjIbg==", + "requires": { + "axios": "^1.1.3", + "chalk": "^4.1.2", + "dotenv": "^16.0.3", + "node-jq": "^4.2.2", + "qs": "^6.11.0", + "rxjs": "^7.8.1", + "ws": "^8.10.0" + } + }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==" + }, + "utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4e29ae2 --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "simpletrader", + "version": "1.0.0", + "description": "A trading bot for Nano cryptocurrency on Kraken Pro.", + "main": "index.js", + "scripts": { + "start": "node index.js" + }, + "dependencies": { + "axios": "^1.3.0", + "dotenv": "^16.0.0", + "ffish-es6": "^0.7.7", + "node-kraken-api": "^2.2.2", + "toad-scheduler": "^1.0.0", + "ts-kraken": "^4.0.4", + "uuid": "^9.0.0", + "ws": "^8.0.0" + }, + "author": "Me", + "license": "ISC" +} diff --git a/src/LocalStore/ClosedTrades.json b/src/LocalStore/ClosedTrades.json new file mode 100644 index 0000000..a0709cd --- /dev/null +++ b/src/LocalStore/ClosedTrades.json @@ -0,0 +1,2255 @@ +{ + "OQHZY5-QZD4R-EQHEUT": { + "id": "OQHZY5-QZD4R-EQHEUT", + "userref": 1729732368, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.833711", + "volume": 6.3704991121018635, + "sellid": "OIZFMY-PI5FU-F6ZBYM", + "sellprice": "0.858722", + "stopprice": 0.70865435, + "sellPrice": 0.85872233, + "profit": 0.11620598159761206, + "timestamp": "2024-10-25T00:16:30.593Z" + }, + "O5VWPQ-A4GAW-QGW4N5": { + "id": "O5VWPQ-A4GAW-QGW4N5", + "userref": 1729815391, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.839788", + "volume": 6.376388074364051, + "sellid": "OW5HQZ-NXEO3-FKZ2Y6", + "sellprice": "0.864982", + "stopprice": 0.7138198, + "sellPrice": 0.864982, + "profit": 0.1171656207553945, + "timestamp": "2024-10-29T04:07:27.901Z" + }, + "OSKNGJ-ZH4PU-RQJ5ZD": { + "id": "OSKNGJ-ZH4PU-RQJ5ZD", + "userref": 1729459593, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.854672", + "volume": 5.1, + "sellid": "O7DIGR-7YBML-XLLGQE", + "sellprice": "0.880312", + "stopprice": 0.7264712, + "sellPrice": 0.880312, + "profit": 0.0953703264000001, + "timestamp": "2024-10-29T08:37:27.970Z" + }, + "OXEJ6T-SXISY-JQBXPO": { + "id": "OXEJ6T-SXISY-JQBXPO", + "userref": 1729673046, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.857341", + "volume": 13.796011274387162, + "sellid": "O7LBHB-23QJD-GOVMNW", + "status": "open", + "sellprice": "0.883061", + "stopprice": 0.72873985, + "sellPrice": 0.883061, + "profit": 0.25879098752137336, + "timestamp": "2024-10-29T08:37:28.011Z" + }, + "OFIA4Z-DE63D-7JQCL7": { + "id": "OFIA4Z-DE63D-7JQCL7", + "userref": 1729676646, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.853874", + "volume": 9.288358703977401, + "sellid": "OY67AD-E2YDU-DAERBX", + "status": "open", + "sellprice": "0.879490", + "stopprice": 0.7257929, + "sellPrice": 0.87949, + "profit": 0.17353017017484018, + "timestamp": "2024-10-29T08:37:28.053Z" + }, + "O2PNGW-B5MCX-NNQDJV": { + "id": "O2PNGW-B5MCX-NNQDJV", + "userref": 1730666889, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.766444", + "volume": 8.369642540085707, + "sellid": "OGRVVF-LHPUS-T7Q4HT", + "sellprice": "0.789437", + "stopprice": 0.6514774, + "sellPrice": 0.789437, + "profit": 0.14035451970454668, + "timestamp": "2024-11-05T14:48:15.076Z" + }, + "OU577T-6KUFQ-N2NYLO": { + "id": "OU577T-6KUFQ-N2NYLO", + "userref": 1730176648, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.808040", + "volume": 6.6981229640704445, + "sellid": "OPG4JU-6CQGH-VGHON5", + "sellprice": "0.832281", + "stopprice": 0.686834, + "sellPrice": 0.832281, + "profit": 0.11842091173784372, + "timestamp": "2024-11-06T03:18:17.612Z" + }, + "OLAB42-Q4XAH-WT4VWA": { + "id": "OLAB42-Q4XAH-WT4VWA", + "userref": 1730333249, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.862849", + "volume": 15.821698755845649, + "sellid": "OU7GD7-VVOFE-NDSZCW", + "sellprice": "0.888734", + "stopprice": 0.7334216499999999, + "sellPrice": 0.888734, + "profit": 0.29869259800762465, + "timestamp": "2024-11-07T03:45:59.960Z" + }, + "O7EVL6-63BO4-D5WP5B": { + "id": "O7EVL6-63BO4-D5WP5B", + "userref": 1729469226, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.881333", + "volume": 5.1, + "sellid": "OFAAMA-JA4EV-EFFENE", + "sellprice": "0.907773", + "stopprice": 0.74913305, + "sellPrice": 0.907773, + "profit": 0.0983462375999993, + "timestamp": "2024-11-13T04:50:40.647Z" + }, + "OT3OMU-QIGIB-UW56F3": { + "id": "OT3OMU-QIGIB-UW56F3", + "userref": 1729556028, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.873884", + "volume": 5.1, + "sellid": "O5N3SR-UCXXU-3RULCA", + "sellprice": "0.900101", + "stopprice": 0.7428014, + "sellPrice": 0.900101, + "profit": 0.09751740600000028, + "timestamp": "2024-11-13T04:50:40.648Z" + }, + "OPYXOF-NMHG4-XUHIQH": { + "id": "OPYXOF-NMHG4-XUHIQH", + "userref": 1730938701, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.832529", + "volume": 9.971831067717071, + "sellid": "ORSN2G-RB2D2-XUTBXC", + "sellprice": "0.857505", + "stopprice": 0.7076496499999999, + "sellPrice": 0.857505, + "profit": 0.18164551856050964, + "timestamp": "2024-11-13T11:20:42.442Z" + }, + "OYTZIP-OOPAO-JAILO4": { + "id": "OYTZIP-OOPAO-JAILO4", + "userref": 1731496842, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.840924", + "volume": 25.211891789683442, + "sellid": "OA7GOT-WAAZA-HS326D", + "sellprice": "0.866152", + "stopprice": 0.7147854, + "sellPrice": 0.866152, + "profit": 0.4638911445150748, + "timestamp": "2024-11-14T05:20:44.887Z" + }, + "OZGV6J-AS7TF-QKAB3B": { + "id": "OZGV6J-AS7TF-QKAB3B", + "userref": 1731561645, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.833864", + "volume": 25.63376050181133, + "sellid": "OY573N-KLSNL-YSHTVD", + "sellprice": "0.858880", + "stopprice": 0.7087844, + "sellPrice": 0.85888, + "profit": 0.4676885755657997, + "timestamp": "2024-11-15T07:20:49.167Z" + }, + "OWNZL5-DEVCF-7SI5PM": { + "id": "OWNZL5-DEVCF-7SI5PM", + "userref": 1731883767, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.930410", + "volume": 66.67124630658729, + "sellid": "OGU6S2-GPCLW-YUUYFI", + "status": "open", + "sellprice": "0.939714", + "stopprice": 0.7908485, + "sellPrice": 0.939714, + "profit": 0.12157528432505277, + "timestamp": "2024-11-18T03:55:48.303Z" + }, + "O2FWZY-G3E7Z-QRHISA": { + "id": "O2FWZY-G3E7Z-QRHISA", + "userref": 1731902148, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.934327", + "starttimestamp": "2024-11-18T03:55:49.543Z", + "volume": 21.179040312294802, + "sellid": "OVNGMU-KXJLQ-A2IQ5S", + "sellprice": "0.943670", + "stopprice": 0.79417795, + "startselltimestamp": "2024-11-18T04:55:48.880Z", + "sellPrice": 0.94367, + "profit": 0.038779076960297476, + "timestamp": "2024-11-18T05:30:49.183Z" + }, + "OTLXOO-XFCNA-KFUZ7D": { + "id": "OTLXOO-XFCNA-KFUZ7D", + "userref": 1731902448, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.935389", + "starttimestamp": "2024-11-18T04:00:49.462Z", + "volume": 14.808106842589307, + "sellid": "O7OEV5-DPTRQ-UC5BRI", + "sellprice": "0.944743", + "stopprice": 0.79508065, + "startselltimestamp": "2024-11-18T04:55:49.320Z", + "sellPrice": 0.944743, + "profit": 0.027150249268895824, + "timestamp": "2024-11-18T05:30:49.184Z" + }, + "OJIL7X-YDNUD-T3JPH5": { + "id": "OJIL7X-YDNUD-T3JPH5", + "userref": 1731902748, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.935429", + "starttimestamp": "2024-11-18T04:05:49.390Z", + "volume": 10.365240842867893, + "sellid": "OODGHI-BILDV-BV3ANK", + "sellprice": "0.944783", + "stopprice": 0.7951146499999999, + "startselltimestamp": "2024-11-18T04:55:49.767Z", + "sellPrice": 0.944783, + "profit": 0.01900106198158527, + "timestamp": "2024-11-18T05:30:49.185Z" + }, + "OEPEE4-FTWQG-N3PXYR": { + "id": "OEPEE4-FTWQG-N3PXYR", + "userref": 1731907849, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.939299", + "starttimestamp": "2024-11-18T05:30:50.606Z", + "volume": 21.135436627063235, + "sellid": "OX4FJD-TQSMF-YJD3WL", + "sellprice": "0.948692", + "stopprice": 0.79840415, + "startselltimestamp": "2024-11-18T05:35:50.333Z", + "sellPrice": 0.948692, + "profit": 0.038911099706142704, + "timestamp": "2024-11-18T07:20:51.036Z" + }, + "OO4YJS-NK3VR-2XVR2X": { + "id": "OO4YJS-NK3VR-2XVR2X", + "userref": 1731908151, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.939299", + "starttimestamp": "2024-11-18T05:35:52.752Z", + "volume": 14.778661619984543, + "sellid": "OYEAWZ-57JBU-5TSWRW", + "status": "open", + "sellprice": "0.948692", + "stopprice": 0.79840415, + "startselltimestamp": "2024-11-18T05:40:51.305Z", + "sellPrice": 0.948692, + "profit": 0.02720804807420929, + "timestamp": "2024-11-18T07:20:51.037Z" + }, + "OAQEMD-7RZTD-RUATI5": { + "id": "OAQEMD-7RZTD-RUATI5", + "userref": 1731913851, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.936390", + "starttimestamp": "2024-11-18T07:10:52.445Z", + "volume": 7.259301811198293, + "sellid": "OW54ZC-BS2PE-LMTQX6", + "sellprice": "0.945754", + "stopprice": 0.7959314999999999, + "startselltimestamp": "2024-11-18T08:40:52.645Z", + "sellPrice": 0.945754, + "profit": 0.013323896767516663, + "timestamp": "2024-11-18T08:50:52.631Z" + }, + "OK7S2H-A2WNP-JHDEUH": { + "id": "OK7S2H-A2WNP-JHDEUH", + "userref": 1731914750, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.936472", + "starttimestamp": "2024-11-18T07:25:51.967Z", + "volume": 13.370773090790227, + "sellid": "OLFH6C-JBEZ2-3YBCD6", + "sellprice": "0.945837", + "stopprice": 0.7960012, + "startselltimestamp": "2024-11-18T08:40:53.074Z", + "sellPrice": 0.945837, + "profit": 0.0245455838922429, + "timestamp": "2024-11-18T08:50:52.632Z" + }, + "OJXLAO-XEHM3-QUSWTT": { + "id": "OJXLAO-XEHM3-QUSWTT", + "userref": 1731914451, + "pair": "NANOUSD", + "starttimestamp": "2024-11-18T07:30:50.962Z", + "type": "sell", + "status": "open", + "ordertype": "limit", + "volume": "19.09378221", + "price": "0.936846", + "sellid": "OCXM6D-T2S2I-CBXDIC", + "sellprice": "0.946214", + "stopprice": 0.7963191, + "startselltimestamp": "2024-11-18T08:40:53.522Z", + "sellPrice": 0.946214, + "profit": 0.03505160162982987, + "timestamp": "2024-11-18T08:50:52.632Z" + }, + "ORPZNY-WNL6K-ARG6BR": { + "id": "ORPZNY-WNL6K-ARG6BR", + "userref": 1731919852, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.936718", + "starttimestamp": "2024-11-18T08:50:54.406Z", + "volume": 21.332516223782562, + "sellid": "OIQZNQ-ZDRFM-CQPZYD", + "sellprice": "0.946085", + "stopprice": 0.7962103, + "startselltimestamp": "2024-11-18T08:55:52.736Z", + "sellPrice": 0.946085, + "profit": 0.03916197729342294, + "timestamp": "2024-11-18T10:50:54.204Z" + }, + "OPUBQJ-LBLKW-GSHSGB": { + "id": "OPUBQJ-LBLKW-GSHSGB", + "userref": 1731920153, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.936718", + "starttimestamp": "2024-11-18T08:55:54.118Z", + "volume": 14.916530233073392, + "sellid": "O6IMJ3-EWBIL-MPEC5S", + "sellprice": "0.946085", + "stopprice": 0.7962103, + "startselltimestamp": "2024-11-18T09:10:52.898Z", + "sellPrice": 0.946085, + "profit": 0.027383587203512277, + "timestamp": "2024-11-18T10:50:54.205Z" + }, + "OVFMFB-UPPWJ-CENM3R": { + "id": "OVFMFB-UPPWJ-CENM3R", + "userref": 1731920452, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.936482", + "starttimestamp": "2024-11-18T09:00:53.772Z", + "volume": 10.444199127775365, + "sellid": "OGY4IR-HO5PT-YZO76L", + "sellprice": "0.945847", + "stopprice": 0.7960097, + "startselltimestamp": "2024-11-18T09:10:53.384Z", + "sellPrice": 0.945847, + "profit": 0.01917224923167045, + "timestamp": "2024-11-18T10:50:54.205Z" + }, + "OCER6S-4NLEV-3JSY4G": { + "id": "OCER6S-4NLEV-3JSY4G", + "userref": 1731920752, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.936482", + "starttimestamp": "2024-11-18T09:05:53.787Z", + "volume": 7.3109398099974054, + "sellid": "OOBYHW-3O3ZB-3KLYPC", + "sellprice": "0.945847", + "stopprice": 0.7960097, + "startselltimestamp": "2024-11-18T09:10:53.826Z", + "sellPrice": 0.945847, + "profit": 0.013420575234175322, + "timestamp": "2024-11-18T10:50:54.206Z" + }, + "OJFDWO-C766Z-CNDOM7": { + "id": "OJFDWO-C766Z-CNDOM7", + "userref": 1731922253, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.933874", + "starttimestamp": "2024-11-18T09:30:53.926Z", + "volume": 5.10735840751339, + "sellid": "OWS5AQ-33WLH-E5Y35W", + "sellprice": "0.943213", + "stopprice": 0.7937928999999999, + "startselltimestamp": "2024-11-18T09:35:53.685Z", + "sellPrice": 0.943213, + "profit": 0.009349795883431787, + "timestamp": "2024-11-18T10:50:54.207Z" + }, + "OXTHIV-BVY3W-QJX5C7": { + "id": "OXTHIV-BVY3W-QJX5C7", + "userref": 1731927054, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.931946", + "starttimestamp": "2024-11-18T10:50:55.616Z", + "volume": 21.530120561961187, + "sellid": "O6XW75-FLQTS-CU22WH", + "sellprice": "0.941265", + "stopprice": 0.7921541, + "startselltimestamp": "2024-11-18T13:25:57.271Z", + "sellPrice": 0.941265, + "profit": 0.03931735884494944, + "timestamp": "2024-11-18T13:40:57.181Z" + }, + "ONZM2D-B3BAV-A2L3DT": { + "id": "ONZM2D-B3BAV-A2L3DT", + "userref": 1731927354, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.931946", + "starttimestamp": "2024-11-18T10:55:55.326Z", + "volume": 15.070738628365786, + "sellid": "OHIOH7-GIG5N-QYJHAU", + "sellprice": "0.941265", + "stopprice": 0.7921541, + "startselltimestamp": "2024-11-18T13:25:57.722Z", + "sellPrice": 0.941265, + "profit": 0.02752151977062199, + "timestamp": "2024-11-18T13:40:57.182Z" + }, + "OCVMYC-LDT5L-Z6Y5CA": { + "id": "OCVMYC-LDT5L-Z6Y5CA", + "userref": 1731927654, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.933622", + "starttimestamp": "2024-11-18T11:00:55.670Z", + "volume": 10.530587052290901, + "sellid": "OYR45Q-6YMPN-3KBM35", + "sellprice": "0.942958", + "stopprice": 0.7935787, + "startselltimestamp": "2024-11-18T13:25:58.216Z", + "sellPrice": 0.942958, + "profit": 0.019267604517835463, + "timestamp": "2024-11-18T13:40:57.183Z" + }, + "OU5VRN-E6KXV-PNEATS": { + "id": "OU5VRN-E6KXV-PNEATS", + "userref": 1731931255, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.942606", + "starttimestamp": "2024-11-18T12:00:56.525Z", + "volume": 7.301152877714862, + "sellid": "OOVBNZ-ELSUW-ZSHQJM", + "sellprice": "0.952032", + "stopprice": 0.8012151000000001, + "startselltimestamp": "2024-11-18T13:15:57.026Z", + "sellPrice": 0.952032, + "profit": 0.013488500281627784, + "timestamp": "2024-11-18T14:20:58.632Z" + }, + "OV45ZG-QSJYB-KKVAEB": { + "id": "OV45ZG-QSJYB-KKVAEB", + "userref": 1731931555, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.943297", + "starttimestamp": "2024-11-18T12:05:56.662Z", + "volume": 5.107065482247913, + "sellid": "OMQFWC-FU4DI-XL5WIQ", + "sellprice": "0.952730", + "stopprice": 0.80180245, + "startselltimestamp": "2024-11-18T13:15:57.473Z", + "sellPrice": 0.95273, + "profit": 0.009442412513603449, + "timestamp": "2024-11-18T14:20:58.633Z" + }, + "ODGT4L-F7BSL-5OBSLI": { + "id": "ODGT4L-F7BSL-5OBSLI", + "userref": 1731937257, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.945711", + "starttimestamp": "2024-11-18T13:40:58.538Z", + "volume": 17.56509424349134, + "sellid": "OAM3DO-B3K36-WCCHKO", + "status": "open", + "sellprice": "0.955168", + "stopprice": 0.8038543499999999, + "startselltimestamp": "2024-11-18T13:45:57.391Z", + "sellPrice": 0.955168, + "profit": 0.03255662113880392, + "timestamp": "2024-11-18T14:20:58.634Z" + }, + "O6VCH2-IIJZ2-M6RBUI": { + "id": "O6VCH2-IIJZ2-M6RBUI", + "userref": 1731938157, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.944753", + "starttimestamp": "2024-11-18T13:55:58.153Z", + "volume": 12.28981604015632, + "sellid": "OP7U2T-2ZNGA-P6JTZQ", + "status": "open", + "sellprice": "0.954201", + "stopprice": 0.8030400499999999, + "startselltimestamp": "2024-11-18T14:00:58.050Z", + "sellPrice": 0.954201, + "profit": 0.02276300063252118, + "timestamp": "2024-11-18T14:20:58.635Z" + }, + "OZNWDW-HIFSM-J6AKHS": { + "id": "OZNWDW-HIFSM-J6AKHS", + "userref": 1731938458, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.942285", + "starttimestamp": "2024-11-18T14:00:59.453Z", + "volume": 8.634403473359642, + "sellid": "OLDJAB-JROQN-YSJGCV", + "status": "open", + "sellprice": "0.951708", + "stopprice": 0.80094225, + "startselltimestamp": "2024-11-18T14:05:57.847Z", + "sellPrice": 0.951708, + "profit": 0.015947984978593413, + "timestamp": "2024-11-18T14:20:58.636Z" + }, + "OLEN6L-MBP7N-YTDEFI": { + "id": "OLEN6L-MBP7N-YTDEFI", + "userref": 1731938758, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.941933", + "starttimestamp": "2024-11-18T14:05:59.625Z", + "volume": 6.0587199227267785, + "sellid": "OLJMXH-EWI4U-LD3TWI", + "status": "open", + "sellprice": "0.951352", + "stopprice": 0.80064305, + "startselltimestamp": "2024-11-18T14:10:58.400Z", + "sellPrice": 0.951352, + "profit": 0.011183548756564271, + "timestamp": "2024-11-18T14:20:58.638Z" + }, + "OFS3MY-IARUJ-JCL7HY": { + "id": "OFS3MY-IARUJ-JCL7HY", + "userref": 1731939958, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.942211", + "starttimestamp": "2024-11-18T14:25:59.080Z", + "volume": 15.03709647294701, + "sellid": "OXSYAU-JYOEK-FP47WU", + "sellprice": "0.951633", + "stopprice": 0.80087935, + "startselltimestamp": "2024-11-18T14:50:58.897Z", + "sellPrice": 0.951633, + "profit": 0.02776786323725862, + "timestamp": "2024-11-18T15:20:58.640Z" + }, + "OZPKCQ-2ELEU-6DVUAD": { + "id": "OZPKCQ-2ELEU-6DVUAD", + "userref": 1731939658, + "pair": "NANOUSD", + "starttimestamp": "2024-11-18T14:30:58.017Z", + "type": "sell", + "status": "open", + "ordertype": "limit", + "volume": "21.48204817", + "price": "0.942211", + "sellid": "OHLVIZ-EUIRZ-G6U76I", + "sellprice": "0.951633", + "stopprice": 0.80087935, + "startselltimestamp": "2024-11-18T14:50:59.422Z", + "sellPrice": 0.951633, + "profit": 0.039669265719877056, + "timestamp": "2024-11-18T15:20:58.640Z" + }, + "OD3KAX-2B2O6-PLAA5Q": { + "id": "OD3KAX-2B2O6-PLAA5Q", + "userref": 1731940258, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.942152", + "starttimestamp": "2024-11-18T14:30:59.264Z", + "volume": 10.526624101840484, + "sellid": "OPX2JE-4YFVI-XIW275", + "sellprice": "0.951574", + "stopprice": 0.8008292, + "startselltimestamp": "2024-11-18T14:51:00.163Z", + "sellPrice": 0.951574, + "profit": 0.01944368527201372, + "timestamp": "2024-11-18T15:20:58.641Z" + }, + "OJ2KWT-RESO7-7FQNWF": { + "id": "OJ2KWT-RESO7-7FQNWF", + "userref": 1731945659, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.951429", + "starttimestamp": "2024-11-18T16:01:00.760Z", + "volume": 12.347440154880468, + "sellid": "ORARGL-52UKP-A5W7KI", + "sellprice": "0.960943", + "stopprice": 0.80871465, + "startselltimestamp": "2024-11-18T16:51:00.691Z", + "sellPrice": 0.960943, + "profit": 0.023021950338057123, + "timestamp": "2024-11-18T17:01:00.222Z" + }, + "O2WYYD-PZIHT-HYSTN5": { + "id": "O2WYYD-PZIHT-HYSTN5", + "userref": 1731945959, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.951429", + "starttimestamp": "2024-11-18T16:06:01.066Z", + "volume": 8.643207623213495, + "sellid": "OS42CF-IP6FD-BYC24I", + "sellprice": "0.960943", + "stopprice": 0.80871465, + "startselltimestamp": "2024-11-18T16:51:01.411Z", + "sellPrice": 0.960943, + "profit": 0.016115364331973275, + "timestamp": "2024-11-18T17:01:00.224Z" + }, + "OLCPLJ-XUXFD-DYRCLL": { + "id": "OLCPLJ-XUXFD-DYRCLL", + "userref": 1731946259, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.951429", + "starttimestamp": "2024-11-18T16:11:01.145Z", + "volume": 6.050244996546638, + "sellid": "OKT2J4-72OFN-3NVIO6", + "sellprice": "0.960943", + "stopprice": 0.80871465, + "startselltimestamp": "2024-11-18T16:51:02.029Z", + "sellPrice": 0.960943, + "profit": 0.011280754399001627, + "timestamp": "2024-11-18T17:01:00.224Z" + }, + "OYDBZH-BINYO-3H54DG": { + "id": "OYDBZH-BINYO-3H54DG", + "userref": 1731949260, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.960595", + "starttimestamp": "2024-11-18T17:01:01.523Z", + "volume": 12.269525617898223, + "sellid": "O7PMAQ-A4IVP-PFD5CT", + "sellprice": "0.970201", + "stopprice": 0.8165057499999999, + "startselltimestamp": "2024-11-18T17:21:00.985Z", + "sellPrice": 0.970201, + "profit": 0.023101259145787575, + "timestamp": "2024-11-18T18:31:01.821Z" + }, + "OSJTMY-23BZR-QRGZC4": { + "id": "OSJTMY-23BZR-QRGZC4", + "userref": 1731949560, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.960595", + "starttimestamp": "2024-11-18T17:06:01.650Z", + "volume": 8.58851239203094, + "sellid": "OUW4ZF-H7GEK-X2MJ37", + "sellprice": "0.970201", + "stopprice": 0.8165057499999999, + "startselltimestamp": "2024-11-18T17:21:01.469Z", + "sellPrice": 0.970201, + "profit": 0.016170588547913714, + "timestamp": "2024-11-18T18:31:01.823Z" + }, + "OQODE3-J44R4-IFPSDE": { + "id": "OQODE3-J44R4-IFPSDE", + "userref": 1731949860, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.960595", + "starttimestamp": "2024-11-18T17:11:01.840Z", + "volume": 6.0119600161540845, + "sellid": "OMAP2E-JU47M-SDRID4", + "sellprice": "0.970201", + "stopprice": 0.8165057499999999, + "startselltimestamp": "2024-11-18T17:21:02.182Z", + "sellPrice": 0.970201, + "profit": 0.0113194145097755, + "timestamp": "2024-11-18T18:31:01.823Z" + }, + "OSP4CA-P36B3-PJ4IOF": { + "id": "OSP4CA-P36B3-PJ4IOF", + "userref": 1731941460, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.938381", + "starttimestamp": "2024-11-18T14:51:01.656Z", + "volume": 7.3628337883563155, + "sellid": "OT4IHL-T5KUH-HG5S56", + "sellprice": "0.947765", + "stopprice": 0.79762385, + "startselltimestamp": "2024-11-18T19:26:03.825Z", + "sellPrice": 0.947765, + "profit": 0.013543314275643564, + "timestamp": "2024-11-18T19:46:03.810Z" + }, + "O3S7CO-VLOGJ-UR4FOX": { + "id": "O3S7CO-VLOGJ-UR4FOX", + "userref": 1731941758, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.938381", + "starttimestamp": "2024-11-18T14:55:59.787Z", + "volume": 5.153982771645422, + "sellid": "O2CWDV-BEMGH-LHXR5U", + "sellprice": "0.947765", + "stopprice": 0.79762385, + "startselltimestamp": "2024-11-18T19:26:04.425Z", + "sellPrice": 0.947765, + "profit": 0.009480318373888193, + "timestamp": "2024-11-18T19:46:03.810Z" + }, + "OL3FTE-34SW4-QS4FWB": { + "id": "OL3FTE-34SW4-QS4FWB", + "userref": 1731943258, + "pair": "NANOUSD", + "starttimestamp": "2024-11-18T15:30:58.845Z", + "type": "sell", + "status": "open", + "ordertype": "limit", + "volume": "17.82745535", + "price": "0.941403", + "sellid": "O2VMHW-DDMXX-NH6ZRV", + "sellprice": "0.950817", + "stopprice": 0.80019255, + "startselltimestamp": "2024-11-18T19:26:05.061Z", + "sellPrice": 0.950817, + "profit": 0.03289379441539372, + "timestamp": "2024-11-18T20:31:04.104Z" + }, + "OGCSCS-Y6PKY-GM6KMH": { + "id": "OGCSCS-Y6PKY-GM6KMH", + "userref": 1731959164, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.947876", + "starttimestamp": "2024-11-18T19:46:05.673Z", + "volume": 7.980917223873555, + "sellid": "ODSYAC-P3FNG-MNY3IR", + "sellprice": "0.957355", + "stopprice": 0.8056946, + "startselltimestamp": "2024-11-18T19:51:04.325Z", + "sellPrice": 0.957355, + "profit": 0.014829150751665285, + "timestamp": "2024-11-18T21:16:05.008Z" + }, + "OU35DG-T7IY6-QSLNA3": { + "id": "OU35DG-T7IY6-QSLNA3", + "userref": 1731959464, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.947135", + "starttimestamp": "2024-11-18T19:51:05.775Z", + "volume": 5.584953610918884, + "sellid": "OYE3LR-OJLRE-WI3N2T", + "sellprice": "0.956606", + "stopprice": 0.8050647499999999, + "startselltimestamp": "2024-11-18T19:56:04.329Z", + "sellPrice": 0.956606, + "profit": 0.010365874960195316, + "timestamp": "2024-11-18T21:16:05.009Z" + }, + "OWEIMJ-YRX2J-ECM2N7": { + "id": "OWEIMJ-YRX2J-ECM2N7", + "userref": 1731954662, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.956087", + "starttimestamp": "2024-11-18T18:31:03.244Z", + "volume": 12.367542649983614, + "sellid": "OODTGN-XZPWQ-SRYB4I", + "sellprice": "0.965648", + "stopprice": 0.81267395, + "startselltimestamp": "2024-11-18T19:01:03.695Z", + "sellPrice": 0.965648, + "profit": 0.023177516978626744, + "timestamp": "2024-11-18T21:31:05.291Z" + }, + "OBNL7R-KTEQM-3I4WOH": { + "id": "OBNL7R-KTEQM-3I4WOH", + "userref": 1731954962, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.955231", + "starttimestamp": "2024-11-18T18:36:03.683Z", + "volume": 8.664877619382347, + "sellid": "OOIJLG-LPIZD-SP5GBC", + "sellprice": "0.964783", + "stopprice": 0.81194635, + "startselltimestamp": "2024-11-18T19:01:04.183Z", + "sellPrice": 0.964783, + "profit": 0.016220165670336392, + "timestamp": "2024-11-18T21:31:05.293Z" + }, + "OWQHLW-35PW2-5CJWIY": { + "id": "OWQHLW-35PW2-5CJWIY", + "userref": 1731955262, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.955231", + "starttimestamp": "2024-11-18T18:41:03.689Z", + "volume": 6.065415697028056, + "sellid": "OSBIQH-O7FPF-C33YF6", + "sellprice": "0.964783", + "stopprice": 0.81194635, + "startselltimestamp": "2024-11-18T19:06:04.192Z", + "sellPrice": 0.964783, + "profit": 0.01135411852155685, + "timestamp": "2024-11-18T21:31:05.294Z" + }, + "OEVV2U-F4QHB-KPGNFB": { + "id": "OEVV2U-F4QHB-KPGNFB", + "userref": 1731969066, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.953654", + "starttimestamp": "2024-11-18T22:31:07.598Z", + "volume": 14.213303271367943, + "sellid": "O55NM2-5EMO6-4BXEA2", + "sellprice": "0.963191", + "stopprice": 0.8106059, + "startselltimestamp": "2024-11-18T22:46:06.740Z", + "sellPrice": 0.963191, + "profit": 0.02657347606221616, + "timestamp": "2024-11-18T23:21:07.048Z" + }, + "O4OUUS-2ZNDD-W5WZHP": { + "id": "O4OUUS-2ZNDD-W5WZHP", + "userref": 1731969966, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952830", + "starttimestamp": "2024-11-18T22:46:08.547Z", + "volume": 16.00003401584149, + "sellid": "ORCHDT-VIVGX-QFZO4A", + "sellprice": "0.962358", + "stopprice": 0.8099055, + "startselltimestamp": "2024-11-18T22:51:07.209Z", + "sellPrice": 0.962358, + "profit": 0.029876031516014007, + "timestamp": "2024-11-18T23:21:07.050Z" + }, + "O24O4U-Q2N6X-JMZICG": { + "id": "O24O4U-Q2N6X-JMZICG", + "userref": 1731970267, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952953", + "starttimestamp": "2024-11-18T22:51:08.627Z", + "volume": 11.18658591375567, + "sellid": "OT3DF7-GDV3E-WES63Y", + "status": "open", + "sellprice": "0.962483", + "stopprice": 0.81001005, + "startselltimestamp": "2024-11-18T22:56:06.892Z", + "sellPrice": 0.962483, + "profit": 0.020899406252889108, + "timestamp": "2024-11-18T23:21:07.050Z" + }, + "ORFJSX-FUCSJ-YUVWZ4": { + "id": "ORFJSX-FUCSJ-YUVWZ4", + "userref": 1731970567, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952570", + "starttimestamp": "2024-11-18T22:56:08.816Z", + "volume": 7.822007143363919, + "sellid": "OAWOCQ-WAYPX-5RES2V", + "status": "open", + "sellprice": "0.962096", + "stopprice": 0.8096845, + "startselltimestamp": "2024-11-18T23:01:07.329Z", + "sellPrice": 0.962096, + "profit": 0.01460631553106078, + "timestamp": "2024-11-18T23:21:07.051Z" + }, + "OSZX2G-3WMAI-F2IQVP": { + "id": "OSZX2G-3WMAI-F2IQVP", + "userref": 1731972067, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952592", + "starttimestamp": "2024-11-18T23:21:08.351Z", + "volume": 20.352369160605928, + "sellid": "OZ3HRB-TIY5H-3ZCMX3", + "status": "open", + "sellprice": "0.962118", + "stopprice": 0.8097032, + "startselltimestamp": "2024-11-18T23:26:07.918Z", + "sellPrice": 0.962118, + "profit": 0.03800112960191748, + "timestamp": "2024-11-19T00:31:08.116Z" + }, + "OOQ27J-PGABP-HERT6V": { + "id": "OOQ27J-PGABP-HERT6V", + "userref": 1731977168, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.953831", + "starttimestamp": "2024-11-19T00:46:09.847Z", + "volume": 20.377070609460432, + "sellid": "OYKN56-TXU7Q-F5PW7Q", + "sellprice": "0.963369", + "stopprice": 0.81075635, + "startselltimestamp": "2024-11-19T04:14:48.174Z", + "sellPrice": 0.963369, + "profit": 0.0380888203832043, + "timestamp": "2024-11-19T12:04:56.213Z" + }, + "OJZUU6-XWNHZ-4NPPIE": { + "id": "OJZUU6-XWNHZ-4NPPIE", + "userref": 1731978284, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.953873", + "starttimestamp": "2024-11-19T01:04:46.099Z", + "volume": 14.263310425227056, + "sellid": "OQFWP3-W3FSN-XFJXOR", + "sellprice": "0.963412", + "stopprice": 0.81079205, + "startselltimestamp": "2024-11-19T04:14:49.048Z", + "sellPrice": 0.963412, + "profit": 0.02667039363171629, + "timestamp": "2024-11-19T12:04:56.214Z" + }, + "ONWV7F-K2VTA-W462ZE": { + "id": "ONWV7F-K2VTA-W462ZE", + "userref": 1731978313, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.953873", + "starttimestamp": "2024-11-19T01:05:14.593Z", + "volume": 9.98431898144449, + "sellid": "OXLPU2-WVR5O-THC6CL", + "sellprice": "0.963412", + "stopprice": 0.81079205, + "startselltimestamp": "2024-11-19T04:14:49.519Z", + "sellPrice": 0.963412, + "profit": 0.01866927869064472, + "timestamp": "2024-11-19T12:04:56.215Z" + }, + "OG7TRV-MHLLH-2AYFDW": { + "id": "OG7TRV-MHLLH-2AYFDW", + "userref": 1731991790, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.953547", + "starttimestamp": "2024-11-19T04:49:51.837Z", + "volume": 6.876270137232132, + "sellid": "OMSIXG-XKY57-CDZD4W", + "sellprice": "0.963082", + "stopprice": 0.81051495, + "startselltimestamp": "2024-11-19T04:59:48.826Z", + "sellPrice": 0.963082, + "profit": 0.012848200731095806, + "timestamp": "2024-11-19T12:04:56.216Z" + }, + "OMEVKN-EJXRV-UI6MN6": { + "id": "OMEVKN-EJXRV-UI6MN6", + "userref": 1732017896, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.960825", + "starttimestamp": "2024-11-19T12:04:57.985Z", + "volume": 20.223938583034602, + "sellid": "OVIWNQ-ZYSO7-WKQL4D", + "sellprice": "0.970433", + "stopprice": 0.81670125, + "startselltimestamp": "2024-11-19T13:54:58.537Z", + "sellPrice": 0.970433, + "profit": 0.03808102918581835, + "timestamp": "2024-11-19T14:54:58.550Z" + }, + "O5GVNU-HCA75-422CDS": { + "id": "O5GVNU-HCA75-422CDS", + "userref": 1732018196, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.960825", + "starttimestamp": "2024-11-19T12:09:57.919Z", + "volume": 14.154505619982652, + "sellid": "O5NKMM-37I6R-BTX2DZ", + "sellprice": "0.970433", + "stopprice": 0.81670125, + "startselltimestamp": "2024-11-19T13:54:59.265Z", + "sellPrice": 0.970433, + "profit": 0.026652481138246198, + "timestamp": "2024-11-19T14:54:58.552Z" + }, + "OLGVVT-SDG5T-JC7CNP": { + "id": "OLGVVT-SDG5T-JC7CNP", + "userref": 1732018496, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.960825", + "starttimestamp": "2024-11-19T12:14:57.878Z", + "volume": 9.908156146724007, + "sellid": "OD2MQ6-EKMW5-E3VLNT", + "sellprice": "0.970433", + "stopprice": 0.81670125, + "startselltimestamp": "2024-11-19T13:54:59.971Z", + "sellPrice": 0.970433, + "profit": 0.018656740963284207, + "timestamp": "2024-11-19T14:54:58.552Z" + }, + "OS4UJK-J7DTO-DC3TSU": { + "id": "OS4UJK-J7DTO-DC3TSU", + "userref": 1732027198, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.959699", + "starttimestamp": "2024-11-19T14:39:59.861Z", + "volume": 6.91058218419361, + "sellid": "OZPPHP-PEAWE-VOHXRB", + "sellprice": "0.969296", + "stopprice": 0.81574415, + "startselltimestamp": "2024-11-19T14:49:59.209Z", + "sellPrice": 0.969296, + "profit": 0.012998943300112892, + "timestamp": "2024-11-19T14:54:58.553Z" + }, + "O6REWL-HJM3Q-BXKCR3": { + "id": "O6REWL-HJM3Q-BXKCR3", + "userref": 1732028399, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.957476", + "starttimestamp": "2024-11-19T15:00:01.273Z", + "volume": 14.240791684418054, + "sellid": "OJUBA6-B7ZCM-Q2FULV", + "sellprice": "0.967051", + "stopprice": 0.8138546, + "startselltimestamp": "2024-11-19T15:09:59.842Z", + "sellPrice": 0.967051, + "profit": 0.02672842798615155, + "timestamp": "2024-11-19T15:59:59.754Z" + }, + "OBN4DJ-IGZ62-Q2Q4MN": { + "id": "OBN4DJ-IGZ62-Q2Q4MN", + "userref": 1732028699, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.955819", + "starttimestamp": "2024-11-19T15:05:00.534Z", + "volume": 8.177926013600718, + "sellid": "OVN4VK-NKUOM-IT6E4L", + "sellprice": "0.965377", + "stopprice": 0.81244615, + "startselltimestamp": "2024-11-19T15:19:59.974Z", + "sellPrice": 0.965377, + "profit": 0.01531902185549422, + "timestamp": "2024-11-19T15:59:59.755Z" + }, + "ORBOSQ-5R57B-J4FYFV": { + "id": "ORBOSQ-5R57B-J4FYFV", + "userref": 1732029000, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.955771", + "starttimestamp": "2024-11-19T15:10:01.704Z", + "volume": 5.488891225828892, + "sellid": "O6EBBS-4BPLN-AOITFS", + "sellprice": "0.965329", + "stopprice": 0.81240535, + "startselltimestamp": "2024-11-19T15:20:00.684Z", + "sellPrice": 0.965329, + "profit": 0.010283986600712502, + "timestamp": "2024-11-19T15:59:59.757Z" + }, + "OCBSKJ-QEMVO-IBVBVB": { + "id": "OCBSKJ-QEMVO-IBVBVB", + "userref": 1732029601, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.954585", + "starttimestamp": "2024-11-19T15:20:02.701Z", + "volume": 5.872183181635356, + "sellid": "O4EZU5-DE7CP-27KUCE", + "sellprice": "0.964131", + "stopprice": 0.81139725, + "startselltimestamp": "2024-11-19T15:24:59.772Z", + "sellPrice": 0.964131, + "profit": 0.010987653349752172, + "timestamp": "2024-11-19T15:59:59.757Z" + }, + "OVDYNO-YQMIN-NWTOIZ": { + "id": "OVDYNO-YQMIN-NWTOIZ", + "userref": 1731961864, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.943097", + "starttimestamp": "2024-11-18T20:31:05.371Z", + "volume": 9.300528106744578, + "sellid": "OVA3AB-6EBNY-FD2QQY", + "sellprice": "0.952528", + "stopprice": 0.8016324499999999, + "startselltimestamp": "2024-11-19T17:45:02.483Z", + "sellPrice": 0.952528, + "profit": 0.017192026205316638, + "timestamp": "2024-11-19T17:50:01.500Z" + }, + "ORAZQJ-KN4ZS-3CEN6J": { + "id": "ORAZQJ-KN4ZS-3CEN6J", + "userref": 1731962164, + "pair": "NANOUSD", + "starttimestamp": "2024-11-18T20:46:04.643Z", + "type": "sell", + "ordertype": "limit", + "volume": "6.51258542", + "price": "0.942761", + "sellid": "OF4Z77-HD6GW-O3H7I4", + "sellprice": "0.952189", + "stopprice": 0.8013468499999999, + "startselltimestamp": "2024-11-19T17:45:03.180Z", + "sellPrice": 0.952189, + "profit": 0.01203656037324325, + "timestamp": "2024-11-19T17:50:01.502Z" + }, + "OCNTTY-Z6BWW-S2GACD": { + "id": "OCNTTY-Z6BWW-S2GACD", + "userref": 1731964565, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.943914", + "starttimestamp": "2024-11-18T21:16:06.405Z", + "volume": 8.669297528081328, + "sellid": "OKXZCC-R2ZXR-AP6ZG7", + "sellprice": "0.953353", + "stopprice": 0.8023269, + "startselltimestamp": "2024-11-19T17:45:03.883Z", + "sellPrice": 0.953353, + "profit": 0.016037610914718572, + "timestamp": "2024-11-19T17:50:01.504Z" + }, + "OVRNWB-NTP7P-YTARBX": { + "id": "OVRNWB-NTP7P-YTARBX", + "userref": 1732031700, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952519", + "starttimestamp": "2024-11-19T15:55:01.661Z", + "volume": 5.596770478002713, + "sellid": "OKIYUV-JPDIJ-Y43IGR", + "sellprice": "0.962044", + "stopprice": 0.80964115, + "startselltimestamp": "2024-11-19T17:45:04.656Z", + "sellPrice": 0.962044, + "profit": 0.010447760096270874, + "timestamp": "2024-11-19T18:15:01.929Z" + }, + "OVO73I-WGMNZ-VGQPFX": { + "id": "OVO73I-WGMNZ-VGQPFX", + "userref": 1732032300, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.953860", + "starttimestamp": "2024-11-19T16:05:01.878Z", + "volume": 18.84664367040125, + "sellid": "OEO6HB-JYJLC-4EQKF7", + "sellprice": "0.963399", + "stopprice": 0.810781, + "startselltimestamp": "2024-11-19T17:45:05.564Z", + "sellPrice": 0.963399, + "profit": 0.03524254518447842, + "timestamp": "2024-11-19T18:15:01.930Z" + }, + "OOWKZ6-OON43-SHUF24": { + "id": "OOWKZ6-OON43-SHUF24", + "userref": 1732032600, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.953604", + "starttimestamp": "2024-11-19T16:10:01.577Z", + "volume": 13.196194924593136, + "sellid": "OLHTYF-FIGL3-DYEF25", + "sellprice": "0.963140", + "stopprice": 0.8105633999999999, + "startselltimestamp": "2024-11-19T17:45:06.276Z", + "sellPrice": 0.96314, + "profit": 0.024664005022743754, + "timestamp": "2024-11-19T18:15:01.931Z" + }, + "O7QQF4-TM72P-T6NJYH": { + "id": "O7QQF4-TM72P-T6NJYH", + "userref": 1732049405, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.954950", + "starttimestamp": "2024-11-19T20:50:07.316Z", + "volume": 6.654774783638686, + "sellid": "OCAUWX-CKPTB-RIFKGN", + "status": "open", + "sellprice": "0.964499", + "stopprice": 0.8117074999999999, + "startselltimestamp": "2024-11-19T20:55:05.694Z", + "sellPrice": 0.964499, + "profit": 0.012452441194244206, + "timestamp": "2024-11-21T07:52:37.955Z" + }, + "OB4ZHH-EXU5U-5OHFM4": { + "id": "OB4ZHH-EXU5U-5OHFM4", + "userref": 1732040102, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.956291", + "starttimestamp": "2024-11-19T18:15:03.584Z", + "volume": 27.80703331454527, + "sellid": "O7RQ5N-NLGV6-6WF26V", + "sellprice": "0.965854", + "stopprice": 0.81284735, + "startselltimestamp": "2024-11-19T20:25:05.094Z", + "sellPrice": 0.965854, + "profit": 0.052122059385451086, + "timestamp": "2024-11-21T09:52:39.776Z" + }, + "OVQ2D4-QADQV-LYEDA4": { + "id": "OVQ2D4-QADQV-LYEDA4", + "userref": 1732040402, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.956283", + "starttimestamp": "2024-11-19T18:20:03.631Z", + "volume": 19.46343809087932, + "sellid": "O6PVQZ-AEM4E-GAGQCW", + "sellprice": "0.965846", + "stopprice": 0.81284055, + "startselltimestamp": "2024-11-19T20:25:06.834Z", + "sellPrice": 0.965846, + "profit": 0.03648390328634338, + "timestamp": "2024-11-21T09:52:39.778Z" + }, + "OCZUCG-OENYT-5YQCSG": { + "id": "OCZUCG-OENYT-5YQCSG", + "userref": 1732040702, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.956283", + "starttimestamp": "2024-11-19T18:25:03.727Z", + "volume": 13.624406663879315, + "sellid": "OBCIKE-43IWI-3ZUVQE", + "sellprice": "0.965846", + "stopprice": 0.81284055, + "startselltimestamp": "2024-11-19T20:25:07.703Z", + "sellPrice": 0.965846, + "profit": 0.02553873230093391, + "timestamp": "2024-11-21T09:52:39.779Z" + }, + "OCXIE2-GSXRJ-DA5UQV": { + "id": "OCXIE2-GSXRJ-DA5UQV", + "userref": 1732049104, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.955957", + "starttimestamp": "2024-11-19T20:45:06.062Z", + "volume": 9.494631740942644, + "sellid": "OQK3CT-CBBOE-WHIZRY", + "status": "open", + "sellprice": "0.965517", + "stopprice": 0.81256345, + "startselltimestamp": "2024-11-19T20:50:05.472Z", + "sellPrice": 0.965517, + "profit": 0.017793927324226494, + "timestamp": "2024-11-21T09:52:39.780Z" + }, + "OFMUTW-ETTRM-LIP2KJ": { + "id": "OFMUTW-ETTRM-LIP2KJ", + "userref": 1732175558, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.949848", + "starttimestamp": "2024-11-21T07:52:39.436Z", + "volume": 6.726527649013686, + "sellid": "OJA6LQ-FVSOU-HF3ZFD", + "sellprice": "0.959346", + "stopprice": 0.8073708, + "startselltimestamp": "2024-11-21T10:02:40.312Z", + "sellPrice": 0.959346, + "profit": 0.01251957469700854, + "timestamp": "2024-11-21T10:17:39.989Z" + }, + "OTZQUU-GW26B-ZBOCCS": { + "id": "OTZQUU-GW26B-ZBOCCS", + "userref": 1732183361, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952916", + "starttimestamp": "2024-11-21T10:02:42.488Z", + "volume": 12.720224706408562, + "sellid": "O3FWT7-D4FCF-RYID6Q", + "status": "open", + "sellprice": "0.962445", + "stopprice": 0.8099786, + "startselltimestamp": "2024-11-21T10:07:40.212Z", + "sellPrice": 0.962445, + "profit": 0.023755731971801516, + "timestamp": "2024-11-21T10:17:39.990Z" + }, + "OTFXIM-JZNTG-63HFK3": { + "id": "OTFXIM-JZNTG-63HFK3", + "userref": 1732182760, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.955079", + "starttimestamp": "2024-11-21T09:52:40.961Z", + "volume": 25.983106477823508, + "sellid": "OQ2CPN-ZYIZM-M3ZQJP", + "sellprice": "0.964630", + "stopprice": 0.81181715, + "startselltimestamp": "2024-11-21T10:02:40.732Z", + "sellPrice": 0.96463, + "profit": 0.04864463655594706, + "timestamp": "2024-11-21T10:22:40.220Z" + }, + "OA4U3X-7V2YT-CYEJ5N": { + "id": "OA4U3X-7V2YT-CYEJ5N", + "userref": 1732183060, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.955079", + "starttimestamp": "2024-11-21T09:57:40.976Z", + "volume": 18.18506833357525, + "sellid": "OVYYSZ-G5TNZ-JI5FTU", + "sellprice": "0.964630", + "stopprice": 0.81181715, + "startselltimestamp": "2024-11-21T10:02:41.147Z", + "sellPrice": 0.96463, + "profit": 0.034045430271660154, + "timestamp": "2024-11-21T10:22:40.221Z" + }, + "OJMOT5-CXS2W-4NGKNK": { + "id": "OJMOT5-CXS2W-4NGKNK", + "userref": 1732183660, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952916", + "starttimestamp": "2024-11-21T10:07:41.527Z", + "volume": 8.90267790104476, + "sellid": "OAZAMJ-XTM6X-N5T45B", + "sellprice": "0.962445", + "stopprice": 0.8099786, + "startselltimestamp": "2024-11-21T10:32:40.828Z", + "sellPrice": 0.962445, + "profit": 0.016626249530164103, + "timestamp": "2024-11-21T10:52:40.716Z" + }, + "OZEBWM-2QZ2F-OQ5QZV": { + "id": "OZEBWM-2QZ2F-OQ5QZV", + "userref": 1732183960, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952916", + "starttimestamp": "2024-11-21T10:12:41.025Z", + "volume": 6.231873480005992, + "sellid": "O4NVLZ-SJK5D-YBS356", + "sellprice": "0.962445", + "stopprice": 0.8099786, + "startselltimestamp": "2024-11-21T10:32:41.253Z", + "sellPrice": 0.962445, + "profit": 0.011638372708826082, + "timestamp": "2024-11-21T10:52:40.718Z" + }, + "OX3XIY-LWWHA-EIJZPC": { + "id": "OX3XIY-LWWHA-EIJZPC", + "userref": 1732184861, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.953221", + "starttimestamp": "2024-11-21T10:27:42.048Z", + "volume": 20.526107842192882, + "sellid": "ORQEXL-QDIF3-VZLVYU", + "sellprice": "0.962753", + "stopprice": 0.8102378499999999, + "startselltimestamp": "2024-11-21T10:32:41.640Z", + "sellPrice": 0.962753, + "profit": 0.03834490416443312, + "timestamp": "2024-11-21T10:52:40.721Z" + }, + "OEUD7K-LDHJA-SHBM7N": { + "id": "OEUD7K-LDHJA-SHBM7N", + "userref": 1732185161, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952979", + "starttimestamp": "2024-11-21T10:32:42.821Z", + "volume": 14.345192268400409, + "sellid": "OX2W6L-K7SQK-5NBSOL", + "sellprice": "0.962509", + "stopprice": 0.81003215, + "startselltimestamp": "2024-11-21T10:37:40.707Z", + "sellPrice": 0.962509, + "profit": 0.026797507726600236, + "timestamp": "2024-11-21T10:52:40.724Z" + }, + "O2SRRC-P75E7-XTH3U5": { + "id": "O2SRRC-P75E7-XTH3U5", + "userref": 1732185761, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.952893", + "starttimestamp": "2024-11-21T10:42:42.589Z", + "volume": 7.022238497203522, + "sellid": "O2XB43-YHWPC-IAJP6N", + "sellprice": "0.962422", + "stopprice": 0.80995905, + "startselltimestamp": "2024-11-21T15:12:45.902Z", + "sellPrice": 0.962422, + "profit": 0.013115715730766656, + "timestamp": "2024-11-21T23:02:52.887Z" + }, + "ORBSPO-ZULKI-5P4DMY": { + "id": "ORBSPO-ZULKI-5P4DMY", + "userref": 1732186360, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.953671", + "starttimestamp": "2024-11-21T10:52:41.853Z", + "volume": 23.106280405191836, + "sellid": "OQFHW7-3L4CP-6RG6L3", + "sellprice": "0.963208", + "stopprice": 0.81062035, + "startselltimestamp": "2024-11-21T15:12:46.580Z", + "sellPrice": 0.963208, + "profit": 0.04319682151701948, + "timestamp": "2024-11-22T00:17:53.376Z" + }, + "OHDAW4-NWYEQ-WOAJ7M": { + "id": "OHDAW4-NWYEQ-WOAJ7M", + "userref": 1732230173, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.948931", + "starttimestamp": "2024-11-21T23:02:54.074Z", + "volume": 9.017162208176055, + "sellid": "O37GRV-AVPJH-OHMT7G", + "sellprice": "0.958420", + "stopprice": 0.8065913499999999, + "startselltimestamp": "2024-11-22T00:47:54.716Z", + "sellPrice": 0.95842, + "profit": 0.016768278773675788, + "timestamp": "2024-11-22T03:27:56.994Z" + }, + "OJC6VC-ZRQYM-73DCMB": { + "id": "OJC6VC-ZRQYM-73DCMB", + "userref": 1732230473, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.948931", + "starttimestamp": "2024-11-21T23:07:54.572Z", + "volume": 6.31170185009787, + "sellid": "OIQGIG-OGH3E-2RK4ZR", + "sellprice": "0.958420", + "stopprice": 0.8065913499999999, + "startselltimestamp": "2024-11-22T00:47:55.245Z", + "sellPrice": 0.95842, + "profit": 0.011737215513634769, + "timestamp": "2024-11-22T03:27:56.995Z" + }, + "OSIEFS-OWWWG-SALIEO": { + "id": "OSIEFS-OWWWG-SALIEO", + "userref": 1732246377, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.951145", + "starttimestamp": "2024-11-22T03:32:58.749Z", + "volume": 5.958133247323769, + "sellid": "O2MFMW-RKDZ4-CWAXJJ", + "sellprice": "0.960656", + "stopprice": 0.80847325, + "startselltimestamp": "2024-11-22T03:52:58.534Z", + "sellPrice": 0.960656, + "profit": 0.011104744913828936, + "timestamp": "2024-11-22T04:02:57.790Z" + }, + "OX3WEF-JGPAS-KLSOIN": { + "id": "OX3WEF-JGPAS-KLSOIN", + "userref": 1732235274, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.955580", + "starttimestamp": "2024-11-22T00:27:56.092Z", + "volume": 7.940539993688571, + "sellid": "OEFI5P-OUQES-TKN57O", + "sellprice": "0.965136", + "stopprice": 0.8122429999999999, + "startselltimestamp": "2024-11-22T00:42:54.869Z", + "sellPrice": 0.965136, + "profit": 0.014873711321617286, + "timestamp": "2024-11-22T04:32:58.698Z" + }, + "OE5CPK-6FUW7-PMF6M7": { + "id": "OE5CPK-6FUW7-PMF6M7", + "userref": 1732236175, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.954803", + "starttimestamp": "2024-11-22T00:42:56.096Z", + "volume": 5.556944481000899, + "sellid": "OUP2WQ-WOQ4I-27SKPZ", + "status": "open", + "sellprice": "0.964351", + "stopprice": 0.8115825499999999, + "startselltimestamp": "2024-11-22T00:47:55.813Z", + "sellPrice": 0.964351, + "profit": 0.01039917699063371, + "timestamp": "2024-11-22T04:32:58.700Z" + }, + "OVKXLY-NZCSL-QFGNNA": { + "id": "OVKXLY-NZCSL-QFGNNA", + "userref": 1732234673, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.956856", + "starttimestamp": "2024-11-22T00:17:54.770Z", + "volume": 11.342073869930399, + "sellid": "OYTA27-FALD5-S43OFM", + "sellprice": "0.966425", + "stopprice": 0.8133276, + "startselltimestamp": "2024-11-22T00:27:54.610Z", + "sellPrice": 0.966425, + "profit": 0.02127632416282868, + "timestamp": "2024-11-22T05:48:00.048Z" + }, + "ONPQCI-KKXVF-QWTHP2": { + "id": "ONPQCI-KKXVF-QWTHP2", + "userref": 1732192362, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.965556", + "starttimestamp": "2024-11-21T12:32:44.092Z", + "volume": 15.973133187511516, + "sellid": "O2DDSI-RQLD5-2RWVZB", + "sellprice": "0.975212", + "stopprice": 0.8207226, + "startselltimestamp": "2024-11-21T14:32:44.270Z", + "sellPrice": 0.975212, + "profit": 0.03023599105836819, + "timestamp": "2024-11-22T08:23:02.065Z" + }, + "O5VMJK-5TSH5-7JSWIG": { + "id": "O5VMJK-5TSH5-7JSWIG", + "userref": 1732192963, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.965556", + "starttimestamp": "2024-11-21T12:42:44.501Z", + "volume": 7.826838738958946, + "sellid": "OH7ZYM-7HZXM-3V5YVL", + "sellprice": "0.975212", + "stopprice": 0.8207226, + "startselltimestamp": "2024-11-21T14:32:45.259Z", + "sellPrice": 0.975212, + "profit": 0.014815642200460576, + "timestamp": "2024-11-22T08:23:02.066Z" + }, + "OWOTVA-OOWR7-EPZRIC": { + "id": "OWOTVA-OOWR7-EPZRIC", + "userref": 1732271584, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.979181", + "starttimestamp": "2024-11-22T10:33:05.327Z", + "volume": 6.716707590066154, + "sellid": "O6IVB6-XSYMH-GF34TR", + "sellprice": "0.988973", + "stopprice": 0.83230385, + "startselltimestamp": "2024-11-22T13:48:06.849Z", + "sellPrice": 0.988973, + "profit": 0.012891941081051711, + "timestamp": "2024-11-22T14:03:06.864Z" + }, + "O4Z4ED-F5ZBL-QWPPFK": { + "id": "O4Z4ED-F5ZBL-QWPPFK", + "userref": 1732284187, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.998891", + "starttimestamp": "2024-11-22T14:03:08.178Z", + "volume": 6.593991038887153, + "sellid": "OPD63T-ZPHBI-P3CKMH", + "status": "open", + "sellprice": "1.008880", + "stopprice": 0.8490573499999999, + "startselltimestamp": "2024-11-22T14:08:07.491Z", + "sellPrice": 1.00888, + "profit": 0.012910480558893787, + "timestamp": "2024-11-22T21:08:14.638Z" + }, + "OBKS6M-ZJCCF-2HVK4A": { + "id": "OBKS6M-ZJCCF-2HVK4A", + "userref": 1732952646, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "159.84", + "starttimestamp": "2024-11-30T07:44:07.146Z", + "volume": 0.11877602243043195, + "sellid": "OASNHD-QB75P-26PYQ2", + "sellprice": "161.44", + "stopprice": 135.864, + "startselltimestamp": "2024-11-30T08:00:30.346Z", + "sellPrice": 161.44, + "profit": 0.037400193942893345, + "timestamp": "2024-11-30T20:31:15.723Z" + }, + "OSL7TJ-46GE5-BLROEW": { + "id": "OSL7TJ-46GE5-BLROEW", + "userref": 1732953630, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "159.93", + "starttimestamp": "2024-11-30T08:00:32.162Z", + "volume": 0.05788803577316288, + "sellid": "OQU3OT-H2QGW-P2SUBO", + "sellprice": "161.53", + "stopprice": 135.94050000000001, + "startselltimestamp": "2024-11-30T08:05:30.782Z", + "sellPrice": 161.53, + "profit": 0.01818610531849639, + "timestamp": "2024-11-30T20:41:16.032Z" + }, + "OSIG3X-73ZAH-JHDOCW": { + "id": "OSIG3X-73ZAH-JHDOCW", + "userref": 1732957544, + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "159.93", + "starttimestamp": "2024-11-30T09:05:45.101Z", + "volume": 0.04047738360191896, + "sellid": "OPQEFQ-BLYCL-7JKUTH", + "status": "open", + "sellprice": "161.53", + "stopprice": 135.94050000000001, + "startselltimestamp": "2024-11-30T09:10:43.865Z", + "sellPrice": 161.53, + "profit": 0.01271637483237803, + "timestamp": "2024-11-30T20:41:16.034Z" + }, + "OPYO4Y-CU773-BK5UGH": { + "id": "OPYO4Y-CU773-BK5UGH", + "userref": 1733006478, + "pair": "XXMRZUSD", + "starttimestamp": "2024-11-30T22:51:18.324Z", + "type": "sell", + "status": "open", + "ordertype": "limit", + "volume": "0.03787841", + "price": "161.35", + "sellid": "OU5CW7-MYW3H-RYGEJZ", + "sellprice": "162.16", + "stopprice": 137.14749999999998, + "startselltimestamp": "2024-12-01T21:48:17.785Z", + "sellPrice": 162.16, + "profit": -0.018334665576399865, + "timestamp": "2024-12-01T22:08:15.121Z" + }, + "OIJIV5-SLDRE-FT3CUJ": { + "id": "OIJIV5-SLDRE-FT3CUJ", + "userref": 1733090895, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.29", + "starttimestamp": "2024-12-01T22:08:17.130Z", + "volume": 0.07685581071330973, + "sellid": "OKPOKN-THAI4-R34GNA", + "sellprice": "163.10", + "stopprice": 137.9465, + "startselltimestamp": "2024-12-01T22:13:16.069Z", + "sellPrice": 163.1, + "profit": -0.03777924231423463, + "timestamp": "2024-12-01T23:58:17.128Z" + }, + "O4YHBM-MHKEA-SOHFME": { + "id": "O4YHBM-MHKEA-SOHFME", + "userref": 1733091196, + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.29", + "starttimestamp": "2024-12-01T22:13:18.048Z", + "volume": 0.05374398946724078, + "sellid": "OV22WQ-KOZMY-AIAICE", + "status": "open", + "sellprice": "163.10", + "stopprice": 137.9465, + "startselltimestamp": "2024-12-01T22:18:16.246Z", + "sellPrice": 163.1, + "profit": -0.026418395462517813, + "timestamp": "2024-12-01T23:58:17.129Z" + }, + "OEXHEB-555EA-DGCA6Q": { + "id": "OEXHEB-555EA-DGCA6Q", + "userref": 1733091496, + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.25", + "starttimestamp": "2024-12-01T22:18:18.333Z", + "volume": 0.03757400061255691, + "sellid": "OLHUMY-T64X4-U3J5C2", + "status": "open", + "sellprice": "163.06", + "stopprice": 137.9125, + "startselltimestamp": "2024-12-01T22:23:18.666Z", + "sellPrice": 163.06, + "profit": -0.018457852060912314, + "timestamp": "2024-12-01T23:58:17.131Z" + }, + "OPMBCZ-44PWJ-PKY24G": { + "id": "OPMBCZ-44PWJ-PKY24G", + "userref": 1733098928, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.09", + "starttimestamp": "2024-12-02T00:22:10.635Z", + "volume": 0.16801936086139238, + "sellid": "OYOTQ2-DPNUR-7N6JIB", + "sellprice": "164.52", + "stopprice": 137.7765, + "startselltimestamp": "2024-12-02T04:00:50.623Z", + "sellPrice": 164.52, + "profit": 0.18877983308942484, + "timestamp": "2024-12-02T08:15:54.866Z" + }, + "OE6BAE-P4B5R-CT3JRZ": { + "id": "OE6BAE-P4B5R-CT3JRZ", + "userref": 1733099224, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.09", + "starttimestamp": "2024-12-02T00:27:06.682Z", + "volume": 0.11761238668116424, + "sellid": "O4R7DD-WSNR6-PMTITY", + "sellprice": "164.52", + "stopprice": 137.7765, + "startselltimestamp": "2024-12-02T04:00:51.371Z", + "sellPrice": 164.52, + "profit": 0.1321445731794894, + "timestamp": "2024-12-02T08:15:54.868Z" + }, + "O3RRZ7-QDUJS-UG45W3": { + "id": "O3RRZ7-QDUJS-UG45W3", + "userref": 1733099525, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.20", + "starttimestamp": "2024-12-02T00:32:06.606Z", + "volume": 0.08226948626129488, + "sellid": "O6KWFZ-H6QYQ-KU2NJO", + "sellprice": "164.63", + "stopprice": 137.86999999999998, + "startselltimestamp": "2024-12-02T04:00:51.845Z", + "sellPrice": 164.63, + "profit": 0.09236230683583115, + "timestamp": "2024-12-02T08:15:54.870Z" + }, + "OBY5ZQ-UYIX3-HNQZ6H": { + "id": "OBY5ZQ-UYIX3-HNQZ6H", + "userref": 1733119252, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.17", + "starttimestamp": "2024-12-02T06:00:53.847Z", + "volume": 0.05732425206312755, + "sellid": "OS3TGL-CC4IV-AWTQM5", + "sellprice": "164.60", + "stopprice": 137.84449999999998, + "startselltimestamp": "2024-12-02T06:15:53.830Z", + "sellPrice": 164.6, + "profit": 0.06437054912672796, + "timestamp": "2024-12-02T08:15:54.871Z" + }, + "OPGFUQ-G7DX4-CBZWZU": { + "id": "OPGFUQ-G7DX4-CBZWZU", + "userref": 1733120154, + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.10", + "starttimestamp": "2024-12-02T06:15:55.630Z", + "volume": 0.04010063504459683, + "sellid": "O7X7FD-IWLVL-IA7E4Q", + "status": "open", + "sellprice": "164.53", + "stopprice": 137.785, + "startselltimestamp": "2024-12-02T06:20:53.523Z", + "sellPrice": 164.53, + "profit": 0.04505226145990439, + "timestamp": "2024-12-02T08:15:54.873Z" + }, + "OO6DWP-SLZBQ-VV2C24": { + "id": "OO6DWP-SLZBQ-VV2C24", + "userref": 1733127355, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.30", + "starttimestamp": "2024-12-02T08:15:56.270Z", + "volume": 0.1691701491315282, + "sellid": "OJV5YH-POYKI-ZITZPR", + "sellprice": "164.73", + "stopprice": 137.955, + "startselltimestamp": "2024-12-02T08:45:56.074Z", + "sellPrice": 164.73, + "profit": 0.1897886069076742, + "timestamp": "2024-12-02T10:20:58.071Z" + }, + "OKZ4UD-LBZ4W-DPY6HC": { + "id": "OKZ4UD-LBZ4W-DPY6HC", + "userref": 1733127655, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.25", + "starttimestamp": "2024-12-02T08:20:56.577Z", + "volume": 0.11838891217274301, + "sellid": "OBFQ2R-33QDS-TBNRIB", + "sellprice": "164.68", + "stopprice": 137.9125, + "startselltimestamp": "2024-12-02T08:45:56.677Z", + "sellPrice": 164.68, + "profit": 0.13286550835322866, + "timestamp": "2024-12-02T10:20:58.073Z" + }, + "OFMKNZ-F5PAP-5HEDSG": { + "id": "OFMKNZ-F5PAP-5HEDSG", + "userref": 1733127955, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.25", + "starttimestamp": "2024-12-02T08:25:56.425Z", + "volume": 0.08287128145542783, + "sellid": "OQ6J5T-KTD6E-2WY3IB", + "sellprice": "164.68", + "stopprice": 137.9125, + "startselltimestamp": "2024-12-02T08:45:57.392Z", + "sellPrice": 164.68, + "profit": 0.09300478175179931, + "timestamp": "2024-12-02T10:20:58.075Z" + }, + "OCIY7Z-CGND5-ALH5P4": { + "id": "OCIY7Z-CGND5-ALH5P4", + "userref": 1733129455, + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.26", + "starttimestamp": "2024-12-02T08:50:57.047Z", + "volume": 0.057727459407416776, + "sellid": "OBXCYL-JZXQG-QH663K", + "status": "open", + "sellprice": "164.69", + "stopprice": 137.921, + "startselltimestamp": "2024-12-02T08:55:56.256Z", + "sellPrice": 164.69, + "profit": 0.06478175494700425, + "timestamp": "2024-12-02T10:20:58.077Z" + }, + "OU6RI3-YJSNZ-FVP36K": { + "id": "OU6RI3-YJSNZ-FVP36K", + "userref": 1733130056, + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "162.23", + "starttimestamp": "2024-12-02T09:00:57.236Z", + "volume": 0.04040389217345645, + "sellid": "OR7LUO-LBWST-EHSATD", + "status": "open", + "sellprice": "164.66", + "stopprice": 137.8955, + "startselltimestamp": "2024-12-02T09:05:56.185Z", + "sellPrice": 164.66, + "profit": 0.04535094473117453, + "timestamp": "2024-12-02T10:20:58.079Z" + }, + "ODPM5N-ZLM3D-QQCQCY": { + "id": "ODPM5N-ZLM3D-QQCQCY", + "userref": 1733144461, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "165.07", + "starttimestamp": "2024-12-02T13:01:02.515Z", + "volume": 0.057482776278336666, + "sellid": "O75VQA-MSVKC-I35YWO", + "sellprice": "167.55", + "stopprice": 140.30949999999999, + "startselltimestamp": "2024-12-02T17:31:05.381Z", + "sellPrice": 167.55, + "profit": 0.06607760098747541, + "timestamp": "2024-12-02T18:56:06.502Z" + }, + "OW5AEP-SOTHR-PI4IR2": { + "id": "OW5AEP-SOTHR-PI4IR2", + "userref": 1733144760, + "status": "open", + "pair": "XXMRZUSD", + "type": "sell", + "ordertype": "limit", + "price": "165.07", + "starttimestamp": "2024-12-02T13:06:01.547Z", + "volume": 0.04023931643950129, + "sellid": "ONIV4I-BFFVQ-4YUU72", + "sellprice": "167.55", + "stopprice": 140.30949999999999, + "startselltimestamp": "2024-12-02T17:31:05.958Z", + "sellPrice": 167.55, + "profit": 0.04625589903353684, + "timestamp": "2024-12-02T18:56:06.504Z" + }, + "OQ5EWX-2HCMD-MNQ6BQ": { + "id": "OQ5EWX-2HCMD-MNQ6BQ", + "userref": 1734237973, + "status": "open", + "pair": "GIGAUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.062824", + "starttimestamp": "2024-12-15T04:46:14.473Z", + "volume": 345.41115605248876, + "sellid": "OBFH7L-4CXVU-E7WEUE", + "sellprice": "0.063766", + "stopprice": 0.0534004, + "startselltimestamp": "2024-12-15T04:51:13.184Z", + "sellPrice": 0.063766, + "profit": 0.15047491602270802, + "timestamp": "2024-12-15T09:26:00.634Z" + }, + "OTFBCR-FFJ5G-P4XGDL": { + "id": "OTFBCR-FFJ5G-P4XGDL", + "userref": 1734238273, + "status": "open", + "pair": "GIGAUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.062836", + "starttimestamp": "2024-12-15T04:51:14.640Z", + "volume": 241.48099370916677, + "sellid": "OXVM63-262BM-22UWAQ", + "sellprice": "0.063779", + "stopprice": 0.0534106, + "startselltimestamp": "2024-12-15T04:56:01.631Z", + "sellPrice": 0.063779, + "profit": 0.10541611299379924, + "timestamp": "2024-12-15T09:26:00.636Z" + }, + "OWJ7H4-U36OU-G6KMAS": { + "id": "OWJ7H4-U36OU-G6KMAS", + "userref": 1734238287, + "pair": "GIGAUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.062836", + "starttimestamp": "2024-12-15T04:51:28.936Z", + "volume": 169.03640848034402, + "sellid": "OUKA2W-ETKXV-EKY5HN", + "sellprice": "0.063779", + "stopprice": 0.0534106, + "startselltimestamp": "2024-12-15T04:56:02.282Z", + "sellPrice": 0.063779, + "profit": 0.0737911537580091, + "timestamp": "2024-12-15T09:26:00.637Z" + }, + "O4UCCQ-UV4HO-KXKREL": { + "id": "O4UCCQ-UV4HO-KXKREL", + "userref": 1734238562, + "status": "open", + "pair": "GIGAUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.062836", + "starttimestamp": "2024-12-15T04:56:03.855Z", + "volume": 118.01720120251257, + "sellid": "OLGKKY-PFJDA-2X4FNJ", + "sellprice": "0.063779", + "stopprice": 0.0534106, + "startselltimestamp": "2024-12-15T04:59:48.985Z", + "sellPrice": 0.063779, + "profit": 0.0515192290129447, + "timestamp": "2024-12-15T09:26:00.640Z" + }, + "OBM2XS-YAWWP-GBSWFF": { + "id": "OBM2XS-YAWWP-GBSWFF", + "userref": 1734264908, + "pair": "GIGAUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.062380", + "starttimestamp": "2024-12-15T12:15:09.879Z", + "volume": 120.15476316112465, + "sellid": "OSBG32-F6PIZ-ANUTFT", + "sellprice": "0.063316", + "stopprice": 0.053022999999999994, + "startselltimestamp": "2024-12-15T12:16:08.511Z", + "sellPrice": 0.063316, + "profit": 0.05205296587760969, + "timestamp": "2024-12-15T12:48:09.755Z" + }, + "O72OWW-42HKN-CLSQX7": { + "id": "O72OWW-42HKN-CLSQX7", + "userref": 1734319900, + "status": "open", + "pair": "GIGAUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.068999", + "starttimestamp": "2024-12-16T03:31:41.481Z", + "volume": 158.37817747465007, + "sellid": "OWZNM2-OIBYK-PM6HKO", + "sellprice": "0.070034", + "stopprice": 0.058649150000000004, + "startselltimestamp": "2024-12-16T03:57:12.461Z", + "sellPrice": 0.070034, + "profit": 0.07584224109092846, + "timestamp": "2024-12-16T05:12:34.907Z" + }, + "OBTRWN-LQ6VP-AJIYVV": { + "id": "OBTRWN-LQ6VP-AJIYVV", + "userref": 1734319886, + "pair": "XDGUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.4074916", + "starttimestamp": "2024-12-16T03:31:27.655Z", + "volume": 26.81764333353071, + "sellid": "O7VX7Z-3HQHZ-KLL27P", + "status": "open", + "sellprice": "0.4136040", + "stopprice": 0.34636785999999997, + "startselltimestamp": "2024-12-16T03:57:06.841Z", + "sellPrice": 0.413604, + "profit": 0.07584076733774958, + "timestamp": "2024-12-16T17:17:41.972Z" + } +} \ No newline at end of file diff --git a/src/LocalStore/OpenTrades.json b/src/LocalStore/OpenTrades.json new file mode 100644 index 0000000..f5bbc2f --- /dev/null +++ b/src/LocalStore/OpenTrades.json @@ -0,0 +1,105 @@ +{ + "OUD5CV-CD7M5-PC42DT": { + "id": "OUD5CV-CD7M5-PC42DT", + "userref": 1746939220, + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "1.045188", + "starttimestamp": "2025-05-11T04:53:41.774Z", + "volume": 4.78382722, + "sellid": "OJFWEU-72CFF-5KPE4D", + "sellprice": "1.060866", + "stopprice": 0.8884098, + "startselltimestamp": "2025-05-11T14:13:52.788Z" + }, + "ORP4HY-R5NKT-2F66F5": { + "id": "ORP4HY-R5NKT-2F66F5", + "userref": 1746939223, + "pair": "GIGAUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.028026", + "starttimestamp": "2025-05-11T04:53:44.554Z", + "volume": 178.40895, + "sellid": "OFMP67-Z236I-DZOGIP", + "sellprice": "0.028446", + "stopprice": 0.0238221, + "startselltimestamp": "2025-05-11T05:24:25.528Z" + }, + "OUA6VO-RB6IM-QMMXMW": { + "id": "OUA6VO-RB6IM-QMMXMW", + "userref": 1746939226, + "status": "open", + "pair": "XDGUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.2401872", + "starttimestamp": "2025-05-11T04:53:47.473Z", + "volume": 20.81709816, + "sellid": "OVSIP6-4Z53V-RVMM6G", + "sellprice": "0.2437900", + "stopprice": 0.20415912, + "startselltimestamp": "2025-05-11T14:35:21.046Z" + }, + "ORXKJ7-CJEAR-RF7KF5": { + "id": "ORXKJ7-CJEAR-RF7KF5", + "userref": 1746939230, + "status": "open", + "pair": "ATOMUSD", + "type": "sell", + "ordertype": "limit", + "price": "5.2943", + "starttimestamp": "2025-05-11T04:53:51.632Z", + "volume": 0.94441749, + "sellid": "O24ZUM-MUVP6-BIYWNN", + "sellprice": "5.3737", + "stopprice": 4.5001549999999995, + "startselltimestamp": "2025-05-11T05:44:25.854Z" + }, + "OEJIUM-RU467-6QFNIV": { + "id": "OEJIUM-RU467-6QFNIV", + "userref": 1746939520, + "status": "open", + "pair": "ATOMUSD", + "type": "sell", + "ordertype": "limit", + "price": "5.2943", + "starttimestamp": "2025-05-11T04:58:42.133Z", + "volume": 0.76822504, + "sellid": "O3ZB54-272G7-J6EFN5", + "sellprice": "5.3737", + "stopprice": 4.5001549999999995, + "startselltimestamp": "2025-05-11T05:44:26.651Z" + }, + "O4KLLD-RSN7V-UYM763": { + "id": "O4KLLD-RSN7V-UYM763", + "userref": 1746939525, + "status": "open", + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "1.045188", + "starttimestamp": "2025-05-11T04:58:46.149Z", + "volume": 3.89134667, + "sellid": "OUYZEZ-VCY47-FAVQEM", + "sellprice": "1.060866", + "stopprice": 0.8884098, + "startselltimestamp": "2025-05-11T14:13:53.615Z" + }, + "OCBGVS-V4FWI-ZH7SP5": { + "id": "OCBGVS-V4FWI-ZH7SP5", + "userref": 1746939527, + "pair": "GIGAUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.028026", + "starttimestamp": "2025-05-11T04:58:48.858Z", + "volume": 145.12461, + "sellid": "O3GAWS-OITFS-PMSZZR", + "status": "open", + "sellprice": "0.028446", + "stopprice": 0.0238221, + "startselltimestamp": "2025-05-11T05:24:26.284Z" + } +} \ No newline at end of file diff --git a/src/LocalStore/Settings.json b/src/LocalStore/Settings.json new file mode 100644 index 0000000..98578f2 --- /dev/null +++ b/src/LocalStore/Settings.json @@ -0,0 +1,38 @@ +{ + "stopLossPercentage": 0.15, + "profitSavePercent": 0.075, + "maximumOrderSize": 0.75, + "tradingInterval": 5, + "tradingIntervalType": "minutes", + "maximumOrderValUSD": 5, + "priceRangeExclusion": 0.015, + "priceRangeExclusionMaxOpen": 3, + "profitTargetPercent": 0.015, + "profitAggUSD": 0.4985724690877609, + "totalProfit": 6.647632921170934, + "transactionFeePercent": 0.004, + "tradingCurrencies": [ + { + "tradingCurrency": "GIGA", + "allocation": 0.2 + }, + { + "tradingCurrency": "ATOM", + "allocation": 0.2 + }, + { + "tradingCurrency": "XXMRZ", + "allocation": 0.2, + "compPair": "XMRUSD" + }, + { + "tradingCurrency": "XDG", + "allocation": 0.2 + }, + { + "tradingCurrency": "NANO", + "allocation": 0.2 + } + ], + "profitWallet": "nano_1cjnndcda5w9c3sx6jo8kgdkn86i7dsi1nd3tr1x3scdmxutu8i7eodk5b83" +} \ No newline at end of file diff --git a/testdata.json b/testdata.json new file mode 100644 index 0000000..78f5729 --- /dev/null +++ b/testdata.json @@ -0,0 +1,1452 @@ +{ + "OR7BRF-3FCZX-IVIE45": { + "refid": null, + "userref": 1729400437, + "status": "canceled", + "opentm": 1729400439.0971694, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.854672", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.854672", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729400452.1897686 + }, + "OS4G2Z-2BFLL-NEB424": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729399517.097867, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.854672", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.854672", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729399532.2413132 + }, + "OBJ4IV-47FRP-6UW2CD": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729320690.933001, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.849749", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.849749", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729320989.5326679 + }, + "OCAOHF-2YUTU-EGMV6O": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729320522.3642707, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.849749", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.849749", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729320543.314352 + }, + "OSE5JN-PU7EN-MDPILW": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729320493.1821754, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.849749", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.849749", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729320540.3371964 + }, + "OXSPIA-NPGSP-C5O5F2": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729320328.73949, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.849749", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.849749", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729320340.1470675 + }, + "OVKKVW-2LEJ6-I73YIN": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729319298.0201352, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.849749", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.849749", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729319310.5846868 + }, + "OCPQUQ-XSEHF-KQURD2": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729319180.1031175, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.849749", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.849749", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729319188.8281982 + }, + "OSTB6N-6V4DZ-6W2ELH": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729319027.6212084, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.849749", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.849749", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729319037.9127803 + }, + "O4467W-RVQ7F-T5IDTX": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729317713.791928, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.849749", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.849749", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729317763.313629 + }, + "OECSDS-UIN5H-KG7T2H": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1729317684.6154819, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.849749", + "price2": "0", + "leverage": "none", + "order": "buy 5.10000000 NANOUSD @ limit 0.849749", + "close": "" + }, + "vol": "5.10000000", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "User requested", + "closetm": 1729317760.1122706 + }, + "OGN3HN-NF73L-THYC3V": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1729316274.3457627, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "ETHUSD", + "type": "sell", + "ordertype": "limit", + "price": "2645.21", + "price2": "0", + "leverage": "none", + "order": "sell 0.00566110 ETHUSD @ limit 2645.21", + "close": "" + }, + "vol": "0.00566110", + "vol_exec": "0.00566110", + "cost": "14.97480", + "fee": "0.05990", + "price": "2645.21", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fcib", + "reason": null, + "closetm": 1729316274.3458579 + }, + "OVYHYE-XHPZC-7CKINL": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1729315207.9384017, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "NANOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.868626", + "price2": "0", + "leverage": "none", + "order": "sell 5.01800000 NANOUSD @ limit 0.868626", + "close": "" + }, + "vol": "5.01800000", + "vol_exec": "5.01800000", + "cost": "4.359518", + "fee": "0.017438", + "price": "0.868776", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fcib", + "reason": null, + "closetm": 1729315207.9384968 + }, + "OYRCIN-DUMMT-UJ37NK": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1699515482.0451553, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "XRPUSDT", + "type": "buy", + "ordertype": "limit", + "price": "0.69737", + "price2": "0", + "leverage": "none", + "order": "buy 109.55146527 XRPUSDT @ limit 0.69737", + "close": "" + }, + "vol": "109.55146527", + "vol_exec": "109.55146527", + "cost": "76.34860718", + "fee": "0.19850638", + "price": "0.69692", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1699515482.0452263 + }, + "OLI6QS-ZWOCS-IE3Q2E": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1699515448.8655567, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "XRPUSD", + "type": "buy", + "ordertype": "limit", + "price": "0.69817", + "price2": "0", + "leverage": "none", + "order": "buy 46.52133434 XRPUSD @ limit 0.69817", + "close": "" + }, + "vol": "46.52133434", + "vol_exec": "46.52133434", + "cost": "32.45933061", + "fee": "0.08439426", + "price": "0.69773", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1699515448.8656137 + }, + "OORT2H-Y55T3-UWJT7V": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1699059647.6661956, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "buy", + "ordertype": "limit", + "price": "1.00000", + "price2": "0", + "leverage": "none", + "order": "buy 76.39790534 USDTUSD @ limit 1.00000", + "close": "" + }, + "vol": "76.39790534", + "vol_exec": "76.39790534", + "cost": "76.39790534", + "fee": "0.15279581", + "price": "1.00000", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1699462346.0675352 + }, + "O6SK53-WCKD5-SLESRV": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1699062200.0594494, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "sell", + "ordertype": "limit", + "price": "1.00063", + "price2": "0", + "leverage": "none", + "order": "sell 32.62846807 USDTUSD @ limit 1.00063", + "close": "" + }, + "vol": "32.62846807", + "vol_exec": "32.62846807", + "cost": "32.64902400", + "fee": "0.06529805", + "price": "1.00062", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "fcib", + "reason": null, + "closetm": 1699062200.0596287 + }, + "ORRIC7-TE7VJ-6SOXPW": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1699059594.582378, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "ALGOUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.11083", + "price2": "0", + "leverage": "none", + "order": "sell 340.24200000 ALGOUSD @ limit 0.11083", + "close": "" + }, + "vol": "340.24200000", + "vol_exec": "340.24200000", + "cost": "37.709021", + "fee": "0.098043", + "price": "0.11083", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fcib", + "reason": null, + "closetm": 1699059594.5827034 + }, + "O72FJL-OEIOJ-CSZHDV": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1699059115.64603, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "ATOMUSD", + "type": "sell", + "ordertype": "limit", + "price": "7.7170", + "price2": "0", + "leverage": "none", + "order": "sell 1.00786725 ATOMUSD @ limit 7.7170", + "close": "" + }, + "vol": "1.00786725", + "vol_exec": "1.00786725", + "cost": "7.777712", + "fee": "0.012444", + "price": "7.7170", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fcib", + "reason": null, + "closetm": 1699059151.4841993 + }, + "O2XRLW-JFEQN-ERFRMY": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1689268249.277277, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "XRPUSDT", + "type": "buy", + "ordertype": "limit", + "price": "0.63115", + "price2": "0", + "leverage": "none", + "order": "buy 51.77969939 XRPUSDT @ limit 0.63115", + "close": "" + }, + "vol": "51.77969939", + "vol_exec": "51.77969939", + "cost": "32.68075727", + "fee": "0.05228921", + "price": "0.63115", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1689268254.3415196 + }, + "O53I2S-KWZGL-EVGROY": { + "refid": null, + "userref": 0, + "status": "closed", + "opentm": 1688362184.7365737, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "XMRUSDT", + "type": "buy", + "ordertype": "limit", + "price": "168.59", + "price2": "0", + "leverage": "none", + "order": "buy 0.38991148 XMRUSDT @ limit 168.59", + "close": "" + }, + "vol": "0.38991148", + "vol_exec": "0.38991148", + "cost": "65.735176", + "fee": "0.170911", + "price": "168.58", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1688362184.7366211 + }, + "OTGBNP-3E7MX-N6HIGM": { + "refid": null, + "userref": 0, + "status": "canceled", + "opentm": 1688362075.3697999, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "XMRUSDT", + "type": "buy", + "ordertype": "limit", + "price": "168.33", + "price2": "0", + "leverage": "none", + "order": "buy 0.38991148 XMRUSDT @ limit 168.33", + "close": "" + }, + "vol": "0.38991148", + "vol_exec": "0.00000000", + "cost": "0.000000", + "fee": "0.000000", + "price": "0.000000", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": "Order replaced", + "closetm": 1688362184.7365618 + }, + "OAQ3AY-DDFCA-KO4IMG": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685500642.0808737, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "buy", + "ordertype": "limit", + "price": "1.00002", + "price2": "0", + "leverage": "none", + "order": "buy 124.27762161 USDTUSD @ limit 1.00002", + "close": "" + }, + "vol": "124.27762161", + "vol_exec": "124.27762161", + "cost": "124.28010716", + "fee": "0.24856021", + "price": "1.00001", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "post,fcib", + "reason": null, + "closetm": 1685502174.9230762 + }, + "ODMBEW-KJ4TV-3XLQIU": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685500638.8321748, + "starttm": 0, + "expiretm": 1685500663, + "descr": { + "pair": "ETHUSD", + "type": "sell", + "ordertype": "limit", + "price": "1894.58", + "price2": "0", + "leverage": "none", + "order": "sell 0.01258985 ETHUSD @ limit 1894.58", + "close": "" + }, + "vol": "0.01258985", + "vol_exec": "0.01258985", + "cost": "23.85248", + "fee": "0.06202", + "price": "1894.58", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685500638.8322601 + }, + "O5UZ67-YBGRF-M4MFFS": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685500638.1949883, + "starttm": 0, + "expiretm": 1685500643, + "descr": { + "pair": "ETHUSDT", + "type": "buy", + "ordertype": "limit", + "price": "1893.37", + "price2": "0", + "leverage": "none", + "order": "buy 0.01258985 ETHUSDT @ limit 1893.37", + "close": "" + }, + "vol": "0.01258985", + "vol_exec": "0.01258985", + "cost": "23.83536", + "fee": "0.06197", + "price": "1893.22", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685500638.1951056 + }, + "OW3KJA-THOLW-B2ESII": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685500603.306574, + "starttm": 0, + "expiretm": 1685500628, + "descr": { + "pair": "ETHUSD", + "type": "sell", + "ordertype": "limit", + "price": "1894.58", + "price2": "0", + "leverage": "none", + "order": "sell 0.01765212 ETHUSD @ limit 1894.58", + "close": "" + }, + "vol": "0.01765212", + "vol_exec": "0.01765212", + "cost": "33.44335", + "fee": "0.08695", + "price": "1894.57", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685500603.3067317 + }, + "ODBZFV-3LQSE-LDURVX": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685500602.595861, + "starttm": 0, + "expiretm": 1685500607, + "descr": { + "pair": "ETHUSDT", + "type": "buy", + "ordertype": "limit", + "price": "1893.69", + "price2": "0", + "leverage": "none", + "order": "buy 0.01765212 ETHUSDT @ limit 1893.69", + "close": "" + }, + "vol": "0.01765212", + "vol_exec": "0.01765212", + "cost": "33.42309", + "fee": "0.08690", + "price": "1893.43", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685500602.5960011 + }, + "OYUNZ4-67IJX-543DDK": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685500594.7428932, + "starttm": 0, + "expiretm": 1685500619, + "descr": { + "pair": "ETHUSD", + "type": "sell", + "ordertype": "limit", + "price": "1894.58", + "price2": "0", + "leverage": "none", + "order": "sell 0.01758298 ETHUSD @ limit 1894.58", + "close": "" + }, + "vol": "0.01758298", + "vol_exec": "0.01758298", + "cost": "33.31236", + "fee": "0.08661", + "price": "1894.57", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685500594.743021 + }, + "O233T2-OWKPK-HHXYI6": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685500594.0841043, + "starttm": 0, + "expiretm": 1685500599, + "descr": { + "pair": "ETHUSDT", + "type": "buy", + "ordertype": "limit", + "price": "1893.69", + "price2": "0", + "leverage": "none", + "order": "buy 0.01758298 ETHUSDT @ limit 1893.69", + "close": "" + }, + "vol": "0.01758298", + "vol_exec": "0.01758298", + "cost": "33.29214", + "fee": "0.08656", + "price": "1893.42", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685500594.0841892 + }, + "OG6CB4-CSHYJ-IYAXQS": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685500590.5650015, + "starttm": 0, + "expiretm": 1685500615, + "descr": { + "pair": "ETHUSD", + "type": "sell", + "ordertype": "limit", + "price": "1894.58", + "price2": "0", + "leverage": "none", + "order": "sell 0.01758298 ETHUSD @ limit 1894.58", + "close": "" + }, + "vol": "0.01758298", + "vol_exec": "0.01758298", + "cost": "33.31236", + "fee": "0.08661", + "price": "1894.57", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685500590.5652359 + }, + "O7TACK-62HQ3-2NSCX5": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685500589.840279, + "starttm": 0, + "expiretm": 1685500594, + "descr": { + "pair": "ETHUSDT", + "type": "buy", + "ordertype": "limit", + "price": "1893.69", + "price2": "0", + "leverage": "none", + "order": "buy 0.01758298 ETHUSDT @ limit 1893.69", + "close": "" + }, + "vol": "0.01758298", + "vol_exec": "0.01758298", + "cost": "33.29214", + "fee": "0.08656", + "price": "1893.42", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685500589.8407133 + }, + "O5EDET-3ZPBQ-CCHBGJ": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685498024.8747485, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "buy", + "ordertype": "limit", + "price": "1.00008", + "price2": "0", + "leverage": "none", + "order": "buy 127.03459820 USDTUSD @ limit 1.00008", + "close": "" + }, + "vol": "127.03459820", + "vol_exec": "127.03459820", + "cost": "127.04476097", + "fee": "0.25408952", + "price": "1.00008", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "post,fcib", + "reason": null, + "closetm": 1685498317.151053 + }, + "O4VP4X-4O2QP-IAA43V": { + "refid": null, + "userref": null, + "status": "canceled", + "opentm": 1685493996.1865976, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "buy", + "ordertype": "limit", + "price": "1.00005", + "price2": "0", + "leverage": "none", + "order": "buy 127.03459820 USDTUSD @ limit 1.00005", + "close": "" + }, + "vol": "127.03459820", + "vol_exec": "0.00000000", + "cost": "0.00000000", + "fee": "0.00000000", + "price": "0.00000000", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "post,fcib", + "reason": "Order replaced", + "closetm": 1685498024.8747423 + }, + "O3SSP3-NJXUX-BDRP6M": { + "refid": null, + "userref": null, + "status": "canceled", + "opentm": 1685484013.7145188, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "buy", + "ordertype": "limit", + "price": "1.00002", + "price2": "0", + "leverage": "none", + "order": "buy 127.03459820 USDTUSD @ limit 1.00002", + "close": "" + }, + "vol": "127.03459820", + "vol_exec": "0.00000000", + "cost": "0.00000000", + "fee": "0.00000000", + "price": "0.00000000", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "post,fcib", + "reason": "Order replaced", + "closetm": 1685493996.1865883 + }, + "OVCZ5J-S7VKC-OBRFF7": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685484010.2921183, + "starttm": 0, + "expiretm": 1685484035, + "descr": { + "pair": "XBTUSD", + "type": "sell", + "ordertype": "limit", + "price": "27730.0", + "price2": "0", + "leverage": "none", + "order": "sell 0.00178132 XBTUSD @ limit 27730.0", + "close": "" + }, + "vol": "0.00178132", + "vol_exec": "0.00178132", + "cost": "49.39600", + "fee": "0.12843", + "price": "27729.9", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685484010.292241 + }, + "OXVV7I-2GP5D-IV5P3U": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685484009.4330215, + "starttm": 0, + "expiretm": 1685484014, + "descr": { + "pair": "XBTUSDT", + "type": "buy", + "ordertype": "limit", + "price": "27717.3", + "price2": "0", + "leverage": "none", + "order": "buy 0.00178132 XBTUSDT @ limit 27717.3", + "close": "" + }, + "vol": "0.00178132", + "vol_exec": "0.00178132", + "cost": "49.37071", + "fee": "0.12836", + "price": "27715.8", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685484009.4331074 + }, + "OBCUGV-DCGML-QBARAR": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685483787.9021497, + "starttm": 0, + "expiretm": 1685483812, + "descr": { + "pair": "XDGUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.0724621", + "price2": "0", + "leverage": "none", + "order": "sell 1103.18999930 XDGUSD @ limit 0.0724621", + "close": "" + }, + "vol": "1103.18999930", + "vol_exec": "1103.18999930", + "cost": "79.939464048", + "fee": "0.207842607", + "price": "0.0724620", + "stopprice": "0.000000000", + "limitprice": "0.000000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685483787.9022496 + }, + "OUY7S4-X5LRZ-JXKFHT": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685483787.2412686, + "starttm": 0, + "expiretm": 1685483792, + "descr": { + "pair": "XDGUSDT", + "type": "buy", + "ordertype": "limit", + "price": "0.07244", + "price2": "0", + "leverage": "none", + "order": "buy 1103.18999930 XDGUSDT @ limit 0.07244", + "close": "" + }, + "vol": "1103.18999930", + "vol_exec": "1103.18999930", + "cost": "79.915083549", + "fee": "0.207779217", + "price": "0.07243", + "stopprice": "0.000000000", + "limitprice": "0.000000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685483787.241351 + }, + "OZKBHJ-YLCFQ-EFAKSX": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685483048.9949782, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "buy", + "ordertype": "limit", + "price": "1.00002", + "price2": "0", + "leverage": "none", + "order": "buy 119.18637871 USDTUSD @ limit 1.00002", + "close": "" + }, + "vol": "119.18637871", + "vol_exec": "119.18637871", + "cost": "119.18876244", + "fee": "0.23837752", + "price": "1.00002", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "post,fcib", + "reason": null, + "closetm": 1685483771.3643172 + }, + "OMAEYR-LL4XP-TG53RA": { + "refid": null, + "userref": null, + "status": "canceled", + "opentm": 1685478724.7345088, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "buy", + "ordertype": "limit", + "price": "1.00000", + "price2": "0", + "leverage": "none", + "order": "buy 119.18912000 USDTUSD @ limit 1.00000", + "close": "" + }, + "vol": "119.18912000", + "vol_exec": "0.00000000", + "cost": "0.00000000", + "fee": "0.00000000", + "price": "0.00000000", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "post,fcib", + "reason": "User requested", + "closetm": 1685483032.1581073 + }, + "OUVEXH-N4ILZ-IE36DS": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685478717.075193, + "starttm": 0, + "expiretm": 1685478742, + "descr": { + "pair": "SOLUSD", + "type": "sell", + "ordertype": "limit", + "price": "21.27", + "price2": "0", + "leverage": "none", + "order": "sell 2.25524919 SOLUSD @ limit 21.27", + "close": "" + }, + "vol": "2.25524919", + "vol_exec": "2.25524919", + "cost": "47.96915", + "fee": "0.12472", + "price": "21.26", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685478717.075344 + }, + "OG2TMU-CDSXD-STUPU4": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685478716.393713, + "starttm": 0, + "expiretm": 1685478721, + "descr": { + "pair": "SOLUSDT", + "type": "buy", + "ordertype": "limit", + "price": "21.26", + "price2": "0", + "leverage": "none", + "order": "buy 0.84335366 SOLUSDT @ limit 21.26", + "close": "" + }, + "vol": "0.84335366", + "vol_exec": "0.84335366", + "cost": "17.929699", + "fee": "0.046617", + "price": "21.26", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685478716.3941534 + }, + "OCXIZL-7L4HO-WBYZAQ": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685478018.1441655, + "starttm": 0, + "expiretm": 1685478043, + "descr": { + "pair": "ETHUSD", + "type": "sell", + "ordertype": "limit", + "price": "1903.65", + "price2": "0", + "leverage": "none", + "order": "sell 0.04090391 ETHUSD @ limit 1903.65", + "close": "" + }, + "vol": "0.04090391", + "vol_exec": "0.04090391", + "cost": "77.86673", + "fee": "0.20245", + "price": "1903.65", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685478018.1444123 + }, + "OOLJSG-KJZIS-ZRORGP": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685478017.1354156, + "starttm": 0, + "expiretm": 1685478022, + "descr": { + "pair": "ETHUSDT", + "type": "buy", + "ordertype": "limit", + "price": "1903.06", + "price2": "0", + "leverage": "none", + "order": "buy 0.04090391 ETHUSDT @ limit 1903.06", + "close": "" + }, + "vol": "0.04090391", + "vol_exec": "0.04090391", + "cost": "77.84259", + "fee": "0.20239", + "price": "1903.05", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685478017.1356235 + }, + "ONXW6D-5FSDE-U3LLD5": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685477778.4074392, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "buy", + "ordertype": "limit", + "price": "1.00000", + "price2": "0", + "leverage": "none", + "order": "buy 93.91080000 USDTUSD @ limit 1.00000", + "close": "" + }, + "vol": "93.91080000", + "vol_exec": "93.91080000", + "cost": "93.91080000", + "fee": "0.18782160", + "price": "1.00000", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "post,fcib", + "reason": null, + "closetm": 1685477890.720806 + }, + "OGASCZ-4SDJV-W2H4U5": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685477770.846214, + "starttm": 0, + "expiretm": 1685477795, + "descr": { + "pair": "ADAUSD", + "type": "sell", + "ordertype": "limit", + "price": "0.378243", + "price2": "0", + "leverage": "none", + "order": "sell 246.26837437 ADAUSD @ limit 0.378243", + "close": "" + }, + "vol": "246.26837437", + "vol_exec": "246.26837437", + "cost": "93.149289", + "fee": "0.242188", + "price": "0.378243", + "stopprice": "0.000000", + "limitprice": "0.000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685477770.8463166 + }, + "O7FU2Y-6U4EM-ZVMBUF": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685477770.116657, + "starttm": 0, + "expiretm": 1685477775, + "descr": { + "pair": "ADAUSDT", + "type": "buy", + "ordertype": "limit", + "price": "0.378142", + "price2": "0", + "leverage": "none", + "order": "buy 246.26190127 ADAUSDT @ limit 0.378142", + "close": "" + }, + "vol": "246.26190127", + "vol_exec": "246.26190127", + "cost": "93.12098282", + "fee": "0.24211456", + "price": "0.378137", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685477770.1167376 + }, + "OXZAMJ-J3FLY-HZ22RJ": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685471401.9812553, + "starttm": 0, + "expiretm": 0, + "descr": { + "pair": "USDTUSD", + "type": "buy", + "ordertype": "limit", + "price": "1.00000", + "price2": "0", + "leverage": "none", + "order": "buy 97.92544000 USDTUSD @ limit 1.00000", + "close": "" + }, + "vol": "97.92544000", + "vol_exec": "97.92544000", + "cost": "97.92544000", + "fee": "0.19585088", + "price": "1.00000", + "stopprice": "0.00000000", + "limitprice": "0.00000000", + "misc": "", + "oflags": "post,fcib", + "reason": null, + "closetm": 1685477760.886782 + }, + "O3ESGH-HNFG4-APRWZG": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685471377.2360668, + "starttm": 0, + "expiretm": 1685471402, + "descr": { + "pair": "XBTUSD", + "type": "sell", + "ordertype": "limit", + "price": "27707.0", + "price2": "0", + "leverage": "none", + "order": "sell 0.00363583 XBTUSD @ limit 27707.0", + "close": "" + }, + "vol": "0.00363583", + "vol_exec": "0.00363583", + "cost": "100.73794", + "fee": "0.26192", + "price": "27706.9", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685471377.2361596 + }, + "OZWYPZ-H2MR5-Q7LK7Y": { + "refid": null, + "userref": null, + "status": "closed", + "opentm": 1685471376.547824, + "starttm": 0, + "expiretm": 1685471381, + "descr": { + "pair": "XBTUSDT", + "type": "buy", + "ordertype": "limit", + "price": "27702.1", + "price2": "0", + "leverage": "none", + "order": "buy 0.00166351 XBTUSDT @ limit 27702.1", + "close": "" + }, + "vol": "0.00166351", + "vol_exec": "0.00166351", + "cost": "46.08272", + "fee": "0.11982", + "price": "27702.0", + "stopprice": "0.00000", + "limitprice": "0.00000", + "misc": "", + "oflags": "fciq", + "reason": null, + "closetm": 1685471376.5479343 + } +} \ No newline at end of file diff --git a/utils.js b/utils.js new file mode 100644 index 0000000..173ff7d --- /dev/null +++ b/utils.js @@ -0,0 +1,530 @@ +const fs = require('fs'); +const { Kraken } = require('node-kraken-api'); +const dotenv = require('dotenv'); +dotenv.config(); +const settingsFile = './src/LocalStore/Settings.json'; + +let settings = readJsonFile(settingsFile); +const API_KEY = process.env.KRAKEN_API_KEY; +const API_SECRET = process.env.KRAKEN_API_SECRET; +const kraken = new Kraken({ key: API_KEY, secret: API_SECRET }); +let CURRENCY_INFO = null; +let tradingCurrency = null; +//XXMRZUSD + + + +const openTradesFile = './src/LocalStore/OpenTrades.json'; +const closedTradesFile = './src/LocalStore/ClosedTrades.json'; +function readJsonFile(filePath) { + try { + const data = fs.readFileSync(filePath); + return JSON.parse(data); + } catch (error) { + console.error(`Error reading file ${filePath}:`, error); + return null; + } +} + + +function writeJsonFile(filePath, data) { + try { + fs.writeFileSync(filePath, JSON.stringify(data, null, 2)); + } catch (error) { + console.error(`Error writing file ${filePath}:`, error); + } +} + +async function getHistoricalData(pair, interval = 15) { + try { + const response = await kraken.ohlc( { pair: pair, interval: interval }); + // console.log(response[pair]) + return response[pair]; + } catch (error) { + console.error('Error fetching historical data:', error); + return null; + } +} + +async function getAvailableUSDBalance(allocation) { + try { + const settings = readJsonFile(settingsFile); + const response = await kraken.balance( ); + let openTrades = await getAllOpenOrders(false); + let floatingTrades = 0; + let tradeIds = Object.keys(openTrades); + for(let x = 0; x < tradeIds.length; x++){ + let key = tradeIds[x]; + let trade = openTrades[key]; + if(trade.descr.type !== 'buy') + continue + let total = parseFloat(trade.vol) * parseFloat(trade.descr.price) + floatingTrades += total; + } + console.log(`USD BALANCE: ${parseFloat(response.ZUSD)}`) + console.log(`USD FLOATING: ${floatingTrades}`) + console.log(`USD BALANCE AFTER TRADES: ${parseFloat(response.ZUSD) - floatingTrades}`) + + return Math.max(parseFloat(response.ZUSD) - floatingTrades - settings.profitAggUSD, 0) * allocation; + } catch (error) { + console.error('Error fetching available USD balance:', error); + return 0; + } +} + +async function evaluateMarketConditions(pair) { + console.log("evaluateMarketConditions") + return true + const data = await getHistoricalData(pair); + if (!data) return false; + + + const lastTwoDays = data.slice(-2); + // console.log(lastTwoDays) + const priceChange = (lastTwoDays[1][4] - lastTwoDays[0][1]) / lastTwoDays[0][1] * 100; + console.log((lastTwoDays[1][4] - lastTwoDays[0][4]), lastTwoDays[0][4], priceChange) + + if (Math.abs(priceChange) >= 3.5) { + console.log('Volatility detected. Trading halted.'); + return false; + } + + return true; +} +function syncSettings(){ + settings = readJsonFile(settingsFile); + return settings; +} + +async function getCurrencyInfo(cur){ + settings = readJsonFile(settingsFile); + console.log("Setting Currency", cur) + tradingCurrency = cur; + const pairData = await kraken.assetPairs( { + assets: tradingCurrency + "USD", + }); + // console.log("pairData", pairData[tradingCurrency + "USD"]); + CURRENCY_INFO = pairData[tradingCurrency + "USD"]; + CURRENCY_INFO.costmin = parseFloat(CURRENCY_INFO.costmin); + CURRENCY_INFO.ordermin = parseFloat( CURRENCY_INFO.ordermin); + + return CURRENCY_INFO; +} + +async function placeBuyOrder(pair, v, p) { + let volume = v; + let price = p; + if(volume * price >= settings.maximumOrderValUSD){ + volume = settings.maximumOrderValUSD / price; + } + try { + let userref = Math.floor(Date.now() / 1000); + // console.log("CURRENCY_INFO", CURRENCY_INFO); + if(!CURRENCY_INFO){ + const pairData = await kraken.assetPairs( { + assets: tradingCurrency + "USD", + }); + // console.log("pairData", pairData[tradingCurrency + "USD"]); + CURRENCY_INFO = pairData[tradingCurrency + "USD"]; + CURRENCY_INFO.costmin = parseFloat(CURRENCY_INFO.costmin); + CURRENCY_INFO.ordermin = parseFloat( CURRENCY_INFO.ordermin); + } + if(CURRENCY_INFO.ordermin * 1.02 > volume){ + console.log("OrderPlacement is below minimum Volume required ", `${CURRENCY_INFO.ordermin * 1.02} > ${volume}`) + return null; + } + let usdBalance = await getAvailableUSDBalance(); + console.log("CURRENCY_INFO", CURRENCY_INFO, ) + console.log("usdBalance", usdBalance, ) + console.log({ + pair: pair, + type: 'buy', + ordertype: 'limit', + price: price.toFixed(CURRENCY_INFO.pair_decimals), + volume: CURRENCY_INFO.ordermin > volume ? CURRENCY_INFO.ordermin * 1.02 : volume, + userref: userref, + }) + const response = await kraken.addOrder( { + pair: pair, + type: 'buy', + ordertype: 'limit', + price: price.toFixed(CURRENCY_INFO.pair_decimals), + volume: CURRENCY_INFO.ordermin > volume ? CURRENCY_INFO.ordermin * 1.02 : volume, + userref: userref, + }); + let order = await getOpenOrder(response.txid[0]) + console.log("placeBuyOrder", JSON.stringify(response, null ,4)); + return { + id: response.txid[0], + userref: userref, + status: order.status, + pair: pair, + type: 'buy', + ordertype: 'limit', + price: price.toFixed(CURRENCY_INFO.pair_decimals), + starttimestamp: new Date().toISOString(), + volume: CURRENCY_INFO.ordermin > volume ? CURRENCY_INFO.ordermin * 1.02 : volume, + }; + } catch (error) { + console.error('Error placing buy order:', error); + return null; + } +} + +function convertAssetKeys(tradingSymbol){ + const assetMap = { + 'XXMRZ': 'XXMR', + 'XXMR': 'XXMRZ', + 'XDG': 'XXDG', + 'XXDG': 'XDG', + }; + + return assetMap[tradingSymbol] || tradingSymbol; +} + + +async function placeSellOrder(pair, volume, price, stopLoss, userRef, id, buyOrder) { + try { + if(!CURRENCY_INFO){ + const pairData = await kraken.assetPairs({ + assets: tradingCurrency + "USD", + }); + CURRENCY_INFO = pairData[tradingCurrency + "USD"]; + CURRENCY_INFO.costmin = parseFloat(CURRENCY_INFO.costmin); + CURRENCY_INFO.ordermin = parseFloat(CURRENCY_INFO.ordermin); + } + + // Get the actual available balance + const balanceResponse = await kraken.balance(); + // const assetKey = tradingCurrency === 'XXMRZ' ? 'XXMR' : tradingCurrency; + const assetKey = convertAssetKeys(tradingCurrency); + const availableBalance = parseFloat(balanceResponse[assetKey] || 0); + // if(availableBalance < 1.0){ + // console.log(JSON.stringify(balanceResponse, null, 4)) + // console.log(assetKey, balanceResponse[assetKey]) + // console.log(tradingCurrency) + // } + // Use the smaller of requested volume or available balance + // console.log("Sell Volume picker", volume, availableBalance) + const adjustedVolume = Math.min(volume, availableBalance); + + // Round to appropriate decimal places based on lot_decimals + const roundedVolume = parseFloat(adjustedVolume.toFixed(CURRENCY_INFO.lot_decimals)); + + if(CURRENCY_INFO.ordermin * 1.02 > roundedVolume){ + console.log("SellOrderPlacement is below minimum Volume required ", `${CURRENCY_INFO.ordermin * 1.02} > ${roundedVolume}`) + return null; + } + // console.log(`Available balance: ${availableBalance} ${tradingCurrency}`); + // console.log(`Adjusted volume: ${roundedVolume} ${tradingCurrency}`); + + const response = await kraken.addOrder({ + pair: pair, + type: 'sell', + ordertype: 'limit', + price: price.toFixed(CURRENCY_INFO.pair_decimals), + volume: roundedVolume, + userref: userRef, + }); + + let order = await getOpenOrder(response.txid[0]) + console.log("placeSellOrder", response); + return { + ...buyOrder, + id: id, + sellid: response.txid[0], + status: order.status, + pair: pair, + type: 'sell', + ordertype: 'limit', + sellprice: price.toFixed(CURRENCY_INFO.pair_decimals), + volume: roundedVolume, + userref: userRef, + stopprice: stopLoss, + startselltimestamp: new Date().toISOString(), + }; + } catch (error) { + console.error('Error placing sell order:', error); + return null; + } +} + + +// need to randomize order of executed currencies to avoid all balances +// shifting to first currency in list over time as sells occur +// the resulting income is added to the general pool to be split across all currencies +// randomizing order should mean all currencies should keep their relative allocation +// regardless of profitability of that trading currency +function shuffle(array) { + let currentIndex = array.length; + + while (currentIndex != 0) { + let randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex--; + [array[currentIndex], array[randomIndex]] = [ + array[randomIndex], array[currentIndex]]; + } +} + + +function sleep(ms) { + console.log("Waiting " + ms) + return new Promise(resolve => setTimeout(resolve, ms)); +} +async function monitorOrderComplete(id) { + try { + + let response = await kraken.openOrders( ); + console.log("monitorOrderComplete", JSON.stringify(response, null, 4)) + while(response.open.hasOwnProperty(id)){ + await sleep(60000); + response = await kraken.openOrders( ); + } + return true; + } catch (error) { + console.error('Error monitoring order:', id, error); + return false; + } +} +async function getOpenOrder(id) { + try { + + let response = await kraken.openOrders( ); + // console.log("getAllOrders", JSON.stringify(response, null, 4)) + return response?.open[id] || {}; + } catch (error) { + console.error('Error getOpenOrder order:', id, error); + return {}; + } +} +async function getAllOpenOrders(log = false) { + try { + + let response = await kraken.openOrders( ); + if(log) + console.log("getAllOrders", JSON.stringify(response, null, 4)) + return response?.open || {}; + } catch (error) { + console.error('Error getAllOpenOrders order:', error); + return {}; + } +} +async function getAllClosedOrders() { + try { + + let response = await kraken.closedOrders( ); + // console.log("getAllClosedOrders", JSON.stringify(response, null, 4)) + return response?.closed || {}; + } catch (error) { + console.error('Error getAllClosedOrders order:', error); + return {}; + } +} + + +async function saveProfit(profitSaveAmount, tradeProfit) { + // not actually transferring to a different wallet just keeping track of profit which will be removed from usd balance so its not used for orders effectivly saving it + try { + const settings = readJsonFile(settingsFile); + let reduction = settings.profitAggUSD + profitSaveAmount; + settings.profitAggUSD = reduction; + settings.totalProfit = settings.totalProfit + tradeProfit; + writeJsonFile(settingsFile, settings) + console.log(`Saved ${profitSaveAmount} USD to profit Segment, current Total Profit: ${reduction}`); + return reduction; + } catch (error) { + console.error('Error transferring profit:', error); + } +} + + +async function transferProfit(profitAmount) { + try { + if(tradingCurrency !== "NANO"){ + return false; + } + const settings = readJsonFile(settingsFile); + let reduction = settings.profitAggUSD - profitAmount; + if(reduction < 0) + reduction = 0; + settings.profitAggUSD = reduction; + const response = await kraken.withdraw({ + asset: 'USD', + key: settings.profitWallet, + amount: profitAmount, + }); + console.log(`Transferred: ${profitAmount} USD to profit wallet: ${settings.profitWallet}, current local Profit Save: ${settings.profitAggUSD}`); + return response; + } catch (error) { + console.error('Error transferring profit:', error); + } +} + + +async function calculateAdaptiveTargets(pair, baseTarget = 0.015, baseStopLoss = 0.15, riskRewardRatio = 10) { + try { + // Get recent price data (1-hour candles for the past 24 hours) + const recentCandles = await getHistoricalData(pair, 60); + if (!recentCandles || recentCandles.length < 24) { + console.log(`Insufficient historical data for ${pair}, using base values`); + return { profitTarget: baseTarget, stopLoss: baseStopLoss }; + } + + const last24Hours = recentCandles.slice(-24); + + // volatility using ATR method + let atr = 0; + for (let i = 1; i < last24Hours.length; i++) { + const high = parseFloat(last24Hours[i][2]); + const low = parseFloat(last24Hours[i][3]); + const prevClose = parseFloat(last24Hours[i-1][4]); + + const tr = Math.max( + high - low, + Math.abs(high - prevClose), + Math.abs(low - prevClose) + ); + + atr += tr; + } + atr /= (last24Hours.length - 1); + + // market direction (positive or negative) + const priceStart = parseFloat(last24Hours[0][1]); // Open of first candle + const priceEnd = parseFloat(last24Hours[last24Hours.length - 1][4]); // Close of last candle + const priceChange = (priceEnd - priceStart) / priceStart; + const isUptrend = priceChange >= 0; + + // Get current price + const currentPrice = priceEnd; + const volatilityPercent = atr / currentPrice; + + // Calculate baseline volatility + const baselineVolatility = 0.02; // 2% as baseline + const volatilityFactor = volatilityPercent / baselineVolatility; + + // Asymmetric adjustments based on market direction + let profitTargetAdjustment, stopLossAdjustment; + + if (isUptrend) { + // Make sure high volatility increases profit target + profitTargetAdjustment = Math.min(2.0, 0.8 + (volatilityFactor * 0.4)); + // Keep stop loss tighter in uptrend + stopLossAdjustment = Math.min(1.2, Math.max(0.7, volatilityFactor * 0.6)); + + console.log(`Uptrend detected (${(priceChange * 100).toFixed(2)}%), expanding profit target`); + } else { + // REDUCE profit target in downtrend, regardless of volatility + profitTargetAdjustment = Math.min(0.9, Math.max(0.5, 1.0 - (volatilityFactor * 0.2))); + // Wider stop loss in downtrend to avoid whipsaws + stopLossAdjustment = Math.min(1.5, Math.max(1.0, volatilityFactor * 0.8)); + + console.log(`Downtrend detected (${(priceChange * 100).toFixed(2)}%), reducing profit target`); + } + const adjustedTarget = baseTarget * profitTargetAdjustment; + const adjustedStopLoss = baseStopLoss * stopLossAdjustment; + + const recentCandles4h = last24Hours.slice(-4); + const recent4hChange = (parseFloat(recentCandles4h[recentCandles4h.length-1][4]) - + parseFloat(recentCandles4h[0][1])) / parseFloat(recentCandles4h[0][1]); + + // Further adjust based on recent momentum + let finalProfitTarget = adjustedTarget; + let finalStopLoss = adjustedStopLoss; + + if (recent4hChange > 0.01) { // Strong recent upward momentum (>1%) + finalProfitTarget *= 1.1; // Increase profit target by 10% + console.log(`Strong recent upward momentum (${(recent4hChange * 100).toFixed(2)}%), further increasing profit target`); + } else if (recent4hChange < -0.01) { // Strong recent downward momentum (>1%) + finalStopLoss *= 0.9; // Tighten stop loss by 10% + console.log(`Strong recent downward momentum (${(recent4hChange * 100).toFixed(2)}%), tightening stop loss`); + } + + // Calculate actual risk/reward ratio + const riskRewardRatio = finalProfitTarget / finalStopLoss; + + console.log(` + Adaptive Analysis for ${pair}: + - Overall Direction: ${isUptrend ? 'Uptrend' : 'Downtrend'} (${(priceChange * 100).toFixed(2)}%) + - Recent 4h Momentum: ${(recent4hChange * 100).toFixed(2)}% + - Volatility: ${(volatilityPercent * 100).toFixed(2)}% + - Volatility Factor: ${volatilityFactor.toFixed(2)} + - Profit Target: ${(finalProfitTarget * 100).toFixed(2)}% (from base ${(baseTarget * 100).toFixed(2)}%) + - Stop Loss: ${(finalStopLoss * 100).toFixed(2)}% (from base ${(baseStopLoss * 100).toFixed(2)}%) + - Risk/Reward Ratio: ${riskRewardRatio.toFixed(2)} + `); + + return { + profitTarget: finalProfitTarget, + stopLoss: finalStopLoss, + volatility: volatilityPercent, + direction: isUptrend ? 'up' : 'down', + riskRewardRatio: riskRewardRatio, + recentMomentum: recent4hChange + }; + } catch (error) { + console.error(`Error calculating adaptive targets for ${pair}:`, error); + // Fall back to base values if there's an error + return { profitTarget: baseTarget, stopLoss: baseStopLoss }; + } +} + + + +async function manageStaleOrders() { + const openTrades = readJsonFile(openTradesFile); + const currentTime = new Date().getTime(); + const maxOrderAge = 12 * 60 * 60 * 1000; // 12 hours in milliseconds + + for (const [id, trade] of Object.entries(openTrades)) { + if (trade.type === 'buy' && new Date(trade.starttimestamp).getTime() + maxOrderAge < currentTime) { + // Cancel stale buy orders + try { + await kraken.cancelOrder({ txid: id }); + delete openTrades[id]; + console.log(`Canceled stale buy order: ${id}`); + } catch (error) { + console.error(`Failed to cancel order ${id}:`, error); + } + } + } + + writeJsonFile(openTradesFile, openTrades); +} + +function setTradingCurrency(cur){ + tradingCurrency = cur; +} +function setCurrencyInfo(cur){ + CURRENCY_INFO = cur; +} + +module.exports = { + settings, + transferProfit, + saveProfit, + manageStaleOrders, + calculateAdaptiveTargets, + getAllClosedOrders, + getAllOpenOrders, + getOpenOrder, + monitorOrderComplete, + sleep, + placeSellOrder, + placeBuyOrder, + evaluateMarketConditions, + getAvailableUSDBalance, + getHistoricalData, + readJsonFile, + writeJsonFile, + settingsFile, + CURRENCY_INFO, + getCurrencyInfo, + openTradesFile, + closedTradesFile, + tradingCurrency, + setTradingCurrency, + setCurrencyInfo, + shuffle, + syncSettings +} \ No newline at end of file