我在 Javascript 上创建了一个交易机器人(我之前没有使用这种语言的经验)。追踪止损函数的运行方式是:
- Websocket 收到当前市场价格
- “active”是一个布尔变量,如果为真,运行代码
- 如果价格上涨 %,取消旧的止损并增加一个更高的新止损。
我遇到的问题是代码没有按正确的顺序运行。如果你看图片,我不明白为什么如果 active 为 false,蓝色框仍然执行。而且由于程序有时以错误的顺序运行,websocket 会停止或按不应该的方式运行。
这是我的追踪止损 websocket 代码:
function binanceTrailingSLOrder(symbol, orderId, quantity, oldPrice, percentage, active) {
const clean_trade = client.ws.trades([symbol], trade => { //run websocket
var livePrice = parseFloat(binance_symbols[symbol]["close"]); //set new price to live price
if (active == true) {
binanceCheckOrderStatus(symbol, orderId).then(r => {
switch (r.status) {
case "PENDING":
if (livePrice >= (oldPrice * ((100 + percentage) / 100)) && active == true) {
active = false;
binanceCancelOrder(symbol, orderId).then((r4) => { //Cancel previous SL
var newSL = livePrice * ((100 - percentage) / 100);
binanceStopOrder(symbol, 'SELL', r4.origQty, newSL, newSL).then((r5) => { //Set new SL
orderId = r5.orderId; quantity = r5.origQty; oldPrice = r5.price;
active = true;
}).catch((err) => {
console.log(err);
});
});
}
break;
default:
break;
}
});
}
});
}
查询订单状态功能:
//Get specific order status
function binanceCheckOrderStatus(symbol, orderId) {
if(!orderId){
console.log("order Id not found");
return false;
} else {
var client = loadBinanceKeys2();
return client.getOrder({
symbol: symbol,
orderId: orderId,
recvWindow: 1000000
}).then((order) => {
return order;
}).catch((err) => {
console.log(err);
});
}
}