UNPKG

fme-free-barchart-fetch

Version:

API for fetching data from the Free Barchart API

148 lines (140 loc) 5.63 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const fme_logger_1 = require("fme-logger"); var L = new fme_logger_1.Log("FreeBarchart"); const _m = require("moment-timezone"); const request = require("request-promise-native"); function convert(x) { var obj = {}; obj.symbol = x.symbol; obj.date = _m(x.timestamp).format("YYYYMMDD"); obj.time = _m(x.timestamp).format("HHmm"); obj.timeNumber = _m(x.timestamp).hours() * 60 + _m(x.timestamp).minutes(); obj.open = x.open; obj.close = x.close; obj.high = x.high; obj.low = x.low; obj.volume = x.volume; return obj; } class FreeBarchart { // // @KEY = FREE BARCHART KEY STRING // @SYMBOL = BARCHART SYMBOL // @FRAME = TIMEFRAME = "minute","day","week" // @Interval = number (1,2,3) (combines with FRAME to complete the reqeust); // constructor(key, symbol, frame, interval) { this.key = key; this.version = "1.0.0"; this.host = "marketdata.websol.barchart.com"; this.endpoint = "getHistory.json"; // symbol = "ES*1"; this.symbol = "SPY"; this.type = "minutes"; this.types = ["ticks", "minutes", "nearbyMinutes", "formTMinutes", "daily", "dailyNearest", "dailyContinue", "weekly", "weeklyNearest", "weeklyContinue", "monthly", "monthlyNearest", "monthlyContinue", "quarterly", "quarterlyNearest", "quarterlyContinue", "yearly", "yearlyNearest", "yearlyContinue"]; this.typesSingleDay = ["ticks", "minutes", "nearbyMinutes", "formTMinutes"]; this.interval = 1; this.getDailyMinutes = (sDate) => __awaiter(this, void 0, void 0, function* () { var type = this.type.trim().toLowerCase(); var symbol = this.symbol.trim().toLowerCase(); var startDate = _m(sDate).format("YYYYMMDD"); var req = "/" + this.endpoint + "?key=" + this.key + "&symbol=" + this.symbol + "&type=" + type + "&startDate=" + startDate + "&interval=" + this.interval; var fullUrl = "http://" + this.host + req; L.info("requesting:", fullUrl); var rtn = JSON.parse(yield request(fullUrl)).results; // L.info("Rtn is",rtn); var filter = {}; if (this.typesSingleDay.indexOf(type) > -1) { filter = rtn.filter((x) => { return _m(x.timestamp).format("YYYYMMDD") == _m(sDate).format("YYYYMMDD"); }).map(convert); } else { filter = rtn.filter.map(convert); } return filter; }); this.symbol = symbol; this.type = frame.toLowerCase().trim(); if (this.types.indexOf(this.type) == -1) { L.error("Invalid type passed", this.types, "valid types are", JSON.stringify(this.types)); return; } if (!interval) this.interval = 1; else this.interval = interval; ; } } exports.FreeBarchart = FreeBarchart; /* function convertNinjaDT (dt) { if (dt.length < 5) return; var d = dt.split(" ")[0]; var t = dt.split(" ")[1]; var YYYY = d.substring(0,4); var MM = d.substring(4,6)-1; var DD = d.substring(6,8); var HH = t.substring(0,2); var mm = t.substring(2,4); var ss = "00"; var tsMM = (MM + 1).toString(); if (tsMM.length < 2) tsMM = "0"+tsMM; var time = HH+mm+ss; var date = YYYY+tsMM+DD; // L.info (YYYY,MM,DD,HH,mm,ss); return ( {timestamp : new Date (YYYY,MM,DD,HH,mm,ss),time:time,date:date}); } // // Barchart API for access historic ES data to keep our database current // barchart = {}; var http = require('http'); barchart.getES = function (sDate,CB) { var dt = new Date(); var YYYY = dt.getFullYear().toString(); var MM = (dt.getMonth()+1).toString(); var DD = dt.getDate().toString(); var startDate = sDate; var type = "minutes"; var host = "marketdata.websol.barchart.com"; var endpoint = "getHistory.json"; var symbol = "ES*1"; // // ===> create full request URL // var req = "/"+endpoint+"?key="+barchart.key+"&symbol="+symbol+"&type="+type+"&startDate="+startDate; // // ===> Make the request, chunk the results and call back the passed in function // L.info ("calling barchart with url",host,req); http.get({ host:host, path:req },function(response){ var body =""; response.on("data",function(d){ body += d; }); response.on("end",function(){ parsed=JSON.parse(body); // L.info("got and end",parsed); barchart.storeES(parsed); // <== hand off to be stored }); response.on('error', function(err) { L.error("Error during HTTP request"); L.error(err.message); }); }) } */