Skip to content

Commit 7b4e3e1

Browse files
committed
Add volume support
1 parent 755b1dd commit 7b4e3e1

File tree

12 files changed

+1315
-1164
lines changed

12 files changed

+1315
-1164
lines changed

.env.example

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
# Log level - enable debug logging
2-
# LOG_LEVEL=debug
2+
# LOG_LEVEL=debug
33

44
# Optional
5-
VALUE_PROVIDER_CLIENT_PORT=3101
5+
# VALUE_PROVIDER_CLIENT_PORT=3101
66
# Set to "fixed" to use a fixed provider, leave empty for ccxt provider
77
# VALUE_PROVIDER_IMPL="fixed"
8+
# Weighted median decay factor
9+
# MEDIAN_DECAY=0.00005
10+
# Number of trades to fetch per batch
11+
# TRADES_HISTORY_SIZE=1000

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"@nestjs/core": "^10.0.0",
2929
"@nestjs/platform-express": "^10.0.0",
3030
"@nestjs/swagger": "^7.3.1",
31-
"ccxt": "^4.0.64",
31+
"ccxt": "^4",
3232
"class-transformer": "^0.5.1",
3333
"dotenv": "^16.4.5",
3434
"helmet": "^7.1.0",

src/app.controller.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1-
import { Body, Controller, Param, ParseIntPipe, Post, Inject, Logger } from "@nestjs/common";
1+
import { Body, Controller, Param, ParseIntPipe, Post, Inject, Logger, Query } from "@nestjs/common";
22
import { ApiTags } from "@nestjs/swagger";
33
import { ExampleProviderService } from "./app.service";
4-
import { FeedValuesRequest, FeedValuesResponse, RoundFeedValuesResponse } from "./dto/provider-requests.dto";
4+
import {
5+
FeedValuesRequest,
6+
FeedValuesResponse,
7+
FeedVolumesResponse,
8+
RoundFeedValuesResponse,
9+
} from "./dto/provider-requests.dto";
510

611
@ApiTags("Feed Value Provider API")
712
@Controller()
813
export class ExampleProviderController {
914
private logger = new Logger(ExampleProviderController.name);
15+
1016
constructor(@Inject("EXAMPLE_PROVIDER_SERVICE") private readonly providerService: ExampleProviderService) {}
1117

1218
@Post("feed-values/:votingRoundId")
@@ -30,4 +36,16 @@ export class ExampleProviderController {
3036
data: values,
3137
};
3238
}
39+
40+
@Post("volumes/")
41+
async getFeedVolumes(
42+
@Body() body: FeedValuesRequest,
43+
@Query("window") windowSec: number = 60
44+
): Promise<FeedVolumesResponse> {
45+
const values = await this.providerService.getVolumes(body.feeds, windowSec);
46+
this.logger.log(`Feed volumes for last ${windowSec} seconds: ${JSON.stringify(values)}`);
47+
return {
48+
data: values,
49+
};
50+
}
3351
}

src/app.service.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Injectable } from "@nestjs/common";
2-
import { FeedId, FeedValueData } from "./dto/provider-requests.dto";
2+
import { FeedId, FeedValueData, FeedVolumeData } from "./dto/provider-requests.dto";
33
import { BaseDataFeed } from "./data-feeds/base-feed";
44

55
@Injectable()
@@ -13,4 +13,8 @@ export class ExampleProviderService {
1313
async getValues(feeds: FeedId[]): Promise<FeedValueData[]> {
1414
return this.dataFeed.getValues(feeds);
1515
}
16+
17+
async getVolumes(feeds: FeedId[], volumeWindow: number): Promise<FeedVolumeData[]> {
18+
return this.dataFeed.getVolumes(feeds, volumeWindow);
19+
}
1620
}

src/config/feeds.json

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22
{
33
"feed": { "category": 1, "name": "FLR/USD" },
44
"sources": [
5+
{
6+
"exchange": "bybit",
7+
"symbol": "FLR/USDT"
8+
},
9+
{
10+
"exchange": "coinbase",
11+
"symbol": "FLR/USDT"
12+
},
513
{
614
"exchange": "cryptocom",
715
"symbol": "FLR/USD"
@@ -10,6 +18,10 @@
1018
"exchange": "gate",
1119
"symbol": "FLR/USDT"
1220
},
21+
{
22+
"exchange": "htx",
23+
"symbol": "FLR/USDT"
24+
},
1325
{
1426
"exchange": "kucoin",
1527
"symbol": "FLR/USDT"
@@ -932,10 +944,6 @@
932944
"exchange": "binance",
933945
"symbol": "TRX/USDT"
934946
},
935-
{
936-
"exchange": "binance",
937-
"symbol": "TRX/USD:TRX"
938-
},
939947
{
940948
"exchange": "bitget",
941949
"symbol": "TRX/USDT"
@@ -990,10 +998,6 @@
990998
"exchange": "binance",
991999
"symbol": "DAI/USDT"
9921000
},
993-
{
994-
"exchange": "bybit",
995-
"symbol": "DAI/USDT"
996-
},
9971001
{
9981002
"exchange": "bitget",
9991003
"symbol": "DAI/USDT"
@@ -1374,6 +1378,10 @@
13741378
"exchange": "ascendex",
13751379
"symbol": "PEPE/USDT"
13761380
},
1381+
{
1382+
"exchange": "binance",
1383+
"symbol": "PEPE/USDT"
1384+
},
13771385
{
13781386
"exchange": "bingx",
13791387
"symbol": "PEPE/USDT"
@@ -1539,10 +1547,6 @@
15391547
"exchange": "kucoin",
15401548
"symbol": "TAO/USDT"
15411549
},
1542-
{
1543-
"exchange": "lbank",
1544-
"symbol": "TAO/USDT"
1545-
},
15461550
{
15471551
"exchange": "mexc",
15481552
"symbol": "TAO/USDT"
@@ -1688,10 +1692,6 @@
16881692
"exchange": "probit",
16891693
"symbol": "JOULE/USDT"
16901694
},
1691-
{
1692-
"exchange": "bitrue",
1693-
"symbol": "JOULE/USDT"
1694-
},
16951695
{
16961696
"exchange": "mexc",
16971697
"symbol": "JOULE/USDT"

src/data-feeds/base-feed.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
import { FeedId, FeedValueData } from "../dto/provider-requests.dto";
1+
import { FeedId, FeedValueData, FeedVolumeData } from "../dto/provider-requests.dto";
22

33
export abstract class BaseDataFeed {
44
abstract getValue(feed: FeedId): Promise<FeedValueData>;
5+
56
abstract getValues(feeds: FeedId[]): Promise<FeedValueData[]>;
7+
8+
abstract getVolumes(feeds: FeedId[], volumeWindow: number): Promise<FeedVolumeData[]>;
69
}

0 commit comments

Comments
 (0)