feat: 添加 Paradex 适配器支持,更新环境变量配置和适配器构建逻辑

This commit is contained in:
discountry
2025-10-06 18:06:23 +08:00
parent ccc3a2bf89
commit cfd5f4309d
18 changed files with 1681 additions and 177 deletions
+18 -1
View File
@@ -1,7 +1,14 @@
export function isUnknownOrderError(error: unknown): boolean {
const message = extractMessage(error);
if (!message) return false;
return message.includes("Unknown order") || message.includes("code\":-2011");
const upper = message.toUpperCase();
return (
upper.includes("UNKNOWN ORDER") ||
upper.includes("CODE\":-2011") ||
upper.includes("ORDER_ID_NOT_FOUND") ||
upper.includes("ORDER_IS_CLOSED") ||
upper.includes("COULD NOT FIND ORDER")
);
}
export function extractMessage(error: unknown): string {
@@ -36,3 +43,13 @@ export function isRateLimitError(error: unknown): boolean {
message.includes("request rate")
);
}
export function isInsufficientBalanceError(error: unknown): boolean {
const message = extractMessage(error).toUpperCase();
return (
message.includes("INSUFFICIENT") ||
message.includes("NOT_ENOUGH_BALANCE") ||
message.includes("INSUFFICIENT_BALANCE") ||
message.includes("NOT ENOUGH")
);
}
+11 -3
View File
@@ -32,10 +32,18 @@ export function getPosition(snapshot: AsterAccountSnapshot | null, symbol: strin
}
export function getSMA(values: AsterKline[], length: number): number | null {
if (!values || values.length < length) return null;
const closes = values.slice(-length).map((k) => Number(k.close));
if (!Array.isArray(values) || values.length < length) return null;
const window = values.slice(-length);
const closes = window.map((kline) => Number(kline.close));
if (closes.some((price) => !Number.isFinite(price))) {
return null;
}
const sum = closes.reduce((acc, current) => acc + current, 0);
return sum / closes.length;
if (!Number.isFinite(sum)) {
return null;
}
const average = sum / closes.length;
return Number.isFinite(average) ? average : null;
}
export function calcStopLossPrice(entryPrice: number, qty: number, side: "long" | "short", loss: number): number {