Files
ritmex-bot/src/config.ts
T

71 lines
2.8 KiB
TypeScript

export interface TradingConfig {
symbol: string;
tradeAmount: number;
lossLimit: number;
trailingProfit: number;
trailingCallbackRate: number;
profitLockTriggerUsd: number;
profitLockOffsetUsd: number;
pollIntervalMs: number;
maxLogEntries: number;
klineInterval: string;
maxCloseSlippagePct: number;
priceTick: number; // price tick size, e.g. 0.1 for BTCUSDT
qtyStep: number; // quantity step size, e.g. 0.001 BTC
bollingerLength: number;
bollingerStdMultiplier: number;
minBollingerBandwidth: number;
}
function parseNumber(value: string | undefined, fallback: number): number {
if (!value) return fallback;
const next = Number(value);
return Number.isFinite(next) ? next : fallback;
}
export const tradingConfig: TradingConfig = {
symbol: process.env.TRADE_SYMBOL ?? "BTCUSDT",
tradeAmount: parseNumber(process.env.TRADE_AMOUNT, 0.001),
lossLimit: parseNumber(process.env.LOSS_LIMIT, 0.03),
trailingProfit: parseNumber(process.env.TRAILING_PROFIT, 0.2),
trailingCallbackRate: parseNumber(process.env.TRAILING_CALLBACK_RATE, 0.2),
profitLockTriggerUsd: parseNumber(process.env.PROFIT_LOCK_TRIGGER_USD, 0.1),
profitLockOffsetUsd: parseNumber(process.env.PROFIT_LOCK_OFFSET_USD, 0.05),
pollIntervalMs: parseNumber(process.env.POLL_INTERVAL_MS, 500),
maxLogEntries: parseNumber(process.env.MAX_LOG_ENTRIES, 200),
klineInterval: process.env.KLINE_INTERVAL ?? "1m",
maxCloseSlippagePct: parseNumber(process.env.MAX_CLOSE_SLIPPAGE_PCT, 0.05),
priceTick: parseNumber(process.env.PRICE_TICK, 0.1),
qtyStep: parseNumber(process.env.QTY_STEP, 0.001),
bollingerLength: parseNumber(process.env.BOLLINGER_LENGTH, 20),
bollingerStdMultiplier: parseNumber(process.env.BOLLINGER_STD_MULTIPLIER, 2),
minBollingerBandwidth: parseNumber(process.env.MIN_BOLLINGER_BANDWIDTH, 0.001),
};
export interface MakerConfig {
symbol: string;
tradeAmount: number;
lossLimit: number;
bidOffset: number;
askOffset: number;
refreshIntervalMs: number;
maxLogEntries: number;
maxCloseSlippagePct: number;
priceTick: number;
}
export const makerConfig: MakerConfig = {
symbol: process.env.TRADE_SYMBOL ?? "BTCUSDT",
tradeAmount: parseNumber(process.env.TRADE_AMOUNT, 0.001),
lossLimit: parseNumber(process.env.MAKER_LOSS_LIMIT, parseNumber(process.env.LOSS_LIMIT, 0.03)),
bidOffset: parseNumber(process.env.MAKER_BID_OFFSET, 0),
askOffset: parseNumber(process.env.MAKER_ASK_OFFSET, 0),
refreshIntervalMs: parseNumber(process.env.MAKER_REFRESH_INTERVAL_MS, 1500),
maxLogEntries: parseNumber(process.env.MAKER_MAX_LOG_ENTRIES, 200),
maxCloseSlippagePct: parseNumber(
process.env.MAKER_MAX_CLOSE_SLIPPAGE_PCT ?? process.env.MAX_CLOSE_SLIPPAGE_PCT,
0.05
),
priceTick: parseNumber(process.env.MAKER_PRICE_TICK ?? process.env.PRICE_TICK, 0.1),
};