`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
Получение необычной задержки от Binance Web Socket ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Python / Binance API — Как получить позицию по фьючерсам Binance Leaderboard из API?
Anonymous » » в форуме Python - 0 Ответы
- 69 Просмотры
-
Последнее сообщение Anonymous
-