mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-09 08:18:07 +00:00
Add Binance depth monitoring configuration to MakerPoints
- Introduced new environment variables `MAKER_POINTS_BINANCE_DEPTH_WINDOW_BPS` and `MAKER_POINTS_BINANCE_DEPTH_IMBALANCE_RATIO` to configure Binance depth monitoring. - Updated `MakerPointsConfig` interface and implementation to include these new parameters. - Enhanced translations to reflect dynamic depth window information in the UI. - Added tests to validate the new configuration options and their integration into the MakerPoints engine.
This commit is contained in:
@@ -28,10 +28,14 @@ describe("config env parsing", () => {
|
||||
process.env.EXCHANGE = "standx";
|
||||
process.env.MAKER_POINTS_STOP_LOSS_USD = "1 # comment";
|
||||
process.env.MAKER_POINTS_CLOSE_THRESHOLD = "2 ; comment";
|
||||
process.env.MAKER_POINTS_BINANCE_DEPTH_WINDOW_BPS = "6 # comment";
|
||||
process.env.MAKER_POINTS_BINANCE_DEPTH_IMBALANCE_RATIO = "9 ; comment";
|
||||
|
||||
const { makerPointsConfig } = await loadConfig();
|
||||
expect(makerPointsConfig.stopLossUsd).toBe(1);
|
||||
expect(makerPointsConfig.closeThreshold).toBe(2);
|
||||
expect(makerPointsConfig.binanceDepthWindowBps).toBe(6);
|
||||
expect(makerPointsConfig.binanceDepthImbalanceRatio).toBe(9);
|
||||
});
|
||||
|
||||
it("parses boolean maker-points env values with inline comments", async () => {
|
||||
@@ -42,4 +46,3 @@ describe("config env parsing", () => {
|
||||
expect(makerPointsConfig.enableBand10To30).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { ExchangeAdapter } from "../src/exchanges/adapter";
|
||||
import type { AsterAccountSnapshot, AsterDepth, AsterKline, AsterOrder, AsterTicker } from "../src/exchanges/types";
|
||||
import { t } from "../src/i18n";
|
||||
import { MakerPointsEngine } from "../src/strategy/maker-points-engine";
|
||||
|
||||
class StubAdapter implements ExchangeAdapter {
|
||||
id = "standx";
|
||||
|
||||
supportsTrailingStops(): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
watchAccount(_cb: (snapshot: AsterAccountSnapshot) => void): void {}
|
||||
watchOrders(_cb: (orders: AsterOrder[]) => void): void {}
|
||||
watchDepth(_symbol: string, _cb: (depth: AsterDepth) => void): void {}
|
||||
watchTicker(_symbol: string, _cb: (ticker: AsterTicker) => void): void {}
|
||||
watchKlines(_symbol: string, _interval: string, _cb: (klines: AsterKline[]) => void): void {}
|
||||
|
||||
async createOrder(): Promise<AsterOrder> {
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
async cancelOrder(): Promise<void> {}
|
||||
async cancelOrders(): Promise<void> {}
|
||||
async cancelAllOrders(): Promise<void> {}
|
||||
}
|
||||
|
||||
describe("MakerPointsEngine Binance depth monitor config", () => {
|
||||
it("uses default 5bps window and ratio 8", () => {
|
||||
const engine = new MakerPointsEngine(
|
||||
{
|
||||
symbol: "BTC-USD",
|
||||
perOrderAmount: 0.01,
|
||||
closeThreshold: 0,
|
||||
stopLossUsd: 1,
|
||||
refreshIntervalMs: 500,
|
||||
maxLogEntries: 20,
|
||||
maxCloseSlippagePct: 0.05,
|
||||
priceTick: 0.1,
|
||||
qtyStep: 0.001,
|
||||
enableBand0To10: true,
|
||||
enableBand10To30: false,
|
||||
enableBand30To100: false,
|
||||
band0To10Amount: 0.01,
|
||||
band10To30Amount: 0.01,
|
||||
band30To100Amount: 0.01,
|
||||
minRepriceBps: 3,
|
||||
enableBinanceDepthCancel: true,
|
||||
filterMinDepth: 0,
|
||||
},
|
||||
new StubAdapter()
|
||||
);
|
||||
|
||||
const trackerOptions = ((engine as any).binanceDepth as { options?: { depthWindowBps?: number; ratio?: number } })
|
||||
.options;
|
||||
|
||||
expect(trackerOptions?.depthWindowBps).toBe(5);
|
||||
expect(trackerOptions?.ratio).toBe(8);
|
||||
|
||||
engine.stop();
|
||||
});
|
||||
|
||||
it("uses configured window and ratio", () => {
|
||||
const engine = new MakerPointsEngine(
|
||||
{
|
||||
symbol: "BTC-USD",
|
||||
perOrderAmount: 0.01,
|
||||
closeThreshold: 0,
|
||||
stopLossUsd: 1,
|
||||
refreshIntervalMs: 500,
|
||||
maxLogEntries: 20,
|
||||
maxCloseSlippagePct: 0.05,
|
||||
priceTick: 0.1,
|
||||
qtyStep: 0.001,
|
||||
enableBand0To10: true,
|
||||
enableBand10To30: false,
|
||||
enableBand30To100: false,
|
||||
band0To10Amount: 0.01,
|
||||
band10To30Amount: 0.01,
|
||||
band30To100Amount: 0.01,
|
||||
minRepriceBps: 3,
|
||||
enableBinanceDepthCancel: true,
|
||||
binanceDepthWindowBps: 7,
|
||||
binanceDepthImbalanceRatio: 11,
|
||||
filterMinDepth: 0,
|
||||
},
|
||||
new StubAdapter()
|
||||
);
|
||||
|
||||
const trackerOptions = ((engine as any).binanceDepth as { options?: { depthWindowBps?: number; ratio?: number } })
|
||||
.options;
|
||||
|
||||
expect(trackerOptions?.depthWindowBps).toBe(7);
|
||||
expect(trackerOptions?.ratio).toBe(11);
|
||||
|
||||
engine.stop();
|
||||
});
|
||||
|
||||
it("renders binance depth line with dynamic window bps", () => {
|
||||
const line = t(
|
||||
"makerPoints.binanceLine",
|
||||
{ windowBps: 5, buy: "1.23", sell: "1.11", status: "Balanced" },
|
||||
"en"
|
||||
);
|
||||
|
||||
expect(line).toContain("±5bps");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user