UNPKG

@backtest/command-line

Version:

This project is a CLI build around Backtest, a library for trading developers

137 lines 7.07 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.resultsPortal = resultsPortal; const run_strategy_1 = require("../strategies/run-strategy"); const portals_1 = require("../../helpers/portals"); const charts_1 = require("../../helpers/charts"); const parse_1 = require("../../helpers/parse"); const headers_1 = require("../../infra/headers"); const colors_1 = require("../../infra/colors"); const framework_1 = require("@backtest/framework"); function resultsPortal(results, newResult) { return __awaiter(this, void 0, void 0, function* () { if (!newResult) console.clear(); let back = false; let portalReturn = { error: false, data: '' }; let choices = [ '🎉 All Trading Results In Browser', '🚀 Statistic Trading Results In CLI', '📋 Table Of All Trades In CLI', newResult ? '💾 Save Results' : '🔥 Delete Result', '🏃 Run Trading Strategy', '🔮 Run Trading Strategy (more options)', (0, colors_1.colorBack)('👈 Back') ]; while (!back) { (0, headers_1.headerStrategyResults)(); yield (0, portals_1.handlePortalReturn)(portalReturn); const choiceCLI = yield (0, portals_1.interactCLI)({ type: 'autocomplete', message: 'Choose what to see:', choices }); let shouldClear = true; if (choiceCLI.includes('🎉')) { const runResultsStats = yield (0, framework_1.parseRunResultsStats)(results); yield (0, charts_1.createResultsCharts)(results.allWorths, results.candles, results.allOrders, runResultsStats); } else if (choiceCLI.includes('🚀')) { console.clear(); const runResultsStats = yield (0, framework_1.parseRunResultsStats)(results); console.log((0, colors_1.colorHeader)('* GENERAL *')); (0, parse_1.removeIndexFromTable)(runResultsStats.generalData); console.log((0, colors_1.colorHeader)('* TOTALS *')); (0, parse_1.removeIndexFromTable)(runResultsStats.totals); console.log((0, colors_1.colorHeader)('* TRADES *')); (0, parse_1.removeIndexFromTable)(runResultsStats.trades); console.log((0, colors_1.colorHeader)('* TRADE BUY / SELL AMOUNTS *')); (0, parse_1.removeIndexFromTable)(runResultsStats.tradeBuySellAmounts); console.log((0, colors_1.colorHeader)('* ASSET AMOUNTS / PERCENTAGES *')); (0, parse_1.removeIndexFromTable)(runResultsStats.assetAmountsPercentages); shouldClear = false; } else if (choiceCLI.includes('📋')) { console.clear(); let allOrdersCopy = results.allOrders; const hasNonZeroBorrowedBaseAmount = allOrdersCopy.some((order) => order.borrowedBaseAmount !== 0); if (!hasNonZeroBorrowedBaseAmount) { allOrdersCopy = allOrdersCopy.map((_a) => { var { borrowedBaseAmount } = _a, rest = __rest(_a, ["borrowedBaseAmount"]); return rest; }); } allOrdersCopy = allOrdersCopy.map((order) => { let newOrder = Object.assign(Object.assign({}, order), { time: new Date(order.time).toLocaleString(), baseAmount: (0, parse_1.round)(order.baseAmount) }); if (order.borrowedBaseAmount) { newOrder.borrowedBaseAmount = (0, parse_1.round)(order.borrowedBaseAmount); } return newOrder; }); console.table(allOrdersCopy); shouldClear = false; } else if (choiceCLI.includes('💾')) { const allResults = yield (0, framework_1.findResultNames)(); const resultsName = yield (0, portals_1.interactCLI)({ type: 'input', message: 'Type A Name For The Results:' }); if (resultsName !== undefined) { results.name = resultsName; } let override = false; if (allResults.includes(results.name)) { const saveResultsChoice = yield (0, portals_1.interactCLI)({ type: 'autocomplete', message: `Results ${results.name} has saved results already, would you like to rewrite them`, choices: ['Yes', 'No'] }); override = saveResultsChoice === 'Yes'; } console.clear(); yield (0, framework_1.saveResult)(results.name, results, override); return { error: false, data: `Successfully saved trading results for ${results.name}` }; } else if (choiceCLI.includes('🔥')) { console.clear(); yield (0, framework_1.deleteResult)(results.name); return { error: false, data: `Successfully deleted trading results for ${results.name}` }; } else if (choiceCLI.includes('🏃')) { portalReturn = yield (0, run_strategy_1.runStrategyPortal)(true); } else if (choiceCLI.includes('🔮')) { portalReturn = yield (0, run_strategy_1.runStrategyPortal)(false); } else if (choiceCLI.includes('👈')) { back = true; } if (shouldClear) { console.clear(); } } return portalReturn; }); } //# sourceMappingURL=run-results.js.map