sql-synergy
Version:
Synergy Wave TA
138 lines (136 loc) • 5.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WaveReader = void 0;
/*
*
Name=A
Dir=Up
LowIndex=1
HighIndex=3
Lowest=1
Highest=5
Minimum=4
Maximum=6
*/
const IConstants_1 = require("./IConstants");
const WaveSequence_1 = require("./WaveSequence");
const Wave_1 = require("./Wave");
const fs = require('fs');
const lineReader = require('line-reader');
class WaveReader {
constructor(oMSQuotes, sStockLevel) {
this.oWS = new WaveSequence_1.WaveSequence();
this.oMSQuotes = oMSQuotes;
let sSymbol = oMSQuotes.oTickerQuotes.getSymbol();
let sDataDir = oMSQuotes.oTickerQuotes.getSymbol();
//string sDataDir = oMSQuotes.getDataDir ( ) ;
let sWaveDir = "/tmp/Waves/";
let sDir = sDataDir;
let sWaveDirName = sWaveDir + sStockLevel;
sWaveDirName = sWaveDir + sDir + "/" + sStockLevel;
let sWaveFileName = "/" + sSymbol + "_" + sStockLevel + ".waves";
let sFileName = sWaveDirName + sWaveFileName;
console.log(sFileName);
fs.mkdir(sWaveDirName, { recursive: true }, (err) => {
if (err)
throw err;
});
console.log(">> Info Loading Waves from " + sFileName);
this.parseWaves(sFileName);
this.oWS.print();
}
getWaveSequence() {
return this.oWS;
}
parseWaves(sFileName) {
let oPC = null;
let bNameFound = false;
let oWave = null;
let me = this;
lineReader.eachLine(sFileName, function (sLine) {
sLine = sLine.trim();
if (sLine.length == 0)
return;
if (sLine.startsWith("Chart")) {
let sChartType = sLine.substring("Chart".length + 1);
if (sChartType.charAt(0) == 'Y')
oPC = me.oMSQuotes.getData(IConstants_1.IConstants.YEARLY);
else if (sChartType.charAt(0) == 'Q')
oPC = me.oMSQuotes.getData(IConstants_1.IConstants.QUARTERLY);
else if (sChartType.charAt(0) == 'M')
oPC = me.oMSQuotes.getData(IConstants_1.IConstants.MONTHLY);
else if (sChartType.charAt(0) == 'D')
oPC = me.oMSQuotes.getData(IConstants_1.IConstants.DAILY);
else if (sChartType.charAt(0) == 'H')
oPC = me.oMSQuotes.getData(IConstants_1.IConstants.HOURLY);
me.oWS.setPriceChart(oPC);
return;
}
if (sLine.startsWith("Name")) {
bNameFound = true;
if (oWave != null) {
me.oWS.add(oWave);
let oTWave = Wave_1.Wave.copy(oWave);
oTWave.setDirection(oWave.isUp() ? Wave_1.Wave.DN : Wave_1.Wave.UP);
if (oTWave.isDown()) {
oTWave.fMinimum = oWave.getLength() / 2;
oTWave.fMaximum = oWave.getLow();
}
oWave = oTWave;
}
else
oWave = new Wave_1.Wave();
oWave.setName(sLine.substring("Name".length + 1));
oWave.bManual = true;
return;
}
if (oWave == null)
throw Error("FATAL oWave is null");
if (sLine.startsWith("Dir")) {
oWave.setDirection("Up" == sLine.substring("Dir".length + 1) ? Wave_1.Wave.UP : Wave_1.Wave.DN);
return;
}
if (sLine.startsWith("LowDate")) {
let sDate = sLine.substring("LowDate".length + 1).trim();
let iIndex = oPC.getChartDate(parseInt(sDate));
oWave?.setLowest(iIndex, oPC.getLow()[iIndex]);
return;
}
if (sLine.startsWith("HighDate")) {
let sDate = sLine.substring("HighDate".length + 1).trim();
let iIndex = oPC.getChartDate(parseInt(sDate));
oWave.setHighest(iIndex, oPC.getHigh()[iIndex]);
return;
}
if (sLine.startsWith("LowIndex")) {
let iIndex = parseInt(sLine.substring("LowIndex".length + 1).trim());
oWave.setLowest(iIndex, oPC.getLow()[iIndex]);
return;
}
if (sLine.startsWith("HighIndex")) {
let iIndex = parseInt(sLine.substring("HighIndex".length + 1).trim());
oWave.setHighest(iIndex, oPC.getHigh()[iIndex]);
return;
}
if (sLine.startsWith("Lowest")) {
oWave.fLowest = parseFloat(sLine.substring("Lowest".length + 1).trim());
return;
}
if (sLine.startsWith("Highest")) {
oWave.fHighest = parseFloat(sLine.substring("Highest".length + 1).trim());
return;
}
if (sLine.startsWith("Minimum")) {
oWave.fMinimum = parseFloat(sLine.substring("Minimum".length + 1).trim());
return;
}
if (sLine.startsWith("Maximum")) {
oWave.fMaximum = parseFloat(sLine.substring("Maximum".length + 1).trim());
return;
}
});
if (oWave != null)
me.oWS.add(oWave);
}
}
exports.WaveReader = WaveReader;