mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-11 17:28:08 +00:00
chore: 移除 Maker 策略中的价格追逐阈值配置,简化订单计划逻辑
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user