From 9629c224964245c447ded5ddc8cb6b48496f46f0 Mon Sep 17 00:00:00 2001 From: discountry Date: Sun, 18 Jan 2026 01:49:36 +0800 Subject: [PATCH] Enhance MakerPoints configuration and logic - Added new configuration options for band-specific order amounts in `config.ts`. - Implemented conditional logic in `MakerPointsEngine` to utilize the new band amounts based on the Binance depth cancel setting. - Refactored order amount handling to improve clarity and maintainability. --- src/config.ts | 16 +++++++++++++++- src/strategy/maker-points-engine.ts | 15 +++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/config.ts b/src/config.ts index 16db41b..ea799e1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -187,12 +187,22 @@ export interface MakerPointsConfig { enableBand0To10: boolean; enableBand10To30: boolean; enableBand30To100: boolean; + /** 0-10 bps 档位挂单数量,未配置时使用 perOrderAmount */ + band0To10Amount: number; + /** 10-30 bps 档位挂单数量,未配置时使用 perOrderAmount */ + band10To30Amount: number; + /** 30-100 bps 档位挂单数量,未配置时使用 perOrderAmount */ + band30To100Amount: number; minRepriceBps: number; + /** 是否根据 Binance 盘口深度失衡自动取消单边挂单,默认 true */ + enableBinanceDepthCancel: boolean; } +const defaultMakerPointsAmount = parseNumber(process.env.MAKER_POINTS_ORDER_AMOUNT, parseNumber(process.env.TRADE_AMOUNT, 0.001)); + export const makerPointsConfig: MakerPointsConfig = { symbol: resolveSymbolFromEnv("standx"), - perOrderAmount: parseNumber(process.env.MAKER_POINTS_ORDER_AMOUNT, parseNumber(process.env.TRADE_AMOUNT, 0.001)), + perOrderAmount: defaultMakerPointsAmount, closeThreshold: parseNumber(process.env.MAKER_POINTS_CLOSE_THRESHOLD, 0), stopLossUsd: parseNumber(process.env.MAKER_POINTS_STOP_LOSS_USD, 0), refreshIntervalMs: parseNumber(process.env.MAKER_POINTS_REFRESH_INTERVAL_MS, 500), @@ -206,7 +216,11 @@ export const makerPointsConfig: MakerPointsConfig = { enableBand0To10: parseBoolean(process.env.MAKER_POINTS_BAND_0_10, true), enableBand10To30: parseBoolean(process.env.MAKER_POINTS_BAND_10_30, true), enableBand30To100: parseBoolean(process.env.MAKER_POINTS_BAND_30_100, true), + band0To10Amount: parseNumber(process.env.MAKER_POINTS_BAND_0_10_AMOUNT, defaultMakerPointsAmount), + band10To30Amount: parseNumber(process.env.MAKER_POINTS_BAND_10_30_AMOUNT, defaultMakerPointsAmount), + band30To100Amount: parseNumber(process.env.MAKER_POINTS_BAND_30_100_AMOUNT, defaultMakerPointsAmount), minRepriceBps: parseNumber(process.env.MAKER_POINTS_MIN_REPRICE_BPS, 3), + enableBinanceDepthCancel: parseBoolean(process.env.MAKER_POINTS_BINANCE_DEPTH_CANCEL, true), }; export interface BasisArbConfig { diff --git a/src/strategy/maker-points-engine.ts b/src/strategy/maker-points-engine.ts index 40073fc..18e1b2a 100644 --- a/src/strategy/maker-points-engine.ts +++ b/src/strategy/maker-points-engine.ts @@ -467,8 +467,8 @@ export class MakerPointsEngine { const binanceSnapshot = this.binanceDepth.getSnapshot(); - const rawSkipBuy = Boolean(binanceSnapshot?.skipBuySide); - const rawSkipSell = Boolean(binanceSnapshot?.skipSellSide); + const rawSkipBuy = this.config.enableBinanceDepthCancel && Boolean(binanceSnapshot?.skipBuySide); + const rawSkipSell = this.config.enableBinanceDepthCancel && Boolean(binanceSnapshot?.skipSellSide); const skipBuy = closeOnly ? false : rawSkipBuy; const skipSell = closeOnly ? false : rawSkipSell; const prevSkipBuy = this.lastSkipBuy; @@ -542,8 +542,6 @@ export class MakerPointsEngine { skipSell: boolean; }): DesiredOrder[] { const { bid1, ask1, skipBuy, skipSell } = params; - const amount = Number(this.config.perOrderAmount); - if (!Number.isFinite(amount) || amount <= 0) return []; const targets = buildBpsTargets({ band0To10: this.config.enableBand0To10, @@ -556,7 +554,16 @@ export class MakerPointsEngine { const priceDecimals = this.getPriceDecimals(); const desired: DesiredOrder[] = []; + const getAmountForBps = (bps: number): number => { + if (bps <= 10) return Number(this.config.band0To10Amount); + if (bps <= 30) return Number(this.config.band10To30Amount); + return Number(this.config.band30To100Amount); + }; + for (const bps of targets) { + const amount = getAmountForBps(bps); + if (!Number.isFinite(amount) || amount <= 0) continue; + if (!skipBuy) { const price = bid1 * (1 - bps / 10000); if (Number.isFinite(price) && price > 0) {