Skip to content

Commit 48df0af

Browse files
Sumeet ChouguleSumeet Chougule
Sumeet Chougule
authored and
Sumeet Chougule
committed
feat(hummingbot): add cancelAllOrders method and update types
1 parent 0580797 commit 48df0af

File tree

4 files changed

+72
-27
lines changed

4 files changed

+72
-27
lines changed

packages/core/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"@fal-ai/client": "1.2.0",
6161
"@types/uuid": "10.0.0",
6262
"ai": "3.4.33",
63+
"@tavily/core": "^0.0.2",
6364
"anthropic-vertex-ai": "1.0.2",
6465
"fastembed": "1.14.1",
6566
"fastestsmallesttextencoderdecoder": "1.0.22",

packages/plugin-hummingbot/src/providers/order-provider.ts

+30
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,36 @@ export class OrderService {
130130
});
131131
}
132132

133+
async cancelAllOrders(exchange: string, symbol?: string): Promise<boolean> {
134+
await this.checkRateLimit();
135+
136+
return this.retryOperation(async () => {
137+
try {
138+
const url = symbol ? `${this.baseUrl}/orders/${exchange}/${symbol}` : `${this.baseUrl}/orders/${exchange}`;
139+
await axios.delete(url, {
140+
headers: this.getHeaders()
141+
});
142+
return true;
143+
} catch (error) {
144+
if (error instanceof AxiosError) {
145+
switch (error.response?.status) {
146+
case 401:
147+
throw new Error('Unauthorized: Invalid API key');
148+
case 403:
149+
throw new Error('Forbidden: Insufficient permissions');
150+
case 429:
151+
throw new Error('Rate limit exceeded. Please try again later.');
152+
case 500:
153+
throw new Error('Internal server error. Please try again later.');
154+
default:
155+
throw new Error(`Failed to cancel all orders: ${error.message}`);
156+
}
157+
}
158+
throw error;
159+
}
160+
});
161+
}
162+
133163
async getOrder(orderId: string): Promise<OrderParams> {
134164
return this.retryOperation(async () => {
135165
try {
+38-24
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,60 @@
11
export interface HummingbotConfig {
2-
instance: {
3-
url: string;
4-
wsUrl: string;
5-
apiKey: string;
6-
instanceId: string;
7-
};
2+
apiUrl: string;
3+
wsUrl: string;
4+
apiKey: string;
5+
strategy: StrategyConfig;
86
}
97

108
export interface MarketData {
11-
exchange: string;
129
symbol: string;
13-
timestamp: number;
14-
bid: number;
15-
ask: number;
1610
lastPrice: number;
1711
volume24h: number;
12+
price: number;
13+
timestamp: number;
1814
}
1915

2016
export interface OrderParams {
21-
exchange: string;
2217
symbol: string;
2318
side: 'buy' | 'sell';
24-
type: 'limit' | 'market';
2519
amount: number;
26-
price?: number;
20+
price: number;
21+
}
22+
23+
export interface StrategyConfig {
24+
symbol: string;
25+
spread: number;
26+
orderSize: number;
27+
minProfitMargin: number;
28+
}
29+
30+
export interface PortfolioBalance {
31+
asset: string;
32+
free: number;
33+
total: number;
34+
}
35+
36+
export interface HummingbotInstance {
37+
id: string;
38+
status: 'running' | 'stopped';
39+
strategy: string;
40+
config: HummingbotConfig;
2741
}
2842

2943
export interface MarketMakingConfig {
3044
exchange: string;
3145
tradingPair: string;
3246
orderAmount: number;
33-
orderLevels?: number;
34-
maxOrderAge?: number;
35-
inventorySkewEnabled?: boolean;
36-
inventoryTargetBase?: number;
37-
inventoryRangeMultiplier?: number;
47+
orderLevels: number;
48+
maxOrderAge: number;
49+
inventorySkewEnabled: boolean;
50+
inventoryTargetBase: number;
51+
inventoryRangeMultiplier: number;
3852
bidSpread: number;
3953
askSpread: number;
40-
minSpread?: number;
41-
maxSpread?: number;
42-
priceSource?: string;
43-
minimumSpreadEnabled?: boolean;
44-
pingPongEnabled?: boolean;
45-
orderRefreshTime?: number;
54+
minSpread: number;
55+
maxSpread: number;
56+
priceSource: string;
57+
minimumSpreadEnabled: boolean;
58+
pingPongEnabled: boolean;
59+
orderRefreshTime: number;
4660
}

pnpm-lock.yaml

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)