chore: 移除 Maker 策略中的价格追逐阈值配置,简化订单计划逻辑

This commit is contained in:
discountry
2025-10-03 01:13:06 +08:00
parent 56bcaddb22
commit 9124c06315
6 changed files with 4 additions and 11 deletions
-1
View File
@@ -31,7 +31,6 @@ MAX_CLOSE_SLIPPAGE_PCT=0.05 # Max allowed deviation vs mark when clo
# Maker-only settings # Maker-only settings
MAKER_LOSS_LIMIT=0.03 # Maker loss cap (USDT). Defaults to LOSS_LIMIT if unset MAKER_LOSS_LIMIT=0.03 # Maker loss cap (USDT). Defaults to LOSS_LIMIT if unset
MAKER_PRICE_CHASE=0.3 # Price chase threshold (USDT)
MAKER_BID_OFFSET=0 # Bid quote offset from top bid (USDT) MAKER_BID_OFFSET=0 # Bid quote offset from top bid (USDT)
MAKER_ASK_OFFSET=0 # Ask quote offset from top ask (USDT) MAKER_ASK_OFFSET=0 # Ask quote offset from top ask (USDT)
MAKER_REFRESH_INTERVAL_MS=1500 # Maker refresh cadence (ms) MAKER_REFRESH_INTERVAL_MS=1500 # Maker refresh cadence (ms)
-1
View File
@@ -140,7 +140,6 @@ KLINE_INTERVAL=${KLINE_INTERVAL}
# Optional maker params (uncomment and tune as needed) # Optional maker params (uncomment and tune as needed)
# MAKER_LOSS_LIMIT=0.03 # MAKER_LOSS_LIMIT=0.03
# MAKER_PRICE_CHASE=0.3
# MAKER_BID_OFFSET=0 # MAKER_BID_OFFSET=0
# MAKER_ASK_OFFSET=0 # MAKER_ASK_OFFSET=0
# MAKER_REFRESH_INTERVAL_MS=1500 # MAKER_REFRESH_INTERVAL_MS=1500
-2
View File
@@ -46,7 +46,6 @@ export interface MakerConfig {
symbol: string; symbol: string;
tradeAmount: number; tradeAmount: number;
lossLimit: number; lossLimit: number;
priceChaseThreshold: number;
bidOffset: number; bidOffset: number;
askOffset: number; askOffset: number;
refreshIntervalMs: number; refreshIntervalMs: number;
@@ -59,7 +58,6 @@ export const makerConfig: MakerConfig = {
symbol: process.env.TRADE_SYMBOL ?? "BTCUSDT", symbol: process.env.TRADE_SYMBOL ?? "BTCUSDT",
tradeAmount: parseNumber(process.env.TRADE_AMOUNT, 0.001), tradeAmount: parseNumber(process.env.TRADE_AMOUNT, 0.001),
lossLimit: parseNumber(process.env.MAKER_LOSS_LIMIT, parseNumber(process.env.LOSS_LIMIT, 0.03)), lossLimit: parseNumber(process.env.MAKER_LOSS_LIMIT, parseNumber(process.env.LOSS_LIMIT, 0.03)),
priceChaseThreshold: parseNumber(process.env.MAKER_PRICE_CHASE, 0.3),
bidOffset: parseNumber(process.env.MAKER_BID_OFFSET, 0), bidOffset: parseNumber(process.env.MAKER_BID_OFFSET, 0),
askOffset: parseNumber(process.env.MAKER_ASK_OFFSET, 0), askOffset: parseNumber(process.env.MAKER_ASK_OFFSET, 0),
refreshIntervalMs: parseNumber(process.env.MAKER_REFRESH_INTERVAL_MS, 1500), refreshIntervalMs: parseNumber(process.env.MAKER_REFRESH_INTERVAL_MS, 1500),
+2 -3
View File
@@ -9,8 +9,7 @@ export interface OrderTarget {
export function makeOrderPlan( export function makeOrderPlan(
openOrders: AsterOrder[], openOrders: AsterOrder[],
targets: OrderTarget[], targets: OrderTarget[]
tolerance: number
): { toCancel: AsterOrder[]; toPlace: OrderTarget[] } { ): { toCancel: AsterOrder[]; toPlace: OrderTarget[] } {
const unmatched = new Set(targets.map((_, idx) => idx)); const unmatched = new Set(targets.map((_, idx) => idx));
const toCancel: AsterOrder[] = []; const toCancel: AsterOrder[] = [];
@@ -27,7 +26,7 @@ export function makeOrderPlan(
unmatched.has(index) && unmatched.has(index) &&
target.side === order.side && target.side === order.side &&
target.reduceOnly === reduceOnly && target.reduceOnly === reduceOnly &&
Math.abs(price - target.price) <= tolerance price === target.price
); );
}); });
if (matchedIndex >= 0) { if (matchedIndex >= 0) {
+1 -2
View File
@@ -327,9 +327,8 @@ export class MakerEngine {
} }
private async syncOrders(targets: DesiredOrder[]): Promise<void> { private async syncOrders(targets: DesiredOrder[]): Promise<void> {
const tolerance = this.config.priceChaseThreshold;
const availableOrders = this.openOrders.filter((o) => !this.pendingCancelOrders.has(String(o.orderId))); const availableOrders = this.openOrders.filter((o) => !this.pendingCancelOrders.has(String(o.orderId)));
const { toCancel, toPlace } = makeOrderPlan(availableOrders, targets, tolerance); const { toCancel, toPlace } = makeOrderPlan(availableOrders, targets);
for (const order of toCancel) { for (const order of toCancel) {
if (this.pendingCancelOrders.has(String(order.orderId))) continue; if (this.pendingCancelOrders.has(String(order.orderId))) continue;
+1 -2
View File
@@ -428,9 +428,8 @@ export class OffsetMakerEngine {
} }
private async syncOrders(targets: DesiredOrder[]): Promise<void> { private async syncOrders(targets: DesiredOrder[]): Promise<void> {
const tolerance = this.config.priceChaseThreshold;
const availableOrders = this.openOrders.filter((o) => !this.pendingCancelOrders.has(String(o.orderId))); const availableOrders = this.openOrders.filter((o) => !this.pendingCancelOrders.has(String(o.orderId)));
const { toCancel, toPlace } = makeOrderPlan(availableOrders, targets, tolerance); const { toCancel, toPlace } = makeOrderPlan(availableOrders, targets);
for (const order of toCancel) { for (const order of toCancel) {
if (this.pendingCancelOrders.has(String(order.orderId))) continue; if (this.pendingCancelOrders.has(String(order.orderId))) continue;