UNPKG

turingtrader.js

Version:
90 lines (76 loc) 2.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadAsset = void 0; var _indicators = require("../indicators"); var _yahoo = require("./yahoo"); //============================================================================== // Name: data/index // Project: TuringTrader.js // Description: data source wrapper. // History: FUB, 2021iv30, created //============================================================================== var loadAsset = function loadAsset(sim, name, customLoaderFn) { var id = "loadAsset(".concat(name, ",").concat(sim.startDate.getTime(), ",").concat(sim.endDate.getTime(), ")"); var loadData = function loadData() { var dataLoaderFn = customLoaderFn !== null && customLoaderFn !== void 0 ? customLoaderFn : _yahoo.loadAssetFromYahoo; var data = dataLoaderFn(sim, name).then(function (rawData) { // simulator timestamps var st = sim.tradingCalendar.tradingDays; // setup resampled data var data = { meta: rawData.meta, t: st, o: [], h: [], l: [], c: [], v: [] }; // BUGBUG: this code will fail, if there are no data // within the requested range var ri = -1; // ri is the index of the last *consumed* bar st.forEach(function (t) { // advance raw data to catch up with simulator var ri0 = ri; while (ri < rawData.t.length - 1 && rawData.t[ri + 1] <= t) { ri++; } var consumedData = ri0 !== ri; if (t < rawData.t[0]) { // simulator timestamp before start of raw data // => fill OHLCV w/ first open data.o.push(rawData.o[0]); data.h.push(rawData.o[0]); data.l.push(rawData.o[0]); data.c.push(rawData.o[0]); data.v.push(0.0); } else if (consumedData === true) { // consumed data // => fill OHLCV w/ resampled bar data.o.push(rawData.o[ri]); data.h.push(rawData.h[ri]); data.l.push(rawData.l[ri]); data.c.push(rawData.c[ri]); data.v.push(rawData.v[ri]); if (ri === 0) data.meta.firstT = t; if (ri === rawData.t.length - 1) data.meta.lastT = t; } else { // consumed no data // => fill OHLCV w/ previous close data.o.push(rawData.c[ri]); data.h.push(rawData.c[ri]); data.l.push(rawData.c[ri]); data.c.push(rawData.c[ri]); data.v.push(0.0); } }); return data; }); return data; }; return sim.cache(id, function () { return (0, _indicators.IndicatorsBar)(sim, id, loadData()); }); }; //============================================================================== // end of file exports.loadAsset = loadAsset;