update refactor
This commit is contained in:
parent
01abc7e446
commit
55ad0607f3
39 changed files with 4304 additions and 584 deletions
69
src/services/bybitService.ts
Normal file
69
src/services/bybitService.ts
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
import { CancelOrderParamsV5, GetAccountOrdersParamsV5, GetKlineParamsV5, OrderParamsV5, RestClientV5 } from 'bybit-api';
|
||||
import { Candle } from '../dao/candles';
|
||||
export class BybitService {
|
||||
private client: RestClientV5;
|
||||
|
||||
constructor(apiKey: string, apiSecret: string, testnet: boolean = true) {
|
||||
this.client = new RestClientV5({
|
||||
key: apiKey,
|
||||
secret: apiSecret,
|
||||
testnet
|
||||
});
|
||||
}
|
||||
|
||||
async createOrder(orderData: OrderParamsV5): Promise<any> {
|
||||
try {
|
||||
const res = await this.client.submitOrder(orderData);
|
||||
return { success: true, data: res };
|
||||
} catch (error: any) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
}
|
||||
|
||||
async listOrders(params: GetAccountOrdersParamsV5): Promise<any[]> {
|
||||
try {
|
||||
const res = await this.client.getActiveOrders(params);
|
||||
return res.result?.list || [];
|
||||
} catch (error: any) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
async cancelOrder(params: CancelOrderParamsV5): Promise<any> {
|
||||
try {
|
||||
const res = await this.client.cancelOrder(params);
|
||||
return { success: true, data: res };
|
||||
} catch (error: any) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
}
|
||||
|
||||
async listPositions(params: any): Promise<any[]> {
|
||||
try {
|
||||
const res = await this.client.getPositionInfo(params);
|
||||
return res.result?.list || [];
|
||||
} catch (error: any) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
async getCandles(params: GetKlineParamsV5): Promise<Candle[]> {
|
||||
try {
|
||||
const res = await this.client.getKline(params);
|
||||
const list = res.result?.list || [];
|
||||
// Bybit trả về: [timestamp, open, high, low, close, volume, turnover]
|
||||
return list.map((item: any[]) => ({
|
||||
time: new Date(Number(item[0])).toISOString(),
|
||||
timestamp: Number(item[0]),
|
||||
open: Number(item[1]),
|
||||
high: Number(item[2]),
|
||||
low: Number(item[3]),
|
||||
close: Number(item[4]),
|
||||
volume: Number(item[5]),
|
||||
turnover: Number(item[6])
|
||||
}));
|
||||
} catch (error: any) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue