Получение необычной задержки от Binance Web SocketJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Получение необычной задержки от Binance Web Socket

Сообщение Anonymous »

`function forceTerminate(){
forceTerm = setTimeout(() => {
ws.terminate();
isClosing = true;
}, 30000);
}

async function buyTicker(selectedToken){
if(!selectedToken){
throw new Error("No ticker found to buy & sell.");
}

const priceApiUrl = `https://api.binance.com/api/v3/ticker/p ... ectedToken}`;
const response = await fetch(priceApiUrl);
const data = await response.json();
buyPrice = parseFloat(data["price"]);
buyTime = Date.now();
lastBought = selectedToken;

return console.log("Ticker:", selectedToken, "bought at", buyPrice);
}

async function sellTicker(selectedToken){
i = 0;
manuallyClosed = false;
ws = new webSocket(`wss://stream.binance.com:443/ws/${selectedToken.toLowerCase()}@trade`);

ws.on("open", () => {
console.log("Connected to sell price check stream.");
});

ws.on("ping", data => {
ws.pong(data);
});

ws.on("error", err => {
console.log("WebSocket error:", err.message);
});

ws.on("close", () => {
ws.removeAllListeners();
ws = undefined;
isClosing = false;
clearTimeout(forceTerm);

if(manuallyClosed){
mainLoop = setTimeout(() => {
mainFunc();
}, delayTime);

console.log("Sell completed & disconnected from sell price check stream.");
}else{
setTimeout(() => {
sellTicker(selectedTicker);
}, 500);

console.log("Disconnected from sell price check stream. Attempting re-connection......");
}
});

ws.on("message", data => {
console.log("tick.."); // to be deleted.

lastMessage = Date.now();

++i;

if(i > 10000){
ws.close(1000, "Requested closure.");
ws.removeAllListeners("message");
isClosing = true;
forceTerminate();
return;
}

data = JSON.parse(data.toString());
sellPrice = parseFloat(data["p"]);
let gainNow = (sellPrice - buyPrice) / buyPrice;

if((gainNow < -0.002) && (sellWindow === 450000)){
sellWindow = (2 * sellWindow);
}

if(gainNow >= profitGain){
GAIN = GAIN * (1 + gainNow - 0.002);
sellTime = Date.now();
ws.close(1000, "Requested closure.");
manuallyClosed = true;
ws.removeAllListeners("message");
isClosing = true;
forceTerminate();
sellWindow = 450000;
profitGain = 0.0033;

if((sellTime - buyTime) > 32500){
delayTime = 2500;
}else{
delayTime = 32500 - sellTime + buyTime;
}

return console.log("Ticker:", selectedTicker, "sold at", sellPrice, ", with GAIN", GAIN, "after", ((sellTime - buyTime) / 60000), "min.");
}

if((gainNow 32500){
delayTime = 2500;
}else{
delayTime = 32500 - sellTime + buyTime;
}

return console.log("Ticker:", selectedTicker, "sold at", sellPrice, ", with GAIN", GAIN, "after", ((sellTime - buyTime) / 60000), "min.");
}

if((Date.now() - buyTime) > sellWindow){
if((gainNow 32500){
delayTime = 2500;
}else{
delayTime = 32500 - sellTime + buyTime;
}

return console.log("Ticker:", selectedTicker, "sold at", sellPrice, ", with GAIN", GAIN, "after", ((sellTime - buyTime) / 60000), "min.");
}
});
}

async function mainFunc(){
let tickerList = undefined;
try{
tickerList = await getBinanceTickerList();
}catch(err){
console.log("Error fetching data from Binance for ticker list:", err.message);

mainLoop = setTimeout(() => {
mainFunc();
}, 32500);

return;
}

let klineData = undefined;
try{
klineData = await getKlineDetails(tickerList);
}catch(err){
console.log("Error fetching data from Binance for kline data:", err.message);

mainLoop = setTimeout(() => {
mainFunc();
}, 32500);

return;
}

selectedTicker = getTickerPriority(tickerList, klineData);

try{
await buyTicker(selectedTicker);
}catch(err){
console.log("Error fetching data from Binance for current/buy price data:", err.message);

mainLoop = setTimeout(() => {
mainFunc();
}, 32500);

return;
}

try{
await sellTicker(selectedTicker);
}catch(err){
console.log("Error fetching data from Binance for sell price data:", err.message);
}
}

async function baseFunc(){
try{
const exApiUrl = "https://api.binance.com/api/v3/exchange ... us=TRADING";
const exResponse = await fetch(exApiUrl);
const exData = await exResponse.json();
const symbolArray = exData["symbols"];
activeTickers = symbolArray.map(val => {
return val["symbol"];
});

activeTickers = activeTickers.filter(val => {
return val.endsWith("USDT");
});

console.log("Bot started..");

mainFunc();

setInterval(() => {
if(((Date.now() - lastMessage) > 60000) && (ws?.readyState === 1) && !isClosing){
ws.close(1000, "Requested closure.");
ws.removeAllListeners("message");
isClosing = true;
forceTerminate();
return;
}
}, 10000);
}catch(err){
console.log("Failed to start the bot:", err.message);
}
}`
< /code>
Для некоторого разрыва тикеров между временем продажи и покупки составляет более 200 минут. Как это
возможно? Где я делаю ошибку? Использование Binance API и веб -потока. < /p>
`Ticker: TSTUSDT bought at 0.0933
Connected to sell price check stream.
3040 tick..
Disconnected from sell price check stream. Attempting re-connection......
Connected to sell price check stream.
tick..
Ticker: TSTUSDT sold at 0.0858 , with GAIN 0.9217527123702782 after
208.58356666666666 min.`
< /code>
Это один журнал, который я получил, например. Где проблема? Мой интернет стабильный. не заблокирован Binance. Где я делаю ошибку? Не соединяет несколько сокетов вместе.

Подробнее здесь: https://stackoverflow.com/questions/794 ... web-socket
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»