fme-free-barchart-fetch
Version:
API for fetching data from the Free Barchart API
148 lines (140 loc) • 5.63 kB
JavaScript
"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);
});
})
}
*/