UNPKG

ta-pattern-lib

Version:

Technical Analysis and Backtesting Framework for Node.js

104 lines 4.17 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const feature_indicators_formulaes_1 = require("./features/feature_indicators_formulaes"); const feature_strategy_runner_1 = require("./features/feature_strategy_runner"); const fs = __importStar(require("fs")); const r = fs.readFileSync(process.cwd() + "/src/sample_ohlc.json", "utf-8"); const rs = JSON.parse(r); const candles = rs.data.symbol_ticks.map((item) => ({ ...item, open: item.open, close: item.close, high: item.high, low: item.low, })); // const parser = new DSLParser(candles, DEFAULT_FUNCTION_REGISTRY); // const index = 2; // const result = parser.evaluate(`stop_loss()`, {entry_price: 20, stop_price:30}); // console.log(`DSL at index ${index}:`, result); // && ema(20, 0) > ema(50, 0) // && close(1) > open(1) // && volume(1) > max(volume(2),volume(1)) // && (close(0) > ema(20, 0) || close(0) > ema(50, 0)) const s_schema = { name: "VWAP + EMA Pullback with Breakout Confirmation", warmup_period: 10, capital: 10000, risk_per_trade: 0.005, cooldown_period: 6, transaction_charges: 0.00021, allow_reentry: true, // Added example, set as needed // --- Long Conditions --- entry_long: ` (ema(3,0) - ema(5,0)) >= 0.75 * (ema(5,0) - ema(9, 0)) && (ema(3,0) - ema(5,0)) >= 0.3 * (close(0) - open(0)) `, exit_long: ` ema(9, 0) < ema(100, 0) `, // stop_loss_expr_long: null, // target_expr_long: `entry_price() + (entry_price() - stop_loss()) * 8.0`, breakeven_trigger_expr_long: `1 === 2`, trailing_trigger_expr_long: `1 === 2`, trailing_offset_expr_long: `1 === 2`, // --- Short Conditions --- entry_short: ` ema(9, 0) < ema(20, 0) && ema(20, 0) < ema(50, 0) && ema(50, 0) < ema(100, 0) `, exit_short: ` ema(9, 0) > ema(100, 0) `, stop_loss_expr_short: `max(high(1), high(2)) + atr(14, 0) * 6.2`, target_expr_short: `entry_price() - (stop_loss() - entry_price()) * 8.0`, breakeven_trigger_expr_short: `1 === 2`, trailing_trigger_expr_short: `1 === 2`, trailing_offset_expr_short: `1 === 2`, // Often the same offset is used for long and short }; const strat = new feature_strategy_runner_1.StrategyRunner(candles, s_schema, feature_indicators_formulaes_1.DEFAULT_FUNCTION_REGISTRY); // const report = strat.get_report(); // const decisions = report.candle_decisions; // console.table(decisions.filter((item) => !item.decision.includes("IGNORE"))); // console.log(report.metric); // // fs.writeFileSync(process.cwd() + "/src/report.json", JSON.stringify(report, null, 2)); strat.on("progress", (progress) => { if (progress.progress === 100) { console.table(progress.report.trades); } }); strat.run().then(); //# sourceMappingURL=test.js.map