mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-11 09:18:08 +00:00
更新 MakerEngine、OffsetMakerEngine 和 TrendEngine,重构订单同步逻辑,优化撤单和止损判断,新增订单计划生成和安全撤单功能,提升代码可读性和维护性。
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
import type { AsterOrder } from "../../exchanges/types";
|
||||
|
||||
export interface OrderTarget {
|
||||
side: "BUY" | "SELL";
|
||||
price: number;
|
||||
amount: number;
|
||||
reduceOnly: boolean;
|
||||
}
|
||||
|
||||
export function makeOrderPlan(
|
||||
openOrders: AsterOrder[],
|
||||
targets: OrderTarget[],
|
||||
tolerance: number
|
||||
): { toCancel: AsterOrder[]; toPlace: OrderTarget[] } {
|
||||
const unmatched = new Set(targets.map((_, idx) => idx));
|
||||
const toCancel: AsterOrder[] = [];
|
||||
|
||||
for (const order of openOrders) {
|
||||
const price = Number(order.price);
|
||||
if (!Number.isFinite(price)) {
|
||||
toCancel.push(order);
|
||||
continue;
|
||||
}
|
||||
const reduceOnly = order.reduceOnly === true;
|
||||
const matchedIndex = targets.findIndex((target, index) => {
|
||||
return (
|
||||
unmatched.has(index) &&
|
||||
target.side === order.side &&
|
||||
target.reduceOnly === reduceOnly &&
|
||||
Math.abs(price - target.price) <= tolerance
|
||||
);
|
||||
});
|
||||
if (matchedIndex >= 0) {
|
||||
unmatched.delete(matchedIndex);
|
||||
} else {
|
||||
toCancel.push(order);
|
||||
}
|
||||
}
|
||||
|
||||
const toPlace = [...unmatched]
|
||||
.map((idx) => targets[idx])
|
||||
.filter((t): t is OrderTarget => t !== undefined && t.amount > 1e-5);
|
||||
|
||||
return { toCancel, toPlace };
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
import type { ExchangeAdapter } from "../../exchanges/adapter";
|
||||
import type { AsterOrder } from "../../exchanges/types";
|
||||
import { isUnknownOrderError } from "../../utils/errors";
|
||||
|
||||
export async function safeCancelOrder(
|
||||
exchange: ExchangeAdapter,
|
||||
symbol: string,
|
||||
order: AsterOrder,
|
||||
onResolved: (orderId: number) => void,
|
||||
onUnknown: () => void,
|
||||
onError: (err: unknown) => void
|
||||
): Promise<void> {
|
||||
try {
|
||||
await exchange.cancelOrder({ symbol, orderId: order.orderId });
|
||||
onResolved(order.orderId);
|
||||
} catch (error) {
|
||||
if (isUnknownOrderError(error)) onUnknown();
|
||||
else onError(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user