mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-09 08:18:07 +00:00
Added new configuration options for maker points bands, including target distances and maximum distance limits. Updated the logic to handle these configurations, ensuring backward compatibility with existing defaults. Enhanced documentation and tests to cover the new features and ensure correct functionality across the system.
122 lines
3.5 KiB
TypeScript
122 lines
3.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { ExchangeAdapter } from "../src/exchanges/adapter";
|
|
import type { AccountSnapshot, Depth, Kline, Order, Ticker } 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: AccountSnapshot) => void): void {}
|
|
watchOrders(_cb: (orders: Order[]) => void): void {}
|
|
watchDepth(_symbol: string, _cb: (depth: Depth) => void): void {}
|
|
watchTicker(_symbol: string, _cb: (ticker: Ticker) => void): void {}
|
|
watchKlines(_symbol: string, _interval: string, _cb: (klines: Kline[]) => void): void {}
|
|
|
|
async createOrder(): Promise<Order> {
|
|
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 3bps window and ratio 9", () => {
|
|
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,
|
|
band0To10Bps: 9,
|
|
band10To30Bps: 29,
|
|
band30To100Bps: 40,
|
|
maxDistanceBps: 95,
|
|
minRepriceBps: 3,
|
|
bandRepriceRatio: 0.15,
|
|
slOffsetBps: 2,
|
|
enableBinanceDepthCancel: true,
|
|
filterMinDepth: 0,
|
|
},
|
|
new StubAdapter()
|
|
);
|
|
|
|
const trackerOptions = ((engine as any).binanceDepth as { options?: { depthWindowBps?: number; ratio?: number } })
|
|
.options;
|
|
|
|
expect(trackerOptions?.depthWindowBps).toBe(3);
|
|
expect(trackerOptions?.ratio).toBe(9);
|
|
|
|
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,
|
|
band0To10Bps: 9,
|
|
band10To30Bps: 29,
|
|
band30To100Bps: 40,
|
|
maxDistanceBps: 95,
|
|
minRepriceBps: 3,
|
|
bandRepriceRatio: 0.15,
|
|
slOffsetBps: 2,
|
|
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");
|
|
});
|
|
});
|