binance_bot/src/js/tradingbot/config/BotConfig.js

283 lines
6.4 KiB
JavaScript

import BinanceApiConfig from "../../apis/binance/BinanceApiConfig.js";
import APIConfig from "../../apiwrapper/APIConfig.js";
import Serializable from "../../util/Serializable.js";
import SerializableHelper from "../../util/SerializableHelper.js";
export default class BotConfig extends Serializable {
/**
* @type {string} working root
*/
#workingDirectory = '.';
/**
* @type {string} log path relative to working root
*/
#relativeLogPath = 'logs';
/**
* @type {string} data path relative to working root
*/
#relativeDataPath = 'data';
/**
* @type {string} tmp path relative to working root
*/
#relativeTmpPath = 'tmp';
/**
* @type {BinanceApiConfig}
*/
#apiConfig = new BinanceApiConfig();
/**
* @type {string} chrono unit string; Time until trading should start
*/
#rampupTime = "15m";
/**
* @type {number} max amount of USD, that can be used for trading
*/
#totalUSDTradingLimit = 500;
/**
* @type {number} max USD to spend per trade
*/
#maxUSDPerTrade = 50.0;
/**
* @type {number} max amount of active transactions per worker
*/
#maxTransactionsPerWorker = 6;
/**
* @type {boolean} if rest interface should be enabled
*/
#enableRestInterface = true;
/**
* @type {number} port used for rest interface
*/
#restInterfacePort = 3044;
constructor() {
super();
}
/**
* @param {string} workingDirectory
*/
setWorkingDirectory(workingDirectory) {
this.#workingDirectory = workingDirectory;
}
/**
* @returns {string} working root
*/
getWorkingDirectory() {
return this.#workingDirectory;
}
/**
* @param {string} logPath
*/
setRelativeLogPath(logPath) {
this.#relativeLogPath = logPath;
}
/**
* @returns {string} relative log path
*/
getRelativeLogPath() {
return this.#relativeLogPath;
}
/**
* @param {string} dataPath
*/
setRelativeDataPath(dataPath) {
this.#relativeDataPath = dataPath;
}
/**
* @returns {string} relative data path
*/
getRelativeDataPath() {
return this.#relativeDataPath;
}
/**
* @param {string} tmpPath
*/
setRelativeTmpPath(tmpPath) {
this.#relativeTmpPath = tmpPath;
}
/**
* @returns {string} relative tmp path
*/
getRelativeTmpPath() {
return this.#relativeTmpPath;
}
/**
* @returns {string} log directory
*/
getLogDirectory() {
return this.#workingDirectory + "/" + this.#relativeLogPath;
}
/**
* @returns {string} data directory
*/
getDataDirectory() {
return this.#workingDirectory + "/" + this.#relativeDataPath;
}
/**
* @returns {string} tmp directory
*/
getTmpDirectory() {
return this.#workingDirectory + "/" + this.#relativeTmpPath;
}
/**
* @returns {APIConfig}
*/
getApiConfig() {
return this.#apiConfig;
}
/**
* @param {APIConfig} apiConfig
*/
setApiConfig(apiConfig) {
this.#apiConfig = apiConfig;
}
/**
* @returns {number} maximum USD, that can be used for trading
*/
getUsdTradeLimit() {
return this.#totalUSDTradingLimit;
}
/**
* @param {number} tradeLimit
*/
setUsdTradeLimit(tradeLimit) {
this.#totalUSDTradingLimit = tradeLimit;
}
/**
* @returns {number} usd limit per single trade
*/
getPerTradeLimit() {
return this.#maxUSDPerTrade;
}
/**
* @param {number} limit
*/
setPerTradeLimit(limit) {
this.#maxUSDPerTrade = limit;
}
/**
* @returns {boolean}
*/
isRestInterfaceEnabled(){
return this.#enableRestInterface;
}
/**
* @param {boolean} enabled
*/
setRestInterfaceEnabled(enabled){
this.#enableRestInterface = enabled;
}
/**
* @returns {number}
*/
getRestInterfacePort(){
return this.#restInterfacePort;
}
/**
* @param {number} port
*/
setRestInterfacePort(port){
this.#restInterfacePort = port;
}
/**
* @returns {string} chrono time string
*/
getRampupTime(){
return this.#rampupTime;
}
/**
* @param {string} chronoString
*/
setRampupTime(chronoString){
this.#rampupTime = chronoString;
}
/**
* @returns {number}
*/
getMaxTransactionsPerWorker(){
return this.#maxTransactionsPerWorker;
}
/**
* @param {number} max
*/
setMaxTransactionsPerWorker(max){
this.#maxTransactionsPerWorker = max;
}
/**
* @returns {string} string representation of this object
*/
toJson() {
const obj = JSON.parse(super.toJson());
obj.workingRoot = this.#workingDirectory;
obj.relativeDataPath = this.#relativeDataPath;
obj.relativeLogPath = this.#relativeLogPath;
obj.relativeTmpPath = this.#relativeTmpPath;
obj.apiConfig = SerializableHelper.serialize(this.#apiConfig);
obj.totalTradingLimit = this.#totalUSDTradingLimit;
obj.singleTradeLimit = this.#maxUSDPerTrade;
obj.restInterfaceEnabled = this.#enableRestInterface;
obj.restInterfacePort = this.#restInterfacePort;
obj.rampupTime = this.#rampupTime;
obj.maxTransactionsPerWorker = this.#maxTransactionsPerWorker;
return JSON.stringify(obj);
}
/**
* @param {string} objString
* @returns {BotConfig}
*/
static fromJson(objString) {
const obj = JSON.parse(objString);
const conf = new BotConfig();
conf.#workingDirectory = obj.workingRoot;
conf.#relativeDataPath = obj.relativeDataPath;
conf.#relativeLogPath = obj.relativeLogPath;
conf.#relativeTmpPath = obj.relativeTmpPath;
conf.#apiConfig = SerializableHelper.deserialize(obj.apiConfig, APIConfig);
conf.#totalUSDTradingLimit = obj.totalTradingLimit;
conf.#maxUSDPerTrade = obj.singleTradeLimit;
conf.#enableRestInterface = obj.restInterfaceEnabled;
conf.#restInterfacePort = obj.restInterfacePort;
conf.#rampupTime = obj.rampupTime;
conf.#maxTransactionsPerWorker = obj.maxTransactionsPerWorker;
return conf;
}
}