Compare commits
10 Commits
0c115fe806
...
cc5b0daee9
Author | SHA1 | Date | |
---|---|---|---|
![]() |
cc5b0daee9 | ||
![]() |
44b67d9278 | ||
![]() |
c0568a1ec2 | ||
![]() |
b3dabd2b9e | ||
![]() |
b2b6dd59ef | ||
![]() |
a88f62a501 | ||
![]() |
ef93638ddd | ||
![]() |
8abca20f88 | ||
![]() |
e11f77dca4 | ||
![]() |
687253bace |
32
analytics.js
Normal file
32
analytics.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
const db = require("./database");
|
||||||
|
|
||||||
|
db.query(
|
||||||
|
`select * from analytics WHERE count >= 3`,
|
||||||
|
[],
|
||||||
|
(error, results) => {
|
||||||
|
if (error) {
|
||||||
|
console.log(error);
|
||||||
|
} else {
|
||||||
|
const obj = {};
|
||||||
|
|
||||||
|
results.forEach((e, i) => {
|
||||||
|
if (typeof obj[e.count] === 'undefined') {
|
||||||
|
obj[e.count] = {
|
||||||
|
prev: {},
|
||||||
|
next: {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (results[i - 1]) {
|
||||||
|
obj[e.count].prev[results[i - 1].count] = (obj[e.count].prev[results[i - 1].count] || 0) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (results[i + 1]) {
|
||||||
|
obj[e.count].next[results[i + 1].count] = (obj[e.count].next[results[i + 1].count] || 0) + 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
367
index.js
367
index.js
@ -37,6 +37,10 @@ let lastResult = null;
|
|||||||
let currentSessionID = null;
|
let currentSessionID = null;
|
||||||
let d = null; // Ví tiền user
|
let d = null; // Ví tiền user
|
||||||
let dInWeb = null; // Ví tiền theo web
|
let dInWeb = null; // Ví tiền theo web
|
||||||
|
let currentColorCandle = -1; // Nến hiện tại
|
||||||
|
let totalColorCandle = 0;
|
||||||
|
let interrupted = 0; // Lãi thực tế
|
||||||
|
let isShowWarningInterrupted = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tất cả config ở đây
|
* Tất cả config ở đây
|
||||||
@ -44,10 +48,11 @@ let dInWeb = null; // Ví tiền theo web
|
|||||||
const CONFIG = {
|
const CONFIG = {
|
||||||
autoTrade: true,
|
autoTrade: true,
|
||||||
countTradeContinue: 3, // 7 lệnh thông thì đánh ngược lại
|
countTradeContinue: 3, // 7 lệnh thông thì đánh ngược lại
|
||||||
moneyEnterOrder: [5, 5, 10, 20, 30], // Nếu gặp 7 lệnh thông sẽ đánh ngược lại với từng mệnh giá này
|
moneyEnterOrder: [5, 10, 20, 35, 70, 125, 0, 0, 0, 0, 0, 0, 0, 0], // Nếu gặp 7 lệnh thông sẽ đánh ngược lại với từng mệnh giá này
|
||||||
maxHistory: 40, // Lưu lại lịch sử 40 phiên
|
maxHistory: 40, // Lưu lại lịch sử 40 phiên
|
||||||
historys: [], // Lịch sử lệnh
|
historys: [], // Lịch sử lệnh
|
||||||
enterOrderList: [], // Lệnh đang vào
|
enterOrderList: [], // Lệnh đang vào
|
||||||
|
interrupted: 50, // Cắt lời
|
||||||
};
|
};
|
||||||
|
|
||||||
puppeteer
|
puppeteer
|
||||||
@ -69,7 +74,7 @@ puppeteer
|
|||||||
await Promise.all([page.waitForNavigation()]);
|
await Promise.all([page.waitForNavigation()]);
|
||||||
|
|
||||||
const job = new cron.CronJob({
|
const job = new cron.CronJob({
|
||||||
cronTime: "45 0/1 * * * *",
|
cronTime: "50 0/1 * * * *",
|
||||||
onTick: async function () {
|
onTick: async function () {
|
||||||
await page.reload({ waitUntil: ["networkidle0"] });
|
await page.reload({ waitUntil: ["networkidle0"] });
|
||||||
},
|
},
|
||||||
@ -79,8 +84,8 @@ puppeteer
|
|||||||
await cdp.send("Network.enable");
|
await cdp.send("Network.enable");
|
||||||
await cdp.send("Page.enable");
|
await cdp.send("Page.enable");
|
||||||
let id = 1;
|
let id = 1;
|
||||||
|
let count = 0;
|
||||||
let countStaticData = 0;
|
let countStaticData = 0;
|
||||||
let count;
|
|
||||||
|
|
||||||
const printResponse = async function (cdp, response) {
|
const printResponse = async function (cdp, response) {
|
||||||
if (!response.response || !page || !page.evaluate) {
|
if (!response.response || !page || !page.evaluate) {
|
||||||
@ -103,12 +108,22 @@ puppeteer
|
|||||||
}
|
}
|
||||||
currentSessionID = isDisableBtn ? JSON.parse(data.substr(2, data.length))[1].session : -1;
|
currentSessionID = isDisableBtn ? JSON.parse(data.substr(2, data.length))[1].session : -1;
|
||||||
// if (currentSessionID !== -1) console.log('currentSessionID', currentSessionID);
|
// if (currentSessionID !== -1) console.log('currentSessionID', currentSessionID);
|
||||||
const indSessionID = CONFIG.enterOrderList.findIndex((e) => e.sessionID === currentSessionID && e.enable);
|
const indSessionID = CONFIG.enterOrderList.findIndex(
|
||||||
|
(e) => e.sessionID === currentSessionID && e.enable
|
||||||
|
);
|
||||||
|
|
||||||
if (indSessionID > -1 && isDisableBtn) {
|
if (indSessionID > -1 && isDisableBtn) {
|
||||||
CONFIG.enterOrderList[indSessionID].enable = false;
|
CONFIG.enterOrderList[indSessionID].enable = false;
|
||||||
CONFIG.enterOrderList[indSessionID].time = new Date().toLocaleString('vi-VN');
|
CONFIG.enterOrderList[indSessionID].time = new Date().toLocaleString(
|
||||||
|
"vi-VN"
|
||||||
|
);
|
||||||
const moneyEnterOrder = CONFIG.moneyEnterOrder[CONFIG.enterOrderList[indSessionID].ind];
|
const moneyEnterOrder = CONFIG.moneyEnterOrder[CONFIG.enterOrderList[indSessionID].ind];
|
||||||
await enterOrderFn(CONFIG.enterOrderList[indSessionID].trend === 0 ? 'buy' : 'sell', moneyEnterOrder, TELEGRAM_CHANNEL, CONFIG.enterOrderList[indSessionID].sessionID);
|
await enterOrderFn(
|
||||||
|
CONFIG.enterOrderList[indSessionID].trend === 0 ? "buy" : "sell",
|
||||||
|
moneyEnterOrder,
|
||||||
|
TELEGRAM_CHANNEL,
|
||||||
|
CONFIG.enterOrderList[indSessionID].sessionID
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,9 +147,8 @@ puppeteer
|
|||||||
} else if (finalSide === "NORMAL") {
|
} else if (finalSide === "NORMAL") {
|
||||||
lastResult = 2;
|
lastResult = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentSessionID !== -1) {
|
|
||||||
// Không tính nến chờ
|
// Không tính nến chờ
|
||||||
|
if (currentSessionID !== -1) {
|
||||||
roleEnterOrder(dataParse.session, lastResult);
|
roleEnterOrder(dataParse.session, lastResult);
|
||||||
// TeleGlobal.sendMessage(
|
// TeleGlobal.sendMessage(
|
||||||
// TELEGRAM_CHANNEL,
|
// TELEGRAM_CHANNEL,
|
||||||
@ -162,9 +176,9 @@ puppeteer
|
|||||||
console.log("Vào webSocketCreated");
|
console.log("Vào webSocketCreated");
|
||||||
});
|
});
|
||||||
|
|
||||||
page.on('response', async (response) => {
|
page.on("response", async (response) => {
|
||||||
const request = response.request();
|
const request = response.request();
|
||||||
if (request.url().includes('binaryoption/spot-balance')){
|
if (request.url().includes("binaryoption/spot-balance")) {
|
||||||
const res = await response.json();
|
const res = await response.json();
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
if (!d) {
|
if (!d) {
|
||||||
@ -173,7 +187,7 @@ puppeteer
|
|||||||
dInWeb = res.d;
|
dInWeb = res.d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
// Vào lệnh: type - buy/sell
|
// Vào lệnh: type - buy/sell
|
||||||
async function enterOrderFn(type, countMoney, myTelegramID, sessionIDArg) {
|
async function enterOrderFn(type, countMoney, myTelegramID, sessionIDArg) {
|
||||||
@ -206,7 +220,9 @@ puppeteer
|
|||||||
if (isEnterOrderSuccess) {
|
if (isEnterOrderSuccess) {
|
||||||
TeleGlobal.sendMessage(
|
TeleGlobal.sendMessage(
|
||||||
myTelegramID,
|
myTelegramID,
|
||||||
`👌 Đặt lệnh ${type} | ${countMoney}$ ${` | ${sessionIDArg}` || ""} thành công!`,
|
`👌 Đặt lệnh ${type} | ${countMoney}$ ${
|
||||||
|
` | ${sessionIDArg}` || ""
|
||||||
|
} thành công!`,
|
||||||
{ parse_mode: "HTML" }
|
{ parse_mode: "HTML" }
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@ -222,15 +238,15 @@ puppeteer
|
|||||||
TeleGlobal.on("message", async ({ text, from }) => {
|
TeleGlobal.on("message", async ({ text, from }) => {
|
||||||
const myTelegramID = from.id;
|
const myTelegramID = from.id;
|
||||||
|
|
||||||
if (text.toLowerCase() === 't') {
|
if (text.toLowerCase() === "t") {
|
||||||
const enterOrder = {
|
const enterOrder = {
|
||||||
enable: true,
|
enable: true,
|
||||||
ind: 0, // Lần vào lệnh thua
|
ind: 0, // Lần vào lệnh thua
|
||||||
isWin: false,
|
isWin: false,
|
||||||
trend: 0, // Lệnh vào buy
|
trend: 0, // Lệnh vào buy
|
||||||
sessionID: currentSessionID + (currentSessionID === -1 ? 1 : 2), // Phiên vào lệnh
|
sessionID: currentSessionID + (currentSessionID === -1 ? 1 : 2), // Phiên vào lệnh
|
||||||
time: '', // Tgian vào lệnh
|
time: "", // Tgian vào lệnh
|
||||||
}
|
};
|
||||||
CONFIG.enterOrderList.push(enterOrder);
|
CONFIG.enterOrderList.push(enterOrder);
|
||||||
|
|
||||||
TeleGlobal.sendMessage(
|
TeleGlobal.sendMessage(
|
||||||
@ -260,7 +276,12 @@ puppeteer
|
|||||||
5. /set_money_enter:number1,number2 - Vào tiền khi đủ điều kiện;
|
5. /set_money_enter:number1,number2 - Vào tiền khi đủ điều kiện;
|
||||||
6. /history - Vào tiền khi đủ điều kiện;
|
6. /history - Vào tiền khi đủ điều kiện;
|
||||||
7. /check_tk - Check tiền ví;
|
7. /check_tk - Check tiền ví;
|
||||||
8. /view_history:[date] - Xem toàn bộ lịch sử vào lệnh; Ví dụ /view_history:3/3/2022`,
|
8. /view_history:[date] - Xem toàn bộ lịch sử vào lệnh; Ví dụ /view_history:3/3/2022;
|
||||||
|
9. /analytics - Xem toàn bộ thống kê;
|
||||||
|
10. /interrupted:number - Cắt lời;
|
||||||
|
11. /reset_interrupted - Reset lãi ngày, tức là qua 1 ngày cần config lại cái này. Để hệ thống reset lãi về 0;
|
||||||
|
12. /sync_money - Đồng bộ tiền tính toán theo phiên và tiền trong ví;
|
||||||
|
13. /view_amount - Xem số lãi trong ngày;`,
|
||||||
{ parse_mode: "HTML" }
|
{ parse_mode: "HTML" }
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -279,11 +300,9 @@ puppeteer
|
|||||||
|
|
||||||
if (text === "/check_tk") {
|
if (text === "/check_tk") {
|
||||||
if (!dInWeb) {
|
if (!dInWeb) {
|
||||||
TeleGlobal.sendMessage(
|
TeleGlobal.sendMessage(myTelegramID, `Chưa lấy được thông tin ví`, {
|
||||||
myTelegramID,
|
parse_mode: "HTML",
|
||||||
`Chưa lấy được thông tin ví`,
|
});
|
||||||
{ parse_mode: "HTML" }
|
|
||||||
);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -301,11 +320,9 @@ puppeteer
|
|||||||
|
|
||||||
if (text === "/enable_auto_trade") {
|
if (text === "/enable_auto_trade") {
|
||||||
CONFIG.autoTrade = true;
|
CONFIG.autoTrade = true;
|
||||||
TeleGlobal.sendMessage(
|
TeleGlobal.sendMessage(myTelegramID, `Bật auto trade thành công!`, {
|
||||||
myTelegramID,
|
parse_mode: "HTML",
|
||||||
`Bật auto trade thành công!`,
|
});
|
||||||
{ parse_mode: "HTML" }
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,52 +346,148 @@ SELL: /sell:[number]`,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text.startsWith('/set_count_trade')) {
|
if (text.startsWith("/set_count_trade")) {
|
||||||
const countTrade = Number(text.replace("/set_count_trade:", ""));
|
const countTrade = Number(text.replace("/set_count_trade:", ""));
|
||||||
CONFIG.countTradeContinue = countTrade;
|
CONFIG.countTradeContinue = countTrade;
|
||||||
TeleGlobal.sendMessage(myTelegramID, `Cập nhật thành công. ${countTrade} lệnh thông thì đánh ngược lại`, {
|
TeleGlobal.sendMessage(
|
||||||
|
myTelegramID,
|
||||||
|
`Cập nhật thành công. ${countTrade} lệnh thông thì đánh ngược lại`,
|
||||||
|
{
|
||||||
parse_mode: "HTML",
|
parse_mode: "HTML",
|
||||||
});
|
}
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text.startsWith('/set_money_enter')) {
|
if (text.startsWith("/set_money_enter")) {
|
||||||
const moneyEnterOrderNew = text.replace("/set_money_enter:", "").split(',');
|
const moneyEnterOrderNew = text
|
||||||
|
.replace("/set_money_enter:", "")
|
||||||
|
.split(",");
|
||||||
CONFIG.moneyEnterOrder = moneyEnterOrderNew;
|
CONFIG.moneyEnterOrder = moneyEnterOrderNew;
|
||||||
TeleGlobal.sendMessage(myTelegramID, `Cập nhật thành công. ${moneyEnterOrderNew.join(',')} số tiền giới hạn khi đánh đảo chiều`, {
|
TeleGlobal.sendMessage(
|
||||||
|
myTelegramID,
|
||||||
|
`Cập nhật thành công. ${moneyEnterOrderNew.join(
|
||||||
|
","
|
||||||
|
)} số tiền giới hạn khi đánh đảo chiều`,
|
||||||
|
{
|
||||||
parse_mode: "HTML",
|
parse_mode: "HTML",
|
||||||
});
|
}
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text.startsWith('/view_history')) {
|
if (text.startsWith("/view_history")) {
|
||||||
const dateQuery = text.replace('/view_history:');
|
const dateQuery = text.replace("/view_history:", "");
|
||||||
db.query(
|
db.query(
|
||||||
`SELECT * FROM histories WHERE time like '%${dateQuery}' ORDER BY id asc`,
|
`SELECT * FROM histories WHERE time like '%${dateQuery}' ORDER BY id asc`,
|
||||||
[], (error, results) => {
|
[],
|
||||||
|
(error, results) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
TeleGlobal.sendMessage(myTelegramID, `Truy vấn lịch sử thất bại!`, {
|
TeleGlobal.sendMessage(
|
||||||
|
myTelegramID,
|
||||||
|
`Truy vấn lịch sử thất bại!`,
|
||||||
|
{
|
||||||
parse_mode: "HTML",
|
parse_mode: "HTML",
|
||||||
});
|
}
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
let textResult = '';
|
let textResult = "";
|
||||||
|
|
||||||
if (!results.length) {
|
if (!results.length) {
|
||||||
textResult = 'Chưa có lịch sử giao dịch!';
|
textResult = "Chưa có lịch sử giao dịch!";
|
||||||
} else {
|
} else {
|
||||||
results.forEach((e) => {
|
results.forEach((e) => {
|
||||||
textResult += `${e.time} | ${e.sessionID} | ${coverLastResult(e.trend)} | ${e.isWin ? 'Thắng' : 'Thua'} ${e.money}$\n`;
|
textResult += `${e.time} | ${e.sessionID} | ${coverLastResult(
|
||||||
|
e.trend
|
||||||
|
)} | ${e.isWin ? "Thắng" : "Thua"} ${e.money}$\n`;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
TeleGlobal.sendMessage(myTelegramID, textResult, { parse_mode: "HTML" });
|
TeleGlobal.sendMessage(myTelegramID, textResult, {
|
||||||
}
|
parse_mode: "HTML",
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text === "/analytics") {
|
||||||
|
db.query(
|
||||||
|
`select count(id) as so_lan_xuat_hien, count as nen_thong from analytics GROUP BY count`,
|
||||||
|
[],
|
||||||
|
(error, results) => {
|
||||||
|
if (error) {
|
||||||
|
console.log(error);
|
||||||
|
TeleGlobal.sendMessage(
|
||||||
|
myTelegramID,
|
||||||
|
`Truy vấn thống kê thất bại!`,
|
||||||
|
{
|
||||||
|
parse_mode: "HTML",
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
let textResult = `Số lần xuất hiện|Nến thông\n`;
|
||||||
|
if (!results.length) {
|
||||||
|
textResult = "Chưa có thống kê lịch sử!";
|
||||||
|
} else {
|
||||||
|
results.forEach((e) => {
|
||||||
|
textResult += `<b>${e.so_lan_xuat_hien}</b> ------ ${e.nen_thong}\n`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
TeleGlobal.sendMessage(myTelegramID, textResult, {
|
||||||
|
parse_mode: "HTML",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (text.startsWith("/interrupted")) {
|
||||||
|
const interrupted = text.replace("/interrupted:", "");
|
||||||
|
CONFIG.interrupted = interrupted;
|
||||||
|
TeleGlobal.sendMessage(
|
||||||
|
myTelegramID,
|
||||||
|
`Cập nhật thành công tiền cắt lời ${interrupted}!`,
|
||||||
|
{ parse_mode: "HTML" }
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text === '/reset_interrupted') {
|
||||||
|
interrupted = 0;
|
||||||
|
isShowWarningInterrupted = false;
|
||||||
|
TeleGlobal.sendMessage(
|
||||||
|
myTelegramID,
|
||||||
|
`Reset cắt lãi thành công!`,
|
||||||
|
{ parse_mode: "HTML" }
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text === '/sync_money') {
|
||||||
|
if (dInWeb && dInWeb.demoBalance) {
|
||||||
|
d.demoBalance = dInWeb.demoBalance;
|
||||||
|
TeleGlobal.sendMessage(
|
||||||
|
myTelegramID,
|
||||||
|
`Đồng bộ tiền thành công!`,
|
||||||
|
{ parse_mode: "HTML" }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text === '/view_amount') {
|
||||||
|
TeleGlobal.sendMessage(
|
||||||
|
myTelegramID,
|
||||||
|
`Số lãi hiện tại là ${interrupted}!`,
|
||||||
|
{ parse_mode: "HTML" }
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hàm này xử lý sau mỗi phiên có kết quả
|
* Hàm này xử lý sau mỗi phiên có kết quả
|
||||||
@ -388,59 +501,123 @@ function roleEnterOrder(sessionID, lastResult) {
|
|||||||
}
|
}
|
||||||
CONFIG.historys.push({ sessionID, lastResult });
|
CONFIG.historys.push({ sessionID, lastResult });
|
||||||
|
|
||||||
|
// Thêm dữ liệu vào thống kê
|
||||||
|
if (currentColorCandle === -1) {
|
||||||
|
currentColorCandle = lastResult;
|
||||||
|
totalColorCandle += 1;
|
||||||
|
} else {
|
||||||
|
if (currentColorCandle === lastResult) {
|
||||||
|
// Nếu phiên tiếp theo trùng màu với phiên trước đó thì tăng số lượng nến trùng lên
|
||||||
|
totalColorCandle += 1;
|
||||||
|
} else {
|
||||||
|
db.query(
|
||||||
|
`INSERT INTO analytics (trend, date, count) VALUES(${currentColorCandle}, '${new Date().toLocaleString(
|
||||||
|
"vi-VN"
|
||||||
|
)}', ${totalColorCandle})`
|
||||||
|
);
|
||||||
|
totalColorCandle = 1;
|
||||||
|
currentColorCandle = lastResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PHIÊN ĐÃ VÀO LỆNH SẼ CHECK
|
* PHIÊN ĐÃ VÀO LỆNH SẼ CHECK
|
||||||
* sessionID - 1 = enterOrder.sessionID
|
* sessionID - 1 = enterOrder.sessionID
|
||||||
*/
|
*/
|
||||||
function currentEnterOrderFn() {
|
function currentEnterOrderFn() {
|
||||||
const indEnterOrder = CONFIG.enterOrderList.findIndex((e) => e.sessionID === sessionID - 1);
|
const indEnterOrder = CONFIG.enterOrderList.findIndex(
|
||||||
|
(e) => e.sessionID === sessionID - 1
|
||||||
|
);
|
||||||
if (indEnterOrder === -1) return undefined;
|
if (indEnterOrder === -1) return undefined;
|
||||||
return CONFIG.enterOrderList[indEnterOrder];
|
return CONFIG.enterOrderList[indEnterOrder];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Xoá phiên hiện tại
|
// Xoá phiên hiện tại
|
||||||
function deleteCurrentEnterOrder() {
|
function deleteCurrentEnterOrder() {
|
||||||
CONFIG.enterOrderList = CONFIG.enterOrderList.filter((e) => e.sessionID !== sessionID - 1);
|
CONFIG.enterOrderList = CONFIG.enterOrderList.filter(
|
||||||
|
(e) => e.sessionID !== sessionID - 1
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const currentEnterOrder = currentEnterOrderFn();
|
const currentEnterOrder = currentEnterOrderFn();
|
||||||
|
|
||||||
|
if (interrupted > CONFIG.interrupted && !isShowWarningInterrupted) {
|
||||||
|
TeleGlobal.sendMessage(
|
||||||
|
TELEGRAM_CHANNEL,
|
||||||
|
`Số lãi trong ngày (${interrupted}) lớn hơn số lãi config(${CONFIG.interrupted}). Hệ thống sẽ dừng lại!`,
|
||||||
|
{ parse_mode: "HTML" }
|
||||||
|
);
|
||||||
|
CONFIG.enterOrderList = [];
|
||||||
|
isShowWarningInterrupted = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (currentEnterOrder) {
|
if (currentEnterOrder) {
|
||||||
if (currentEnterOrder.trend === lastResult) {
|
if (currentEnterOrder.trend === lastResult) {
|
||||||
// WIN session
|
// WIN session
|
||||||
TeleGlobal.sendMessage(
|
TeleGlobal.sendMessage(
|
||||||
TELEGRAM_CHANNEL,
|
TELEGRAM_CHANNEL,
|
||||||
`🎉 Bạn vừa thắng lệnh phiên ${sessionID - 1} với lệnh ${coverLastResult(lastResult)}.
|
`🎉 Bạn vừa thắng lệnh phiên ${
|
||||||
|
sessionID - 1
|
||||||
|
} với lệnh ${coverLastResult(lastResult)}.
|
||||||
⏰ Vào lệnh: ${currentEnterOrder.time}
|
⏰ Vào lệnh: ${currentEnterOrder.time}
|
||||||
💰 Lãi: ${CONFIG.moneyEnterOrder[currentEnterOrder.ind] * 0.95}$
|
💰 Lãi: ${CONFIG.moneyEnterOrder[currentEnterOrder.ind] * 0.95}$
|
||||||
💰 Tổng: ${d.demoBalance + CONFIG.moneyEnterOrder[currentEnterOrder.ind] * 0.95}`,
|
💰 Tổng: ${
|
||||||
|
d.demoBalance + CONFIG.moneyEnterOrder[currentEnterOrder.ind] * 0.95
|
||||||
|
}`,
|
||||||
{ parse_mode: "HTML" }
|
{ parse_mode: "HTML" }
|
||||||
);
|
);
|
||||||
d.demoBalance += CONFIG.moneyEnterOrder[currentEnterOrder.ind] * 0.95;
|
d.demoBalance += CONFIG.moneyEnterOrder[currentEnterOrder.ind] * 0.95;
|
||||||
|
interrupted += CONFIG.moneyEnterOrder[currentEnterOrder.ind] * 0.95;
|
||||||
|
|
||||||
db.query(`INSERT INTO histories (sessionID, trend, time, isWin, money) VALUES(${sessionID - 1}, ${lastResult}, '${currentEnterOrder.time}', 1, ${CONFIG.moneyEnterOrder[currentEnterOrder.ind] * 0.95})`);
|
db.query(
|
||||||
|
`INSERT INTO histories (sessionID, trend, time, isWin, money) VALUES(${
|
||||||
|
sessionID - 1
|
||||||
|
}, ${lastResult}, '${currentEnterOrder.time}', 1, ${
|
||||||
|
CONFIG.moneyEnterOrder[currentEnterOrder.ind] * 0.95
|
||||||
|
})`
|
||||||
|
);
|
||||||
deleteCurrentEnterOrder();
|
deleteCurrentEnterOrder();
|
||||||
} else {
|
} else {
|
||||||
// Nếu vẫn còn vốn xoay vòng thì đánh tiếp
|
// Nếu vẫn còn vốn xoay vòng thì đánh tiếp
|
||||||
if (currentEnterOrder.ind < CONFIG.moneyEnterOrder.length) {
|
if (
|
||||||
|
currentEnterOrder.ind < CONFIG.moneyEnterOrder.length &&
|
||||||
|
typeof CONFIG.moneyEnterOrder[currentEnterOrder.ind + 1] !== "undefined"
|
||||||
|
) {
|
||||||
|
if (CONFIG.moneyEnterOrder[currentEnterOrder.ind + 1]) {
|
||||||
currentEnterOrder.sessionID += 2;
|
currentEnterOrder.sessionID += 2;
|
||||||
TeleGlobal.sendMessage(
|
TeleGlobal.sendMessage(
|
||||||
TELEGRAM_CHANNEL,
|
TELEGRAM_CHANNEL,
|
||||||
`🏳 Bạn vừa thua lệnh phiên ${sessionID - 1} với lệnh ${coverLastResult(lastResult)}.
|
`🏳 Bạn vừa thua lệnh phiên ${
|
||||||
⏰ Vào lệnh: ${currentEnterOrder.time}
|
sessionID - 1
|
||||||
💰 Thua: ${CONFIG.moneyEnterOrder[currentEnterOrder.ind]}$
|
} với lệnh ${coverLastResult(lastResult)}.
|
||||||
💰 Tổng: ${d.demoBalance - CONFIG.moneyEnterOrder[currentEnterOrder.ind]}$
|
⏰ Vào lệnh: ${currentEnterOrder.time}
|
||||||
Bạn sẽ vào lệnh ở phiên tiếp theo(${currentEnterOrder.sessionID})!`,
|
💰 Thua: ${CONFIG.moneyEnterOrder[currentEnterOrder.ind]}$
|
||||||
|
💰 Tổng: ${d.demoBalance - CONFIG.moneyEnterOrder[currentEnterOrder.ind]}$
|
||||||
|
Bạn sẽ vào lệnh ở phiên tiếp theo(${currentEnterOrder.sessionID})!`,
|
||||||
{ parse_mode: "HTML" }
|
{ parse_mode: "HTML" }
|
||||||
);
|
);
|
||||||
d.demoBalance -= CONFIG.moneyEnterOrder[currentEnterOrder.ind];
|
d.demoBalance -= CONFIG.moneyEnterOrder[currentEnterOrder.ind];
|
||||||
|
interrupted -= CONFIG.moneyEnterOrder[currentEnterOrder.ind];
|
||||||
|
|
||||||
db.query(`INSERT INTO histories (sessionID, trend, time, isWin, money) VALUES(${sessionID - 1}, ${lastResult}, '${currentEnterOrder.time}', 0, ${CONFIG.moneyEnterOrder[currentEnterOrder.ind]})`);
|
db.query(
|
||||||
|
`INSERT INTO histories (sessionID, trend, time, isWin, money) VALUES(${
|
||||||
|
sessionID - 1
|
||||||
|
}, ${lastResult}, '${currentEnterOrder.time}', 0, ${
|
||||||
|
CONFIG.moneyEnterOrder[currentEnterOrder.ind]
|
||||||
|
})`
|
||||||
|
);
|
||||||
|
|
||||||
currentEnterOrder.ind += 1;
|
currentEnterOrder.ind += 1;
|
||||||
currentEnterOrder.enable = true;
|
currentEnterOrder.enable = true;
|
||||||
currentEnterOrder.time = '';
|
currentEnterOrder.time = "";
|
||||||
|
} else {
|
||||||
|
TeleGlobal.sendMessage(
|
||||||
|
TELEGRAM_CHANNEL,
|
||||||
|
`⚡️ Đang trong phiên break lệnh!`,
|
||||||
|
{ parse_mode: "HTML" }
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
deleteCurrentEnterOrder();
|
deleteCurrentEnterOrder();
|
||||||
TeleGlobal.sendMessage(
|
TeleGlobal.sendMessage(
|
||||||
@ -480,12 +657,18 @@ Bạn sẽ vào lệnh ở phiên tiếp theo(${currentEnterOrder.sessionID})!`,
|
|||||||
(isNotBreakdowUp || isNotBreakdowDown) &&
|
(isNotBreakdowUp || isNotBreakdowDown) &&
|
||||||
CONFIG.historys.length >= CONFIG.countTradeContinue
|
CONFIG.historys.length >= CONFIG.countTradeContinue
|
||||||
) {
|
) {
|
||||||
const isEnterOrderd = CONFIG.enterOrderList.map((e) => e.sessionID).includes(sessionID + 1);
|
const isEnterOrderd = CONFIG.enterOrderList
|
||||||
const textAlert = `Hệ thống đang thông ${totalEnterOrderContinue} lệnh ${coverLastResult(lastResult)} liên tiếp.`;
|
.map((e) => e.sessionID)
|
||||||
|
.includes(sessionID + 1);
|
||||||
|
const textAlert = `Hệ thống đang thông ${totalEnterOrderContinue} lệnh ${coverLastResult(
|
||||||
|
lastResult
|
||||||
|
)} liên tiếp.`;
|
||||||
if (isEnterOrderd) {
|
if (isEnterOrderd) {
|
||||||
TeleGlobal.sendMessage(
|
TeleGlobal.sendMessage(
|
||||||
TELEGRAM_CHANNEL,
|
TELEGRAM_CHANNEL,
|
||||||
`${textAlert} Bạn đã thua lệnh trước (${sessionID - 1}) nên hệ thống tự vào lệnh tiếp theo theo config!`,
|
`${textAlert} Bạn đã thua lệnh trước (${
|
||||||
|
sessionID - 1
|
||||||
|
}) nên hệ thống tự vào lệnh tiếp theo theo config!`,
|
||||||
{ parse_mode: "HTML" }
|
{ parse_mode: "HTML" }
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -505,15 +688,17 @@ Bạn sẽ vào lệnh ở phiên tiếp theo(${currentEnterOrder.sessionID})!`,
|
|||||||
isWin: true,
|
isWin: true,
|
||||||
trend: trendEnterOrder, // Lệnh vào
|
trend: trendEnterOrder, // Lệnh vào
|
||||||
sessionID: sessionID + 1, // Phiên vào lệnh
|
sessionID: sessionID + 1, // Phiên vào lệnh
|
||||||
time: '', // Tgian vào lệnh
|
time: "", // Tgian vào lệnh
|
||||||
}
|
};
|
||||||
|
|
||||||
CONFIG.enterOrderList.push(enterOrder);
|
CONFIG.enterOrderList.push(enterOrder);
|
||||||
|
|
||||||
if (CONFIG.autoTrade) {
|
if (CONFIG.autoTrade) {
|
||||||
TeleGlobal.sendMessage(
|
TeleGlobal.sendMessage(
|
||||||
TELEGRAM_CHANNEL,
|
TELEGRAM_CHANNEL,
|
||||||
`${textAlert} Hệ thống đã tự vào lệnh ${coverLastResult(enterOrder.trend)} cho phiên sau(${enterOrder.sessionID})!`,
|
`${textAlert} Hệ thống đã tự vào lệnh ${coverLastResult(
|
||||||
|
enterOrder.trend
|
||||||
|
)} cho phiên sau(${enterOrder.sessionID})!`,
|
||||||
{ parse_mode: "HTML" }
|
{ parse_mode: "HTML" }
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@ -529,10 +714,50 @@ Bạn sẽ vào lệnh ở phiên tiếp theo(${currentEnterOrder.sessionID})!`,
|
|||||||
|
|
||||||
function drawHistory() {
|
function drawHistory() {
|
||||||
return `
|
return `
|
||||||
${coverLastResult(CONFIG.historys[0])} ${coverLastResult(CONFIG.historys[4])} ${coverLastResult(CONFIG.historys[8])} ${coverLastResult(CONFIG.historys[12])} ${coverLastResult(CONFIG.historys[16])} ${coverLastResult(CONFIG.historys[20])} ${coverLastResult(CONFIG.historys[24])} ${coverLastResult(CONFIG.historys[28])} ${coverLastResult(CONFIG.historys[32])} ${coverLastResult(CONFIG.historys[36])}
|
${coverLastResult(CONFIG.historys[0])} ${coverLastResult(
|
||||||
${coverLastResult(CONFIG.historys[1])} ${coverLastResult(CONFIG.historys[5])} ${coverLastResult(CONFIG.historys[9])} ${coverLastResult(CONFIG.historys[13])} ${coverLastResult(CONFIG.historys[17])} ${coverLastResult(CONFIG.historys[21])} ${coverLastResult(CONFIG.historys[25])} ${coverLastResult(CONFIG.historys[29])} ${coverLastResult(CONFIG.historys[33])} ${coverLastResult(CONFIG.historys[37])}
|
CONFIG.historys[4]
|
||||||
${coverLastResult(CONFIG.historys[2])} ${coverLastResult(CONFIG.historys[6])} ${coverLastResult(CONFIG.historys[10])} ${coverLastResult(CONFIG.historys[14])} ${coverLastResult(CONFIG.historys[18])} ${coverLastResult(CONFIG.historys[22])} ${coverLastResult(CONFIG.historys[26])} ${coverLastResult(CONFIG.historys[30])} ${coverLastResult(CONFIG.historys[34])} ${coverLastResult(CONFIG.historys[38])}
|
)} ${coverLastResult(CONFIG.historys[8])} ${coverLastResult(
|
||||||
${coverLastResult(CONFIG.historys[3])} ${coverLastResult(CONFIG.historys[7])} ${coverLastResult(CONFIG.historys[11])} ${coverLastResult(CONFIG.historys[15])} ${coverLastResult(CONFIG.historys[19])} ${coverLastResult(CONFIG.historys[23])} ${coverLastResult(CONFIG.historys[27])} ${coverLastResult(CONFIG.historys[31])} ${coverLastResult(CONFIG.historys[35])} ${coverLastResult(CONFIG.historys[39])}
|
CONFIG.historys[12]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[16])} ${coverLastResult(
|
||||||
|
CONFIG.historys[20]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[24])} ${coverLastResult(
|
||||||
|
CONFIG.historys[28]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[32])} ${coverLastResult(
|
||||||
|
CONFIG.historys[36]
|
||||||
|
)}
|
||||||
|
${coverLastResult(CONFIG.historys[1])} ${coverLastResult(
|
||||||
|
CONFIG.historys[5]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[9])} ${coverLastResult(
|
||||||
|
CONFIG.historys[13]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[17])} ${coverLastResult(
|
||||||
|
CONFIG.historys[21]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[25])} ${coverLastResult(
|
||||||
|
CONFIG.historys[29]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[33])} ${coverLastResult(
|
||||||
|
CONFIG.historys[37]
|
||||||
|
)}
|
||||||
|
${coverLastResult(CONFIG.historys[2])} ${coverLastResult(
|
||||||
|
CONFIG.historys[6]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[10])} ${coverLastResult(
|
||||||
|
CONFIG.historys[14]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[18])} ${coverLastResult(
|
||||||
|
CONFIG.historys[22]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[26])} ${coverLastResult(
|
||||||
|
CONFIG.historys[30]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[34])} ${coverLastResult(
|
||||||
|
CONFIG.historys[38]
|
||||||
|
)}
|
||||||
|
${coverLastResult(CONFIG.historys[3])} ${coverLastResult(
|
||||||
|
CONFIG.historys[7]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[11])} ${coverLastResult(
|
||||||
|
CONFIG.historys[15]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[19])} ${coverLastResult(
|
||||||
|
CONFIG.historys[23]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[27])} ${coverLastResult(
|
||||||
|
CONFIG.historys[31]
|
||||||
|
)} ${coverLastResult(CONFIG.historys[35])} ${coverLastResult(
|
||||||
|
CONFIG.historys[39]
|
||||||
|
)}
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user