@backtest-kit/cli 6.16.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
|
|
13
13
|
Point the CLI at your strategy file, choose a mode, and it handles exchange connectivity, candle caching, UI dashboard, and Telegram notifications for you.
|
|
14
14
|
|
|
15
|
-
📚 **[Backtest Kit Docs](https://backtest-kit.github.io/documents/
|
|
15
|
+
📚 **[Backtest Kit Docs](https://backtest-kit.github.io/documents/article_07_ai_news_trading_signals.html)** | 🌟 **[GitHub](https://github.com/tripolskypetr/backtest-kit)**
|
|
16
|
+
|
|
17
|
+
> **New to backtest-kit?** The fastest way to get a real, production-ready setup is to clone the [reference implementation](https://github.com/tripolskypetr/backtest-kit/tree/master/example) — a fully working news-sentiment AI trading system with LLM forecasting, multi-timeframe data, and a documented February 2026 backtest. Start there instead of from scratch.
|
|
16
18
|
|
|
17
19
|
## ✨ Features
|
|
18
20
|
|
|
@@ -742,7 +744,9 @@ npx @backtest-kit/cli --pine ./math/impulse_trend_15m.pine
|
|
|
742
744
|
|
|
743
745
|
## 🎨 Visual Pine Script Editor
|
|
744
746
|
|
|
745
|
-
|
|
747
|
+

|
|
748
|
+
|
|
749
|
+
`@backtest-kit/cli` ships a browser-based Pine Script editor powered by `@backtest-kit/ui`. It lets you write, run, and iterate on indicators interactively — with a live chart that updates as you hit **▶ Run**
|
|
746
750
|
|
|
747
751
|
### Usage
|
|
748
752
|
|
package/build/index.cjs
CHANGED
|
@@ -2631,7 +2631,7 @@ const main$d = async () => {
|
|
|
2631
2631
|
if (MODES.some((mode) => values[mode])) {
|
|
2632
2632
|
return;
|
|
2633
2633
|
}
|
|
2634
|
-
process.stdout.write(`@backtest-kit/cli ${"
|
|
2634
|
+
process.stdout.write(`@backtest-kit/cli ${"7.1.0"}\n`);
|
|
2635
2635
|
process.stdout.write("\n");
|
|
2636
2636
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
2637
2637
|
process.stdout.write("\n");
|
|
@@ -2963,12 +2963,15 @@ const main$4 = async () => {
|
|
|
2963
2963
|
process.exit(1);
|
|
2964
2964
|
}
|
|
2965
2965
|
await cli.moduleConnectionService.loadModule("./editor.module");
|
|
2966
|
+
{
|
|
2967
|
+
await cli.exchangeSchemaService.addSchema();
|
|
2968
|
+
}
|
|
2966
2969
|
const { CC_WWWROOT_HOST, CC_WWWROOT_PORT } = getEnv();
|
|
2967
2970
|
const unServer = BacktestKitUi.serve(CC_WWWROOT_HOST, CC_WWWROOT_PORT, cli.resolveService.PROJECT_ROOT_DIR);
|
|
2968
2971
|
try {
|
|
2969
2972
|
await open(`http://localhost:${CC_WWWROOT_PORT}?pine=1`);
|
|
2970
2973
|
}
|
|
2971
|
-
|
|
2974
|
+
finally {
|
|
2972
2975
|
console.log(`Editor launched: http://localhost:${CC_WWWROOT_PORT}?pine=1`);
|
|
2973
2976
|
}
|
|
2974
2977
|
const beforeExit = () => {
|
|
@@ -3288,7 +3291,7 @@ const main$1 = async () => {
|
|
|
3288
3291
|
if (!values.help) {
|
|
3289
3292
|
return;
|
|
3290
3293
|
}
|
|
3291
|
-
process.stdout.write(`@backtest-kit/cli ${"
|
|
3294
|
+
process.stdout.write(`@backtest-kit/cli ${"7.1.0"}\n\n`);
|
|
3292
3295
|
process.stdout.write(HELP_TEXT);
|
|
3293
3296
|
process.exit(0);
|
|
3294
3297
|
};
|
|
@@ -3302,7 +3305,7 @@ const main = async () => {
|
|
|
3302
3305
|
if (!values.version) {
|
|
3303
3306
|
return;
|
|
3304
3307
|
}
|
|
3305
|
-
process.stdout.write(`@backtest-kit/cli ${"
|
|
3308
|
+
process.stdout.write(`@backtest-kit/cli ${"7.1.0"}\n`);
|
|
3306
3309
|
process.exit(0);
|
|
3307
3310
|
};
|
|
3308
3311
|
main();
|
package/build/index.mjs
CHANGED
|
@@ -2602,7 +2602,7 @@ const main$d = async () => {
|
|
|
2602
2602
|
if (MODES.some((mode) => values[mode])) {
|
|
2603
2603
|
return;
|
|
2604
2604
|
}
|
|
2605
|
-
process.stdout.write(`@backtest-kit/cli ${"
|
|
2605
|
+
process.stdout.write(`@backtest-kit/cli ${"7.1.0"}\n`);
|
|
2606
2606
|
process.stdout.write("\n");
|
|
2607
2607
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
2608
2608
|
process.stdout.write("\n");
|
|
@@ -2934,12 +2934,15 @@ const main$4 = async () => {
|
|
|
2934
2934
|
process.exit(1);
|
|
2935
2935
|
}
|
|
2936
2936
|
await cli.moduleConnectionService.loadModule("./editor.module");
|
|
2937
|
+
{
|
|
2938
|
+
await cli.exchangeSchemaService.addSchema();
|
|
2939
|
+
}
|
|
2937
2940
|
const { CC_WWWROOT_HOST, CC_WWWROOT_PORT } = getEnv();
|
|
2938
2941
|
const unServer = serve(CC_WWWROOT_HOST, CC_WWWROOT_PORT, cli.resolveService.PROJECT_ROOT_DIR);
|
|
2939
2942
|
try {
|
|
2940
2943
|
await open(`http://localhost:${CC_WWWROOT_PORT}?pine=1`);
|
|
2941
2944
|
}
|
|
2942
|
-
|
|
2945
|
+
finally {
|
|
2943
2946
|
console.log(`Editor launched: http://localhost:${CC_WWWROOT_PORT}?pine=1`);
|
|
2944
2947
|
}
|
|
2945
2948
|
const beforeExit = () => {
|
|
@@ -3259,7 +3262,7 @@ const main$1 = async () => {
|
|
|
3259
3262
|
if (!values.help) {
|
|
3260
3263
|
return;
|
|
3261
3264
|
}
|
|
3262
|
-
process.stdout.write(`@backtest-kit/cli ${"
|
|
3265
|
+
process.stdout.write(`@backtest-kit/cli ${"7.1.0"}\n\n`);
|
|
3263
3266
|
process.stdout.write(HELP_TEXT);
|
|
3264
3267
|
process.exit(0);
|
|
3265
3268
|
};
|
|
@@ -3273,7 +3276,7 @@ const main = async () => {
|
|
|
3273
3276
|
if (!values.version) {
|
|
3274
3277
|
return;
|
|
3275
3278
|
}
|
|
3276
|
-
process.stdout.write(`@backtest-kit/cli ${"
|
|
3279
|
+
process.stdout.write(`@backtest-kit/cli ${"7.1.0"}\n`);
|
|
3277
3280
|
process.exit(0);
|
|
3278
3281
|
};
|
|
3279
3282
|
main();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backtest-kit/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.1.0",
|
|
4
4
|
"description": "Zero-boilerplate CLI runner for backtest-kit strategies. Run backtests, paper trading, and live bots with candle cache warming, web dashboard, and Telegram notifications — no setup code required.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Petr Tripolsky",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"url": "http://paypal.me/tripolskypetr"
|
|
13
13
|
},
|
|
14
14
|
"license": "MIT",
|
|
15
|
-
"homepage": "https://backtest-kit.github.io/documents/
|
|
15
|
+
"homepage": "https://backtest-kit.github.io/documents/article_07_ai_news_trading_signals.html",
|
|
16
16
|
"keywords": [
|
|
17
17
|
"backtest",
|
|
18
18
|
"backtesting",
|
|
@@ -61,11 +61,11 @@
|
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@babel/plugin-transform-modules-umd": "7.27.1",
|
|
63
63
|
"@babel/standalone": "7.29.1",
|
|
64
|
-
"@backtest-kit/graph": "
|
|
65
|
-
"@backtest-kit/ollama": "
|
|
66
|
-
"@backtest-kit/pinets": "
|
|
67
|
-
"@backtest-kit/signals": "
|
|
68
|
-
"@backtest-kit/ui": "
|
|
64
|
+
"@backtest-kit/graph": "7.1.0",
|
|
65
|
+
"@backtest-kit/ollama": "7.1.0",
|
|
66
|
+
"@backtest-kit/pinets": "7.1.0",
|
|
67
|
+
"@backtest-kit/signals": "7.1.0",
|
|
68
|
+
"@backtest-kit/ui": "7.1.0",
|
|
69
69
|
"@rollup/plugin-replace": "6.0.3",
|
|
70
70
|
"@rollup/plugin-typescript": "11.1.6",
|
|
71
71
|
"@types/image-size": "0.7.0",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@types/mustache": "4.2.6",
|
|
74
74
|
"@types/node": "22.9.0",
|
|
75
75
|
"@types/stack-trace": "0.0.33",
|
|
76
|
-
"backtest-kit": "
|
|
76
|
+
"backtest-kit": "7.1.0",
|
|
77
77
|
"glob": "11.0.1",
|
|
78
78
|
"markdown-it": "14.1.1",
|
|
79
79
|
"rimraf": "6.0.1",
|
|
@@ -88,12 +88,12 @@
|
|
|
88
88
|
"peerDependencies": {
|
|
89
89
|
"@babel/plugin-transform-modules-umd": "^7.27.1",
|
|
90
90
|
"@babel/standalone": "^7.29.1",
|
|
91
|
-
"@backtest-kit/graph": "^
|
|
92
|
-
"@backtest-kit/ollama": "^
|
|
93
|
-
"@backtest-kit/pinets": "^
|
|
94
|
-
"@backtest-kit/signals": "^
|
|
95
|
-
"@backtest-kit/ui": "^
|
|
96
|
-
"backtest-kit": "^
|
|
91
|
+
"@backtest-kit/graph": "^7.1.0",
|
|
92
|
+
"@backtest-kit/ollama": "^7.1.0",
|
|
93
|
+
"@backtest-kit/pinets": "^7.1.0",
|
|
94
|
+
"@backtest-kit/signals": "^7.1.0",
|
|
95
|
+
"@backtest-kit/ui": "^7.1.0",
|
|
96
|
+
"backtest-kit": "^7.1.0",
|
|
97
97
|
"markdown-it": "^14.1.1",
|
|
98
98
|
"typescript": "^5.0.0"
|
|
99
99
|
},
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
const { str } = require("functools-kit");
|
|
2
|
+
|
|
3
|
+
const symbol_list = [
|
|
4
|
+
// Priority 50: Premium
|
|
5
|
+
{
|
|
6
|
+
icon: "/icon/btc.png",
|
|
7
|
+
logo: "/icon/128/btc.png",
|
|
8
|
+
symbol: "BTCUSDT",
|
|
9
|
+
displayName: "Bitcoin",
|
|
10
|
+
color: "#F7931A",
|
|
11
|
+
priority: 50,
|
|
12
|
+
description: str.newline(
|
|
13
|
+
"Bitcoin - the first and most popular cryptocurrency",
|
|
14
|
+
"Digital gold with a limited supply of 21 million coins",
|
|
15
|
+
"Used as a reserve asset and a means of saving",
|
|
16
|
+
"Highly liquid market with large trading volumes"
|
|
17
|
+
),
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
icon: "/icon/eth.png",
|
|
21
|
+
logo: "/icon/128/eth.png",
|
|
22
|
+
symbol: "ETHUSDT",
|
|
23
|
+
color: "#6F42C1",
|
|
24
|
+
displayName: "Ethereum",
|
|
25
|
+
priority: 50,
|
|
26
|
+
description: str.newline(
|
|
27
|
+
"Ethereum - a blockchain platform for smart contracts",
|
|
28
|
+
"The foundation of the DeFi and NFT ecosystem",
|
|
29
|
+
"Transition to Proof-of-Stake (Ethereum 2.0)",
|
|
30
|
+
"The second-largest cryptocurrency by market capitalization"
|
|
31
|
+
),
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
icon: "/icon/uni.png",
|
|
35
|
+
logo: "/icon/128/uni.png",
|
|
36
|
+
symbol: "UNIUSDT",
|
|
37
|
+
displayName: "Uniswap",
|
|
38
|
+
color: "#FF007A",
|
|
39
|
+
priority: 50,
|
|
40
|
+
description: str.newline(
|
|
41
|
+
"Uniswap (UNI) - the largest decentralized exchange (DEX)",
|
|
42
|
+
"Automated market maker (AMM) on Ethereum",
|
|
43
|
+
"High liquidity and trading volumes",
|
|
44
|
+
"Governance token for the Uniswap protocol"
|
|
45
|
+
),
|
|
46
|
+
},
|
|
47
|
+
// Priority 100: High
|
|
48
|
+
{
|
|
49
|
+
icon: "/icon/bnb.png",
|
|
50
|
+
logo: "/icon/128/bnb.png",
|
|
51
|
+
symbol: "BNBUSDT",
|
|
52
|
+
color: "#F3BA2F",
|
|
53
|
+
displayName: "BNB",
|
|
54
|
+
priority: 100,
|
|
55
|
+
description: str.newline(
|
|
56
|
+
"Binance Coin - the native token of the largest exchange",
|
|
57
|
+
"Used for discounts on fees",
|
|
58
|
+
"Foundation of BNB Smart Chain for DApps",
|
|
59
|
+
"Regular token burns reduce supply"
|
|
60
|
+
),
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
icon: "/icon/sol.png",
|
|
64
|
+
logo: "/icon/128/sol.png",
|
|
65
|
+
symbol: "SOLUSDT",
|
|
66
|
+
color: "#00e676",
|
|
67
|
+
displayName: "Solana",
|
|
68
|
+
priority: 100,
|
|
69
|
+
description: str.newline(
|
|
70
|
+
"Solana - a high-performance blockchain",
|
|
71
|
+
"Up to 65,000 transactions per second",
|
|
72
|
+
"Popular platform for NFT and DeFi projects",
|
|
73
|
+
"Low fees and fast transactions"
|
|
74
|
+
),
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
icon: "/icon/ltc.png",
|
|
78
|
+
logo: "/icon/128/ltc.png",
|
|
79
|
+
symbol: "LTCUSDT",
|
|
80
|
+
color: "#B8B8B8",
|
|
81
|
+
displayName: "Litecoin",
|
|
82
|
+
priority: 100,
|
|
83
|
+
description: str.newline(
|
|
84
|
+
"Litecoin (LTC) - one of the first alternative cryptocurrencies",
|
|
85
|
+
"Based on Bitcoin's code but with faster block time (2.5 minutes)",
|
|
86
|
+
"Low fees and high transaction speed",
|
|
87
|
+
"Popular cryptocurrency for transfers and payments"
|
|
88
|
+
),
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
icon: "/icon/bch.png",
|
|
92
|
+
logo: "/icon/128/bch.png",
|
|
93
|
+
symbol: "BCHUSDT",
|
|
94
|
+
color: "#8DC351",
|
|
95
|
+
displayName: "Bitcoin Cash",
|
|
96
|
+
priority: 100,
|
|
97
|
+
description: str.newline(
|
|
98
|
+
"Bitcoin Cash (BCH) - a fork of Bitcoin created to increase network capacity",
|
|
99
|
+
"Larger block size allows for more transactions",
|
|
100
|
+
"Low fees and fast payment confirmations",
|
|
101
|
+
"Popular among users for everyday payments"
|
|
102
|
+
),
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
icon: "/icon/neo.png",
|
|
106
|
+
logo: "/icon/128/neo.png",
|
|
107
|
+
symbol: "NEOUSDT",
|
|
108
|
+
color: "#58BF00",
|
|
109
|
+
displayName: "NEO",
|
|
110
|
+
priority: 100,
|
|
111
|
+
description: str.newline(
|
|
112
|
+
"NEO - a blockchain platform for creating digital assets and smart contracts",
|
|
113
|
+
"Often referred to as 'Chinese Ethereum'",
|
|
114
|
+
"Supports multiple programming languages for DApp development",
|
|
115
|
+
"Uses a unique consensus mechanism called Delegated Byzantine Fault Tolerance (dBFT)"
|
|
116
|
+
),
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
icon: "/icon/fil.png",
|
|
120
|
+
logo: "/icon/128/fil.png",
|
|
121
|
+
symbol: "FILUSDT",
|
|
122
|
+
displayName: "Filecoin",
|
|
123
|
+
color: "#0090FF",
|
|
124
|
+
priority: 100,
|
|
125
|
+
description: str.newline(
|
|
126
|
+
"Filecoin (FIL) - a decentralized data storage network",
|
|
127
|
+
"Utilizes free space on users' hard drives",
|
|
128
|
+
"An alternative to centralized cloud storage",
|
|
129
|
+
"Economically efficient and secure file storage"
|
|
130
|
+
),
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
icon: "/icon/xmr.png",
|
|
134
|
+
logo: "/icon/128/xmr.png",
|
|
135
|
+
symbol: "XMRUSDT",
|
|
136
|
+
displayName: "Monero",
|
|
137
|
+
color: "#FF6600",
|
|
138
|
+
priority: 100,
|
|
139
|
+
description: str.newline(
|
|
140
|
+
"Monero (XMR) - a cryptocurrency focused on privacy",
|
|
141
|
+
"Complete anonymity of transactions and addresses",
|
|
142
|
+
"Protection against tracking and blockchain analysis",
|
|
143
|
+
"Popular among users who value confidentiality"
|
|
144
|
+
),
|
|
145
|
+
},
|
|
146
|
+
// Priority 150: Medium
|
|
147
|
+
{
|
|
148
|
+
icon: "/icon/xrp.png",
|
|
149
|
+
logo: "/icon/128/xrp.png",
|
|
150
|
+
symbol: "XRPUSDT",
|
|
151
|
+
color: "#23292F",
|
|
152
|
+
displayName: "Ripple",
|
|
153
|
+
priority: 150,
|
|
154
|
+
description: str.newline(
|
|
155
|
+
"XRP - a digital asset for international payments",
|
|
156
|
+
"Fast and cheap cross-border transfers",
|
|
157
|
+
"Used by banks and financial institutions",
|
|
158
|
+
"Low fees and transaction time of 3-5 seconds"
|
|
159
|
+
),
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
icon: "/icon/avax.png",
|
|
163
|
+
logo: "/icon/128/avax.png",
|
|
164
|
+
symbol: "AVAXUSDT",
|
|
165
|
+
color: "#E84142",
|
|
166
|
+
displayName: "Avalanche",
|
|
167
|
+
priority: 150,
|
|
168
|
+
description: str.newline(
|
|
169
|
+
"Avalanche (AVAX) - a high-performance blockchain for smart contracts",
|
|
170
|
+
"Supports the creation of custom blockchains (Subnet)",
|
|
171
|
+
"Fast and cheap transactions, high scalability",
|
|
172
|
+
"Popular platform for DeFi and NFT projects"
|
|
173
|
+
),
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
icon: "/icon/link.png",
|
|
177
|
+
logo: "/icon/128/link.png",
|
|
178
|
+
symbol: "LINKUSDT",
|
|
179
|
+
color: "#375BD2",
|
|
180
|
+
displayName: "Chainlink",
|
|
181
|
+
priority: 150,
|
|
182
|
+
description: str.newline(
|
|
183
|
+
"Chainlink (LINK) - a decentralized oracle network",
|
|
184
|
+
"Provides data transmission from the external world to smart contracts",
|
|
185
|
+
"A key component of the DeFi ecosystem",
|
|
186
|
+
"High security and reliability of data"
|
|
187
|
+
),
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
icon: "/icon/dot.png",
|
|
191
|
+
logo: "/icon/128/dot.png",
|
|
192
|
+
symbol: "DOTUSDT",
|
|
193
|
+
color: "#E6007A",
|
|
194
|
+
displayName: "Polkadot",
|
|
195
|
+
priority: 150,
|
|
196
|
+
description: str.newline(
|
|
197
|
+
"Polkadot (DOT) - a multi-chain blockchain platform",
|
|
198
|
+
"Allows different blockchains to interact through parachains",
|
|
199
|
+
"High scalability and security",
|
|
200
|
+
"Actively used for creating decentralized applications and services"
|
|
201
|
+
),
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
icon: "/icon/matic.png",
|
|
205
|
+
logo: "/icon/128/matic.png",
|
|
206
|
+
symbol: "MATICUSDT",
|
|
207
|
+
displayName: "Polygon",
|
|
208
|
+
color: "#8247E5",
|
|
209
|
+
priority: 150,
|
|
210
|
+
description: str.newline(
|
|
211
|
+
"Polygon (MATIC) - a scaling solution for Ethereum",
|
|
212
|
+
"Layer 2 with low fees and high speed",
|
|
213
|
+
"Compatible with Ethereum and the DeFi ecosystem",
|
|
214
|
+
"Used by many large projects and applications"
|
|
215
|
+
),
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
icon: "/icon/aave.png",
|
|
219
|
+
logo: "/icon/128/aave.png",
|
|
220
|
+
symbol: "AAVEUSDT",
|
|
221
|
+
displayName: "Aave",
|
|
222
|
+
color: "#B6509E",
|
|
223
|
+
priority: 150,
|
|
224
|
+
description: str.newline(
|
|
225
|
+
"Aave - a leading decentralized lending protocol",
|
|
226
|
+
"Allows deposits and loans of cryptocurrencies",
|
|
227
|
+
"Unique features: flash loans and credit delegation",
|
|
228
|
+
"One of the largest DeFi projects by total value locked"
|
|
229
|
+
),
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
icon: "/icon/ftc.png",
|
|
233
|
+
logo: "/icon/128/ftc.png",
|
|
234
|
+
symbol: "SUSDT",
|
|
235
|
+
displayName: "Sonic",
|
|
236
|
+
color: "#1969FF",
|
|
237
|
+
priority: 150,
|
|
238
|
+
description: str.newline(
|
|
239
|
+
"Sonic (aka Fantom) - a high-speed platform for DeFi",
|
|
240
|
+
"Directed acyclic graph (DAG) technology",
|
|
241
|
+
"Transaction finality in less than 1 second",
|
|
242
|
+
"Low fees and a growing ecosystem of applications"
|
|
243
|
+
),
|
|
244
|
+
},
|
|
245
|
+
|
|
246
|
+
// Priority 200: Low
|
|
247
|
+
{
|
|
248
|
+
icon: "/icon/doge.png",
|
|
249
|
+
logo: "/icon/128/doge.png",
|
|
250
|
+
symbol: "DOGEUSDT",
|
|
251
|
+
color: "#C2A633",
|
|
252
|
+
displayName: "Dogecoin",
|
|
253
|
+
priority: 200,
|
|
254
|
+
description: str.newline(
|
|
255
|
+
"Dogecoin (DOGE) - a cryptocurrency created as a joke based on the popular meme with the Shiba Inu dog",
|
|
256
|
+
"Fast and cheap transactions",
|
|
257
|
+
"Actively supported by the community and celebrities",
|
|
258
|
+
"Used for tips and micropayments"
|
|
259
|
+
),
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
icon: "/icon/trx.png",
|
|
263
|
+
logo: "/icon/128/trx.png",
|
|
264
|
+
symbol: "TRXUSDT",
|
|
265
|
+
color: "#EC0928",
|
|
266
|
+
displayName: "TRON",
|
|
267
|
+
priority: 200,
|
|
268
|
+
description: str.newline(
|
|
269
|
+
"TRON (TRX) - a blockchain platform for decentralized applications and smart contracts",
|
|
270
|
+
"High throughput and low fees",
|
|
271
|
+
"Popular for creating tokens and conducting fast transactions",
|
|
272
|
+
"Actively developed and supported by a large community"
|
|
273
|
+
),
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
icon: "/icon/ada.png",
|
|
277
|
+
logo: "/icon/128/ada.png",
|
|
278
|
+
symbol: "ADAUSDT",
|
|
279
|
+
color: "#0033AD",
|
|
280
|
+
displayName: "Cardano",
|
|
281
|
+
priority: 200,
|
|
282
|
+
description: str.newline(
|
|
283
|
+
"Cardano (ADA) - a blockchain platform with a scientific approach to development",
|
|
284
|
+
"Uses the Ouroboros consensus algorithm (Proof-of-Stake)",
|
|
285
|
+
"Supports smart contracts and decentralized applications",
|
|
286
|
+
"Focus on scalability, security, and sustainability"
|
|
287
|
+
),
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
icon: "/icon/eos.png",
|
|
291
|
+
logo: "/icon/128/eos.png",
|
|
292
|
+
symbol: "EOSUSDT",
|
|
293
|
+
color: "#19191A",
|
|
294
|
+
displayName: "EOS",
|
|
295
|
+
priority: 200,
|
|
296
|
+
description: str.newline(
|
|
297
|
+
"EOS - a high-performance blockchain platform for decentralized applications (DApps)",
|
|
298
|
+
"Fast and free transactions thanks to delegated Proof-of-Stake (DPoS)",
|
|
299
|
+
"Focused on scalability and developer convenience",
|
|
300
|
+
"Popular among projects requiring high throughput"
|
|
301
|
+
),
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
icon: "/icon/xlm.png",
|
|
305
|
+
logo: "/icon/128/xlm.png",
|
|
306
|
+
symbol: "XLMUSDT",
|
|
307
|
+
color: "#19191A",
|
|
308
|
+
displayName: "XLM",
|
|
309
|
+
priority: 200,
|
|
310
|
+
description: str.newline(
|
|
311
|
+
"Stellar (XLM) - a platform for fast and cheap international transfers",
|
|
312
|
+
"Focused on integration with financial institutions and banks",
|
|
313
|
+
"Uses a unique consensus protocol called Stellar Consensus Protocol (SCP)",
|
|
314
|
+
"Supports token creation and decentralized exchange"
|
|
315
|
+
),
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
icon: "/icon/ksm.png",
|
|
319
|
+
logo: "/icon/128/ksm.png",
|
|
320
|
+
symbol: "KSMUSDT",
|
|
321
|
+
displayName: "Kusama",
|
|
322
|
+
color: "#000000",
|
|
323
|
+
priority: 200,
|
|
324
|
+
description: str.newline(
|
|
325
|
+
"Kusama (KSM) - an experimental network of Polkadot",
|
|
326
|
+
"A testing ground for new features before implementation in Polkadot",
|
|
327
|
+
"Own ecosystem of parachains and projects",
|
|
328
|
+
"Fast deployment and testing of innovations"
|
|
329
|
+
),
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
icon: "/icon/comp.png",
|
|
333
|
+
logo: "/icon/128/comp.png",
|
|
334
|
+
symbol: "COMPUSDT",
|
|
335
|
+
displayName: "Compound",
|
|
336
|
+
color: "#00D395",
|
|
337
|
+
priority: 200,
|
|
338
|
+
description: str.newline(
|
|
339
|
+
"Compound (COMP) - an automated lending protocol",
|
|
340
|
+
"Algorithmic interest rates based on supply and demand",
|
|
341
|
+
"Governance token for the Compound protocol",
|
|
342
|
+
"One of the pioneers of the DeFi movement"
|
|
343
|
+
),
|
|
344
|
+
},
|
|
345
|
+
|
|
346
|
+
{
|
|
347
|
+
icon: "/icon/atom.png",
|
|
348
|
+
logo: "/icon/128/atom.png",
|
|
349
|
+
symbol: "ATOMUSDT",
|
|
350
|
+
displayName: "Cosmos",
|
|
351
|
+
color: "#2E3148",
|
|
352
|
+
priority: 250,
|
|
353
|
+
description: str.newline(
|
|
354
|
+
"Cosmos (ATOM) - a blockchain for inter-network communication",
|
|
355
|
+
"Inter-Blockchain Communication (IBC) technology",
|
|
356
|
+
"Allows independent blockchains to exchange data",
|
|
357
|
+
"Foundation for an ecosystem of interconnected applications"
|
|
358
|
+
),
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
icon: "/icon/algo.png",
|
|
362
|
+
logo: "/icon/128/algo.png",
|
|
363
|
+
symbol: "ALGOUSDT",
|
|
364
|
+
displayName: "Algorand",
|
|
365
|
+
color: "#000000",
|
|
366
|
+
priority: 250,
|
|
367
|
+
description: str.newline(
|
|
368
|
+
"Algorand (ALGO) - a high-performance blockchain",
|
|
369
|
+
"Pure Proof-of-Stake consensus",
|
|
370
|
+
"Fast transactions with finality in less than 5 seconds",
|
|
371
|
+
"Used for DeFi, NFTs, and government projects"
|
|
372
|
+
),
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
icon: "/icon/miota.png",
|
|
376
|
+
logo: "/icon/128/miota.png",
|
|
377
|
+
symbol: "IOTAUSDT",
|
|
378
|
+
displayName: "IOTA",
|
|
379
|
+
color: "#282C37",
|
|
380
|
+
priority: 250,
|
|
381
|
+
description: str.newline(
|
|
382
|
+
"IOTA - a distributed network for the Internet of Things (IoT)",
|
|
383
|
+
"Tangle technology instead of blockchain for scalability",
|
|
384
|
+
"Free microtransactions with no fees",
|
|
385
|
+
"Focus on data, identity, and machine economy"
|
|
386
|
+
),
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
icon: "/icon/vet.png",
|
|
390
|
+
logo: "/icon/128/vet.png",
|
|
391
|
+
symbol: "VETUSDT",
|
|
392
|
+
displayName: "VeChain",
|
|
393
|
+
color: "#00C1DE",
|
|
394
|
+
priority: 250,
|
|
395
|
+
description: str.newline(
|
|
396
|
+
"VeChain (VET) - a blockchain for supply chains and logistics",
|
|
397
|
+
"Used for tracking goods and verifying data",
|
|
398
|
+
"Dual tokenomics: VET for speed, VTHO for gas",
|
|
399
|
+
"Partnerships with major companies in the real sector"
|
|
400
|
+
),
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
icon: "/icon/bat.png",
|
|
404
|
+
logo: "/icon/128/bat.png",
|
|
405
|
+
symbol: "BATUSDT",
|
|
406
|
+
displayName: "Brave Reward",
|
|
407
|
+
color: "#FF5000",
|
|
408
|
+
priority: 250,
|
|
409
|
+
description: str.newline(
|
|
410
|
+
"Basic Attention Token (BAT) - a token for digital advertising in the Brave browser",
|
|
411
|
+
"Rewards users for viewing ads",
|
|
412
|
+
"Transparent and private advertising ecosystem",
|
|
413
|
+
"Growing community of Brave Browser users"
|
|
414
|
+
),
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
icon: "/icon/etc.png",
|
|
418
|
+
logo: "/icon/128/etc.png",
|
|
419
|
+
symbol: "ETCUSDT",
|
|
420
|
+
displayName: "Ethereum Classic",
|
|
421
|
+
color: "#328332",
|
|
422
|
+
priority: 300,
|
|
423
|
+
description: str.newline(
|
|
424
|
+
"Ethereum Classic (ETC) - the original Ethereum chain",
|
|
425
|
+
"Commitment to the principle 'code is law'",
|
|
426
|
+
"Proof-of-Work consensus for maximum security",
|
|
427
|
+
"One of the oldest smart contract platforms"
|
|
428
|
+
),
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
icon: "/icon/dash.png",
|
|
432
|
+
logo: "/icon/128/dash.png",
|
|
433
|
+
symbol: "DASHUSDT",
|
|
434
|
+
displayName: "Dash",
|
|
435
|
+
color: "#008CE7",
|
|
436
|
+
priority: 300,
|
|
437
|
+
description: str.newline(
|
|
438
|
+
"Dash - a cryptocurrency for fast and private payments",
|
|
439
|
+
"InstantSend technology for instant transactions",
|
|
440
|
+
"Two-tier network: miners and masternodes",
|
|
441
|
+
"Popular in countries with unstable economies"
|
|
442
|
+
),
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
icon: "/icon/zec.png",
|
|
446
|
+
logo: "/icon/128/zec.png",
|
|
447
|
+
symbol: "ZECUSDT",
|
|
448
|
+
displayName: "Zcash",
|
|
449
|
+
color: "#ECB244",
|
|
450
|
+
priority: 300,
|
|
451
|
+
description: str.newline(
|
|
452
|
+
"Zcash (ZEC) - a cryptocurrency with optional privacy",
|
|
453
|
+
"Uses zero-knowledge proofs (zk-SNARKs) technology",
|
|
454
|
+
"Choice between transparent and shielded transactions",
|
|
455
|
+
"Developed by world-class cryptographers"
|
|
456
|
+
),
|
|
457
|
+
},
|
|
458
|
+
];
|
|
459
|
+
|
|
460
|
+
module.exports = symbol_list;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { addExchangeSchema } from "backtest-kit";
|
|
2
|
+
import { singleshot } from "functools-kit";
|
|
3
|
+
import ccxt from "ccxt";
|
|
4
|
+
|
|
5
|
+
const getExchange = singleshot(async () => {
|
|
6
|
+
const exchange = new ccxt.binance({
|
|
7
|
+
options: {
|
|
8
|
+
defaultType: "spot",
|
|
9
|
+
adjustForTimeDifference: true,
|
|
10
|
+
recvWindow: 60000,
|
|
11
|
+
},
|
|
12
|
+
enableRateLimit: true,
|
|
13
|
+
});
|
|
14
|
+
await exchange.loadMarkets();
|
|
15
|
+
return exchange;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
addExchangeSchema({
|
|
19
|
+
exchangeName: "ccxt-exchange",
|
|
20
|
+
getCandles: async (symbol, interval, since, limit) => {
|
|
21
|
+
const exchange = await getExchange();
|
|
22
|
+
const candles = await exchange.fetchOHLCV(
|
|
23
|
+
symbol,
|
|
24
|
+
interval,
|
|
25
|
+
since.getTime(),
|
|
26
|
+
limit,
|
|
27
|
+
);
|
|
28
|
+
return candles.map(([timestamp, open, high, low, close, volume]) => ({
|
|
29
|
+
timestamp,
|
|
30
|
+
open,
|
|
31
|
+
high,
|
|
32
|
+
low,
|
|
33
|
+
close,
|
|
34
|
+
volume,
|
|
35
|
+
}));
|
|
36
|
+
},
|
|
37
|
+
});
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{PROJECT_NAME}}",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
-
"description": "",
|
|
4
|
+
"description": "Backtest Kit trading bot project",
|
|
5
5
|
"main": "index.js",
|
|
6
|
+
"homepage": "https://backtest-kit.github.io/documents/article_07_ai_news_trading_signals.html",
|
|
6
7
|
"scripts": {
|
|
7
8
|
"start": "node ./node_modules/@backtest-kit/cli/build/index.mjs",
|
|
8
9
|
"sync:lib": "node ./scripts/fetch_docs.mjs"
|
|
@@ -12,12 +13,12 @@
|
|
|
12
13
|
"license": "ISC",
|
|
13
14
|
"type": "commonjs",
|
|
14
15
|
"dependencies": {
|
|
15
|
-
"@backtest-kit/cli": "^
|
|
16
|
-
"@backtest-kit/graph": "^
|
|
17
|
-
"@backtest-kit/pinets": "^
|
|
18
|
-
"@backtest-kit/ui": "^
|
|
16
|
+
"@backtest-kit/cli": "^7.1.0",
|
|
17
|
+
"@backtest-kit/graph": "^7.1.0",
|
|
18
|
+
"@backtest-kit/pinets": "^7.1.0",
|
|
19
|
+
"@backtest-kit/ui": "^7.1.0",
|
|
19
20
|
"agent-swarm-kit": "^2.5.1",
|
|
20
|
-
"backtest-kit": "^
|
|
21
|
+
"backtest-kit": "^7.1.0",
|
|
21
22
|
"functools-kit": "^2.2.0",
|
|
22
23
|
"garch": "^1.2.3",
|
|
23
24
|
"get-moment-stamp": "^1.1.2",
|