mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-11 01:08:07 +00:00
Add Binance exchange support
- Updated the environment configuration to include Binance as a selectable exchange option. - Enhanced the README documentation to reflect the addition of Binance. - Implemented the Binance exchange adapter and integrated it into the existing exchange framework. - Modified the basis arbitrage strategy to support Binance alongside existing exchanges. - Added tests to ensure proper functionality and integration of Binance within the trading system.
This commit is contained in:
@@ -71,6 +71,13 @@ describe("BasisArbEngine", () => {
|
||||
time: 2_000,
|
||||
}),
|
||||
};
|
||||
const futuresClient = {
|
||||
getPremiumIndex: vi.fn().mockResolvedValue({
|
||||
fundingRate: "0.0001",
|
||||
nextFundingTime: 3_600_000,
|
||||
time: 2_000,
|
||||
}),
|
||||
};
|
||||
|
||||
const engine = new BasisArbEngine(
|
||||
{
|
||||
@@ -79,10 +86,12 @@ describe("BasisArbEngine", () => {
|
||||
refreshIntervalMs: 1_000,
|
||||
maxLogEntries: 10,
|
||||
takerFeeRate: 0.0004,
|
||||
arbAmount: 1,
|
||||
},
|
||||
adapter,
|
||||
{
|
||||
spotClient,
|
||||
futuresClient,
|
||||
now: () => 1_000,
|
||||
}
|
||||
);
|
||||
@@ -111,7 +120,7 @@ describe("BasisArbEngine", () => {
|
||||
const expectedNet = 1.04 * (1 - effectiveFee) - 1.05 * (1 + effectiveFee);
|
||||
expect(snapshot.netSpread).toBeCloseTo(expectedNet, 6);
|
||||
expect(snapshot.netSpreadBps).toBeCloseTo((expectedNet / 1.05) * 10_000, 6);
|
||||
expect(snapshot.feedStatus).toEqual({ futures: true, spot: true });
|
||||
expect(snapshot.feedStatus).toEqual({ futures: true, spot: true, funding: true });
|
||||
expect(snapshot.opportunity).toBe(expectedNet >= 0);
|
||||
|
||||
engine.stop();
|
||||
|
||||
@@ -49,4 +49,11 @@ describe("resolveSymbolFromEnv", () => {
|
||||
|
||||
expect(resolveSymbolFromEnv("standx")).toBe("ETH-USD");
|
||||
});
|
||||
|
||||
it("supports binance symbol defaults when explicit exchange id is provided", () => {
|
||||
delete process.env.EXCHANGE;
|
||||
process.env.BINANCE_SYMBOL = "ETHUSDT";
|
||||
|
||||
expect(resolveSymbolFromEnv("binance")).toBe("ETHUSDT");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5,6 +5,7 @@ import { GrvtExchangeAdapter } from "../src/exchanges/grvt/adapter";
|
||||
import { BackpackExchangeAdapter } from "../src/exchanges/backpack/adapter";
|
||||
import { ParadexExchangeAdapter } from "../src/exchanges/paradex/adapter";
|
||||
import { StandxExchangeAdapter } from "../src/exchanges/standx/adapter";
|
||||
import { BinanceExchangeAdapter } from "../src/exchanges/binance/adapter";
|
||||
|
||||
const ORIGINAL_ENV = { ...process.env };
|
||||
|
||||
@@ -32,6 +33,7 @@ describe("exchange factory", () => {
|
||||
expect(resolveExchangeId("BACKPACK")).toBe("backpack");
|
||||
expect(resolveExchangeId("PaRaDeX")).toBe("paradex");
|
||||
expect(resolveExchangeId("StandX")).toBe("standx");
|
||||
expect(resolveExchangeId("BiNaNcE")).toBe("binance");
|
||||
});
|
||||
|
||||
it("creates grvt adapter when EXCHANGE=grvt", () => {
|
||||
@@ -79,4 +81,15 @@ describe("exchange factory", () => {
|
||||
expect(adapter).toBeInstanceOf(StandxExchangeAdapter);
|
||||
expect(adapter.id).toBe("standx");
|
||||
});
|
||||
|
||||
it("creates binance adapter when EXCHANGE=binance", () => {
|
||||
process.env.EXCHANGE = "binance";
|
||||
process.env.BINANCE_API_KEY = "api-key";
|
||||
process.env.BINANCE_API_SECRET = "api-secret";
|
||||
process.env.BINANCE_SYMBOL = "BTCUSDT";
|
||||
|
||||
const adapter = createExchangeAdapter({ symbol: "BTCUSDT" });
|
||||
expect(adapter).toBeInstanceOf(BinanceExchangeAdapter);
|
||||
expect(adapter.id).toBe("binance");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user