@debut/plugin-neurofilter
Version:
Neuro filter plugin for debute
63 lines • 2.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NeuroHelper = void 0;
const brain_js_1 = require("brain.js");
const community_core_1 = require("@debut/community-core");
class NeuroHelper {
constructor(botName, nnOptions = {}) {
this.trained = false;
this.trainingSet = [];
this.botData = community_core_1.utils.cli.getBotData(botName);
this.nn = new brain_js_1.NeuralNetwork({
hiddenLayers: [64, 32, 16],
activation: 'sigmoid',
leakyReluAlpha: 0.01,
...nnOptions,
});
}
addTrainingData(data) {
this.trainingSet.push(data);
}
updateTrainingOut(id, output) {
const target = this.trainingSet.find((item) => item.id === id);
if (!target) {
return;
}
target.output = [output];
}
train(options = {}) {
this.trainingSet.forEach((data) => {
if (!data || data.output === null) {
throw 'Training data is invalid';
}
});
console.log('Traning data size:', this.trainingSet.length);
console.log('\n---- Neuro Training ----\n');
this.nn.train(this.trainingSet, {
iterations: 40000,
errorThresh: 0.006,
logPeriod: 1000,
log: true,
...options,
});
}
run(input) {
// @ts-ignore
return this.nn.run(input)[0];
}
save(ticker) {
const path = `${this.botData.src}/neuroData/${ticker}.json`;
community_core_1.utils.file.ensureFile(path);
community_core_1.utils.file.saveFile(path, this.nn.toJSON());
}
load(ticker) {
const path = `${this.botData.src}/neuroData/${ticker}.json`;
const data = community_core_1.utils.file.readFile(path);
if (data) {
this.nn.fromJSON(JSON.parse(data));
this.trained = true;
}
}
}
exports.NeuroHelper = NeuroHelper;
//# sourceMappingURL=neurohelper.js.map