26 lines
No EOL
1.2 KiB
TypeScript
26 lines
No EOL
1.2 KiB
TypeScript
import schedule from 'node-schedule';
|
|
import * as indicatorService from '../services/indicatorService';
|
|
import { BybitService } from '../services/bybitService';
|
|
import { KlineIntervalV3 } from 'bybit-api';
|
|
import { sendLarkMessage } from '../services/messageService';
|
|
|
|
// Hàm thực hiện phân tích nến
|
|
async function analyzeCandlesJob(symbol: string, interval: KlineIntervalV3) {
|
|
const bybitService = new BybitService(process.env.BYBIT_API_KEY!, process.env.BYBIT_API_SECRET!, false);
|
|
// TODO: Lấy client thật nếu cần
|
|
const candles = await bybitService.getCandles({ symbol, interval, category: 'linear', limit: 200 });
|
|
const analysis = indicatorService.analyze(candles);
|
|
console.log(`[${new Date().toISOString()}] Phân tích nến ${symbol} ${interval}:`, analysis);
|
|
await sendLarkMessage('oc_f9b2e8f0309ecab0c94e3e134b0ddd29', JSON.stringify(analysis));
|
|
// Có thể gửi kết quả qua Lark, lưu DB, ...
|
|
}
|
|
|
|
// Lập lịch chạy vào 00:00 mỗi ngày
|
|
const rule = new schedule.RecurrenceRule();
|
|
rule.minute = [4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59];
|
|
rule.second = 59;
|
|
|
|
schedule.scheduleJob(rule, () => {
|
|
// Có thể lặp qua nhiều symbol/interval nếu muốn
|
|
analyzeCandlesJob('BTCUSDT', '5');
|
|
});
|