@backtest-kit/cli 8.4.3 โ 9.0.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 +1692 -1615
- package/build/index.cjs +324 -195
- package/build/index.mjs +324 -195
- package/config/notification.config.mjs +13 -13
- package/config/symbol.config.mjs +460 -460
- package/docker/.env.example +2 -2
- package/docker/content/feb_2026/feb_2026.strategy.ts +11 -11
- package/docker/content/feb_2026/modules/backtest.module.ts +83 -83
- package/docker/docker-compose.yaml +45 -44
- package/docker/package.json +38 -38
- package/docker/tsconfig.json +36 -36
- package/package.json +126 -126
- package/template/average-buy.mustache +22 -22
- package/template/breakeven.mustache +21 -21
- package/template/cancel-scheduled.mustache +14 -14
- package/template/cancelled.mustache +21 -21
- package/template/close-pending.mustache +16 -16
- package/template/closed.mustache +23 -23
- package/template/opened.mustache +22 -22
- package/template/partial-loss.mustache +22 -22
- package/template/partial-profit.mustache +22 -22
- package/template/project/config/symbol.config.ts +460 -460
- package/template/project/package.mustache +28 -28
- package/template/risk.mustache +19 -19
- package/template/scheduled.mustache +22 -22
- package/template/signal-close.mustache +22 -22
- package/template/signal-info.mustache +20 -20
- package/template/signal-open.mustache +22 -22
- package/template/source/CLAUDE.md +160 -160
- package/template/trailing-stop.mustache +21 -21
- package/template/trailing-take.mustache +21 -21
package/package.json
CHANGED
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@backtest-kit/cli",
|
|
3
|
-
"version": "
|
|
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
|
-
"author": {
|
|
6
|
-
"name": "Petr Tripolsky",
|
|
7
|
-
"email": "tripolskypetr@gmail.com",
|
|
8
|
-
"url": "https://github.com/tripolskypetr"
|
|
9
|
-
},
|
|
10
|
-
"funding": {
|
|
11
|
-
"type": "individual",
|
|
12
|
-
"url": "http://paypal.me/tripolskypetr"
|
|
13
|
-
},
|
|
14
|
-
"license": "MIT",
|
|
15
|
-
"homepage": "https://backtest-kit.github.io/documents/article_07_ai_news_trading_signals.html",
|
|
16
|
-
"keywords": [
|
|
17
|
-
"backtest",
|
|
18
|
-
"backtesting",
|
|
19
|
-
"trading",
|
|
20
|
-
"cli",
|
|
21
|
-
"cryptocurrency",
|
|
22
|
-
"crypto",
|
|
23
|
-
"live-trading",
|
|
24
|
-
"paper-trading",
|
|
25
|
-
"telegram",
|
|
26
|
-
"binance",
|
|
27
|
-
"ccxt",
|
|
28
|
-
"candle-cache",
|
|
29
|
-
"strategy",
|
|
30
|
-
"typescript",
|
|
31
|
-
"monorepo"
|
|
32
|
-
],
|
|
33
|
-
"files": [
|
|
34
|
-
"build",
|
|
35
|
-
"types.d.ts",
|
|
36
|
-
"template",
|
|
37
|
-
"config",
|
|
38
|
-
"docker",
|
|
39
|
-
"README.md"
|
|
40
|
-
],
|
|
41
|
-
"repository": {
|
|
42
|
-
"type": "git",
|
|
43
|
-
"url": "https://github.com/tripolskypetr/backtest-kit",
|
|
44
|
-
"documentation": "https://github.com/tripolskypetr/backtest-kit/tree/master/docs"
|
|
45
|
-
},
|
|
46
|
-
"bugs": {
|
|
47
|
-
"url": "https://github.com/tripolskypetr/backtest-kit/issues"
|
|
48
|
-
},
|
|
49
|
-
"scripts": {
|
|
50
|
-
"build": "rollup -c",
|
|
51
|
-
"start": "npm run build && node build/index.mjs ./math/test.pine --pine --symbol BTCUSDT --timeframe 15m --limit 180"
|
|
52
|
-
},
|
|
53
|
-
"main": "build/index.cjs",
|
|
54
|
-
"module": "build/index.mjs",
|
|
55
|
-
"source": "src/index.ts",
|
|
56
|
-
"types": "./types.d.ts",
|
|
57
|
-
"exports": {
|
|
58
|
-
"require": "./build/index.cjs",
|
|
59
|
-
"types": "./types.d.ts",
|
|
60
|
-
"import": "./build/index.mjs",
|
|
61
|
-
"default": "./build/index.cjs"
|
|
62
|
-
},
|
|
63
|
-
"devDependencies": {
|
|
64
|
-
"@babel/plugin-transform-modules-umd": "7.27.1",
|
|
65
|
-
"@babel/standalone": "7.29.1",
|
|
66
|
-
"@backtest-kit/graph": "
|
|
67
|
-
"@backtest-kit/ollama": "
|
|
68
|
-
"@backtest-kit/pinets": "
|
|
69
|
-
"@backtest-kit/signals": "
|
|
70
|
-
"@backtest-kit/ui": "
|
|
71
|
-
"@rollup/plugin-replace": "6.0.3",
|
|
72
|
-
"@rollup/plugin-typescript": "11.1.6",
|
|
73
|
-
"@types/image-size": "0.7.0",
|
|
74
|
-
"@types/jsdom": "21.1.7",
|
|
75
|
-
"@types/mustache": "4.2.6",
|
|
76
|
-
"@types/node": "22.9.0",
|
|
77
|
-
"@types/stack-trace": "0.0.33",
|
|
78
|
-
"backtest-kit": "
|
|
79
|
-
"glob": "11.0.1",
|
|
80
|
-
"markdown-it": "14.1.1",
|
|
81
|
-
"rimraf": "6.0.1",
|
|
82
|
-
"rollup": "3.29.5",
|
|
83
|
-
"rollup-plugin-dts": "6.1.1",
|
|
84
|
-
"rollup-plugin-peer-deps-external": "2.2.4",
|
|
85
|
-
"ts-morph": "27.0.2",
|
|
86
|
-
"tslib": "2.7.0",
|
|
87
|
-
"typedoc": "0.27.9",
|
|
88
|
-
"worker-testbed": "2.0.0"
|
|
89
|
-
},
|
|
90
|
-
"peerDependencies": {
|
|
91
|
-
"@babel/plugin-transform-modules-umd": "^7.27.1",
|
|
92
|
-
"@babel/standalone": "^7.29.1",
|
|
93
|
-
"@backtest-kit/graph": "^
|
|
94
|
-
"@backtest-kit/ollama": "^
|
|
95
|
-
"@backtest-kit/pinets": "^
|
|
96
|
-
"@backtest-kit/signals": "^
|
|
97
|
-
"@backtest-kit/ui": "^
|
|
98
|
-
"backtest-kit": "^
|
|
99
|
-
"markdown-it": "^14.1.1",
|
|
100
|
-
"typescript": "^5.0.0"
|
|
101
|
-
},
|
|
102
|
-
"dependencies": {
|
|
103
|
-
"ccxt": "4.5.39",
|
|
104
|
-
"di-kit": "1.1.1",
|
|
105
|
-
"di-scoped": "1.0.21",
|
|
106
|
-
"dotenv": "17.3.1",
|
|
107
|
-
"functools-kit": "2.3.0",
|
|
108
|
-
"get-moment-stamp": "1.1.2",
|
|
109
|
-
"image-size": "1.1.1",
|
|
110
|
-
"jsdom": "26.1.0",
|
|
111
|
-
"markdownlint": "0.38.0",
|
|
112
|
-
"mustache": "4.2.0",
|
|
113
|
-
"open": "11.0.0",
|
|
114
|
-
"quickchart-js": "3.1.3",
|
|
115
|
-
"resize-image-buffer": "1.0.0",
|
|
116
|
-
"sanitize-html": "2.17.0",
|
|
117
|
-
"stack-trace": "0.0.10",
|
|
118
|
-
"telegraf": "4.15.3"
|
|
119
|
-
},
|
|
120
|
-
"bin": {
|
|
121
|
-
"backtest-kit": "./build/index.mjs"
|
|
122
|
-
},
|
|
123
|
-
"publishConfig": {
|
|
124
|
-
"access": "public"
|
|
125
|
-
}
|
|
126
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@backtest-kit/cli",
|
|
3
|
+
"version": "9.0.0",
|
|
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
|
+
"author": {
|
|
6
|
+
"name": "Petr Tripolsky",
|
|
7
|
+
"email": "tripolskypetr@gmail.com",
|
|
8
|
+
"url": "https://github.com/tripolskypetr"
|
|
9
|
+
},
|
|
10
|
+
"funding": {
|
|
11
|
+
"type": "individual",
|
|
12
|
+
"url": "http://paypal.me/tripolskypetr"
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"homepage": "https://backtest-kit.github.io/documents/article_07_ai_news_trading_signals.html",
|
|
16
|
+
"keywords": [
|
|
17
|
+
"backtest",
|
|
18
|
+
"backtesting",
|
|
19
|
+
"trading",
|
|
20
|
+
"cli",
|
|
21
|
+
"cryptocurrency",
|
|
22
|
+
"crypto",
|
|
23
|
+
"live-trading",
|
|
24
|
+
"paper-trading",
|
|
25
|
+
"telegram",
|
|
26
|
+
"binance",
|
|
27
|
+
"ccxt",
|
|
28
|
+
"candle-cache",
|
|
29
|
+
"strategy",
|
|
30
|
+
"typescript",
|
|
31
|
+
"monorepo"
|
|
32
|
+
],
|
|
33
|
+
"files": [
|
|
34
|
+
"build",
|
|
35
|
+
"types.d.ts",
|
|
36
|
+
"template",
|
|
37
|
+
"config",
|
|
38
|
+
"docker",
|
|
39
|
+
"README.md"
|
|
40
|
+
],
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://github.com/tripolskypetr/backtest-kit",
|
|
44
|
+
"documentation": "https://github.com/tripolskypetr/backtest-kit/tree/master/docs"
|
|
45
|
+
},
|
|
46
|
+
"bugs": {
|
|
47
|
+
"url": "https://github.com/tripolskypetr/backtest-kit/issues"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "rollup -c",
|
|
51
|
+
"start": "npm run build && node build/index.mjs ./math/test.pine --pine --symbol BTCUSDT --timeframe 15m --limit 180"
|
|
52
|
+
},
|
|
53
|
+
"main": "build/index.cjs",
|
|
54
|
+
"module": "build/index.mjs",
|
|
55
|
+
"source": "src/index.ts",
|
|
56
|
+
"types": "./types.d.ts",
|
|
57
|
+
"exports": {
|
|
58
|
+
"require": "./build/index.cjs",
|
|
59
|
+
"types": "./types.d.ts",
|
|
60
|
+
"import": "./build/index.mjs",
|
|
61
|
+
"default": "./build/index.cjs"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@babel/plugin-transform-modules-umd": "7.27.1",
|
|
65
|
+
"@babel/standalone": "7.29.1",
|
|
66
|
+
"@backtest-kit/graph": "9.0.0",
|
|
67
|
+
"@backtest-kit/ollama": "9.0.0",
|
|
68
|
+
"@backtest-kit/pinets": "9.0.0",
|
|
69
|
+
"@backtest-kit/signals": "9.0.0",
|
|
70
|
+
"@backtest-kit/ui": "9.0.0",
|
|
71
|
+
"@rollup/plugin-replace": "6.0.3",
|
|
72
|
+
"@rollup/plugin-typescript": "11.1.6",
|
|
73
|
+
"@types/image-size": "0.7.0",
|
|
74
|
+
"@types/jsdom": "21.1.7",
|
|
75
|
+
"@types/mustache": "4.2.6",
|
|
76
|
+
"@types/node": "22.9.0",
|
|
77
|
+
"@types/stack-trace": "0.0.33",
|
|
78
|
+
"backtest-kit": "9.0.0",
|
|
79
|
+
"glob": "11.0.1",
|
|
80
|
+
"markdown-it": "14.1.1",
|
|
81
|
+
"rimraf": "6.0.1",
|
|
82
|
+
"rollup": "3.29.5",
|
|
83
|
+
"rollup-plugin-dts": "6.1.1",
|
|
84
|
+
"rollup-plugin-peer-deps-external": "2.2.4",
|
|
85
|
+
"ts-morph": "27.0.2",
|
|
86
|
+
"tslib": "2.7.0",
|
|
87
|
+
"typedoc": "0.27.9",
|
|
88
|
+
"worker-testbed": "2.0.0"
|
|
89
|
+
},
|
|
90
|
+
"peerDependencies": {
|
|
91
|
+
"@babel/plugin-transform-modules-umd": "^7.27.1",
|
|
92
|
+
"@babel/standalone": "^7.29.1",
|
|
93
|
+
"@backtest-kit/graph": "^9.0.0",
|
|
94
|
+
"@backtest-kit/ollama": "^9.0.0",
|
|
95
|
+
"@backtest-kit/pinets": "^9.0.0",
|
|
96
|
+
"@backtest-kit/signals": "^9.0.0",
|
|
97
|
+
"@backtest-kit/ui": "^9.0.0",
|
|
98
|
+
"backtest-kit": "^9.0.0",
|
|
99
|
+
"markdown-it": "^14.1.1",
|
|
100
|
+
"typescript": "^5.0.0"
|
|
101
|
+
},
|
|
102
|
+
"dependencies": {
|
|
103
|
+
"ccxt": "4.5.39",
|
|
104
|
+
"di-kit": "1.1.1",
|
|
105
|
+
"di-scoped": "1.0.21",
|
|
106
|
+
"dotenv": "17.3.1",
|
|
107
|
+
"functools-kit": "2.3.0",
|
|
108
|
+
"get-moment-stamp": "1.1.2",
|
|
109
|
+
"image-size": "1.1.1",
|
|
110
|
+
"jsdom": "26.1.0",
|
|
111
|
+
"markdownlint": "0.38.0",
|
|
112
|
+
"mustache": "4.2.0",
|
|
113
|
+
"open": "11.0.0",
|
|
114
|
+
"quickchart-js": "3.1.3",
|
|
115
|
+
"resize-image-buffer": "1.0.0",
|
|
116
|
+
"sanitize-html": "2.17.0",
|
|
117
|
+
"stack-trace": "0.0.10",
|
|
118
|
+
"telegraf": "4.15.3"
|
|
119
|
+
},
|
|
120
|
+
"bin": {
|
|
121
|
+
"backtest-kit": "./build/index.mjs"
|
|
122
|
+
},
|
|
123
|
+
"publishConfig": {
|
|
124
|
+
"access": "public"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
**๐ช Averaging Entry (DCA)**
|
|
2
|
-
|
|
3
|
-
**Symbol:** `{{symbol}}` ({{position}})
|
|
4
|
-
|
|
5
|
-
**Current:** `{{currentPrice}}`
|
|
6
|
-
**New Avg Entry:** `{{effectivePriceOpen}}`
|
|
7
|
-
**Orig Entry:** `{{originalPriceOpen}}`
|
|
8
|
-
**Cost:** `{{cost}}`
|
|
9
|
-
**DCA Entries:** `{{totalEntries}}`
|
|
10
|
-
**Partials Done:** `{{totalPartials}}`
|
|
11
|
-
**Take Profit:** `{{priceTakeProfit}}`
|
|
12
|
-
**Stop Loss:** `{{priceStopLoss}}`
|
|
13
|
-
**Orig TP:** `{{originalPriceTakeProfit}}`
|
|
14
|
-
**Orig SL:** `{{originalPriceStopLoss}}`
|
|
15
|
-
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
16
|
-
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
17
|
-
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
18
|
-
**Signal ID:** `{{signalId}}`
|
|
19
|
-
**Time:** `{{timestamp}}`
|
|
20
|
-
|
|
21
|
-
{{#backtest}}
|
|
22
|
-
_๐งช Backtest_
|
|
1
|
+
**๐ช Averaging Entry (DCA)**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}` ({{position}})
|
|
4
|
+
|
|
5
|
+
**Current:** `{{currentPrice}}`
|
|
6
|
+
**New Avg Entry:** `{{effectivePriceOpen}}`
|
|
7
|
+
**Orig Entry:** `{{originalPriceOpen}}`
|
|
8
|
+
**Cost:** `{{cost}}`
|
|
9
|
+
**DCA Entries:** `{{totalEntries}}`
|
|
10
|
+
**Partials Done:** `{{totalPartials}}`
|
|
11
|
+
**Take Profit:** `{{priceTakeProfit}}`
|
|
12
|
+
**Stop Loss:** `{{priceStopLoss}}`
|
|
13
|
+
**Orig TP:** `{{originalPriceTakeProfit}}`
|
|
14
|
+
**Orig SL:** `{{originalPriceStopLoss}}`
|
|
15
|
+
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
16
|
+
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
17
|
+
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
18
|
+
**Signal ID:** `{{signalId}}`
|
|
19
|
+
**Time:** `{{timestamp}}`
|
|
20
|
+
|
|
21
|
+
{{#backtest}}
|
|
22
|
+
_๐งช Backtest_
|
|
23
23
|
{{/backtest}}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
**โ๏ธ Breakeven**
|
|
2
|
-
|
|
3
|
-
**Symbol:** `{{symbol}}` ({{position}})
|
|
4
|
-
|
|
5
|
-
**Current:** `{{currentPrice}}`
|
|
6
|
-
**Entry:** `{{priceOpen}}`
|
|
7
|
-
**Orig Entry:** `{{originalPriceOpen}}`
|
|
8
|
-
**DCA Entries:** `{{totalEntries}}`
|
|
9
|
-
**Partials Done:** `{{totalPartials}}`
|
|
10
|
-
**Take Profit:** `{{priceTakeProfit}}`
|
|
11
|
-
**Stop Loss:** `{{priceStopLoss}}`
|
|
12
|
-
**Orig TP:** `{{originalPriceTakeProfit}}`
|
|
13
|
-
**Orig SL:** `{{originalPriceStopLoss}}`
|
|
14
|
-
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
15
|
-
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
16
|
-
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
17
|
-
**Signal ID:** `{{signalId}}`
|
|
18
|
-
**Time:** `{{timestamp}}`
|
|
19
|
-
|
|
20
|
-
{{#backtest}}
|
|
21
|
-
_๐งช Backtest_
|
|
1
|
+
**โ๏ธ Breakeven**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}` ({{position}})
|
|
4
|
+
|
|
5
|
+
**Current:** `{{currentPrice}}`
|
|
6
|
+
**Entry:** `{{priceOpen}}`
|
|
7
|
+
**Orig Entry:** `{{originalPriceOpen}}`
|
|
8
|
+
**DCA Entries:** `{{totalEntries}}`
|
|
9
|
+
**Partials Done:** `{{totalPartials}}`
|
|
10
|
+
**Take Profit:** `{{priceTakeProfit}}`
|
|
11
|
+
**Stop Loss:** `{{priceStopLoss}}`
|
|
12
|
+
**Orig TP:** `{{originalPriceTakeProfit}}`
|
|
13
|
+
**Orig SL:** `{{originalPriceStopLoss}}`
|
|
14
|
+
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
15
|
+
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
16
|
+
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
17
|
+
**Signal ID:** `{{signalId}}`
|
|
18
|
+
**Time:** `{{timestamp}}`
|
|
19
|
+
|
|
20
|
+
{{#backtest}}
|
|
21
|
+
_๐งช Backtest_
|
|
22
22
|
{{/backtest}}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
**๐ซ Cancel Scheduled**
|
|
2
|
-
|
|
3
|
-
**Symbol:** `{{symbol}}`
|
|
4
|
-
|
|
5
|
-
**Orig Entry:** `{{originalPriceOpen}}`
|
|
6
|
-
**DCA Entries:** `{{totalEntries}}`
|
|
7
|
-
**Partials Done:** `{{totalPartials}}`
|
|
8
|
-
{{#cancelId}}**Cancel ID:** `{{cancelId}}`
|
|
9
|
-
{{/cancelId}}
|
|
10
|
-
**Signal ID:** `{{signalId}}`
|
|
11
|
-
**Time:** `{{timestamp}}`
|
|
12
|
-
|
|
13
|
-
{{#backtest}}
|
|
14
|
-
_๐งช Backtest_
|
|
1
|
+
**๐ซ Cancel Scheduled**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}`
|
|
4
|
+
|
|
5
|
+
**Orig Entry:** `{{originalPriceOpen}}`
|
|
6
|
+
**DCA Entries:** `{{totalEntries}}`
|
|
7
|
+
**Partials Done:** `{{totalPartials}}`
|
|
8
|
+
{{#cancelId}}**Cancel ID:** `{{cancelId}}`
|
|
9
|
+
{{/cancelId}}
|
|
10
|
+
**Signal ID:** `{{signalId}}`
|
|
11
|
+
**Time:** `{{timestamp}}`
|
|
12
|
+
|
|
13
|
+
{{#backtest}}
|
|
14
|
+
_๐งช Backtest_
|
|
15
15
|
{{/backtest}}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
**๐ซ Signal Cancelled**
|
|
2
|
-
|
|
3
|
-
**Symbol:** `{{symbol}}` ({{signal.position}})
|
|
4
|
-
|
|
5
|
-
**Reason:** `{{reason}}`
|
|
6
|
-
**Entry:** `{{signal.priceOpen}}`
|
|
7
|
-
**Current:** `{{currentPrice}}`
|
|
8
|
-
**Orig Entry:** `{{signal.originalPriceOpen}}`
|
|
9
|
-
**Orig TP:** `{{signal.originalPriceTakeProfit}}`
|
|
10
|
-
**Orig SL:** `{{signal.originalPriceStopLoss}}`
|
|
11
|
-
**DCA Entries:** `{{signal.totalEntries}}`
|
|
12
|
-
**Partials Done:** `{{signal.totalPartials}}`
|
|
13
|
-
**Partial Executed:** {{signal.partialExecuted}}%
|
|
14
|
-
**Peak Profit:** {{signal.peakProfit.pnlPercentage}}% ({{signal.peakProfit.pnlCost}} / {{signal.peakProfit.pnlEntries}})
|
|
15
|
-
**Max Drawdown:** {{signal.maxDrawdown.pnlPercentage}}% ({{signal.maxDrawdown.pnlCost}} / {{signal.maxDrawdown.pnlEntries}})
|
|
16
|
-
**Signal ID:** `{{signal.id}}`
|
|
17
|
-
{{#cancelId}}**Cancel ID:** `{{cancelId}}`
|
|
18
|
-
{{/cancelId}}**Time:** `{{createdAt}}`
|
|
19
|
-
|
|
20
|
-
{{#backtest}}
|
|
21
|
-
_๐งช Backtest_
|
|
1
|
+
**๐ซ Signal Cancelled**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}` ({{signal.position}})
|
|
4
|
+
|
|
5
|
+
**Reason:** `{{reason}}`
|
|
6
|
+
**Entry:** `{{signal.priceOpen}}`
|
|
7
|
+
**Current:** `{{currentPrice}}`
|
|
8
|
+
**Orig Entry:** `{{signal.originalPriceOpen}}`
|
|
9
|
+
**Orig TP:** `{{signal.originalPriceTakeProfit}}`
|
|
10
|
+
**Orig SL:** `{{signal.originalPriceStopLoss}}`
|
|
11
|
+
**DCA Entries:** `{{signal.totalEntries}}`
|
|
12
|
+
**Partials Done:** `{{signal.totalPartials}}`
|
|
13
|
+
**Partial Executed:** {{signal.partialExecuted}}%
|
|
14
|
+
**Peak Profit:** {{signal.peakProfit.pnlPercentage}}% ({{signal.peakProfit.pnlCost}} / {{signal.peakProfit.pnlEntries}})
|
|
15
|
+
**Max Drawdown:** {{signal.maxDrawdown.pnlPercentage}}% ({{signal.maxDrawdown.pnlCost}} / {{signal.maxDrawdown.pnlEntries}})
|
|
16
|
+
**Signal ID:** `{{signal.id}}`
|
|
17
|
+
{{#cancelId}}**Cancel ID:** `{{cancelId}}`
|
|
18
|
+
{{/cancelId}}**Time:** `{{createdAt}}`
|
|
19
|
+
|
|
20
|
+
{{#backtest}}
|
|
21
|
+
_๐งช Backtest_
|
|
22
22
|
{{/backtest}}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
**๐ Close Pending**
|
|
2
|
-
|
|
3
|
-
**Symbol:** `{{symbol}}`
|
|
4
|
-
|
|
5
|
-
**Orig Entry:** `{{originalPriceOpen}}`
|
|
6
|
-
**DCA Entries:** `{{totalEntries}}`
|
|
7
|
-
**Partials Done:** `{{totalPartials}}`
|
|
8
|
-
{{#closeId}}**Close ID:** `{{closeId}}`
|
|
9
|
-
{{/closeId}}**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
10
|
-
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
11
|
-
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
12
|
-
**Signal ID:** `{{signalId}}`
|
|
13
|
-
**Time:** `{{timestamp}}`
|
|
14
|
-
|
|
15
|
-
{{#backtest}}
|
|
16
|
-
_๐งช Backtest_
|
|
1
|
+
**๐ Close Pending**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}`
|
|
4
|
+
|
|
5
|
+
**Orig Entry:** `{{originalPriceOpen}}`
|
|
6
|
+
**DCA Entries:** `{{totalEntries}}`
|
|
7
|
+
**Partials Done:** `{{totalPartials}}`
|
|
8
|
+
{{#closeId}}**Close ID:** `{{closeId}}`
|
|
9
|
+
{{/closeId}}**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
10
|
+
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
11
|
+
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
12
|
+
**Signal ID:** `{{signalId}}`
|
|
13
|
+
**Time:** `{{timestamp}}`
|
|
14
|
+
|
|
15
|
+
{{#backtest}}
|
|
16
|
+
_๐งช Backtest_
|
|
17
17
|
{{/backtest}}
|
package/template/closed.mustache
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
**๐ Position Closed**
|
|
2
|
-
|
|
3
|
-
**Symbol:** `{{symbol}}` ({{signal.position}})
|
|
4
|
-
|
|
5
|
-
**Reason:** `{{closeReason}}`
|
|
6
|
-
**Current:** `{{currentPrice}}`
|
|
7
|
-
**Entry:** `{{pnl.priceOpen}}`
|
|
8
|
-
**Exit:** `{{pnl.priceClose}}`
|
|
9
|
-
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
10
|
-
**Peak Profit:** {{signal.peakProfit.pnlPercentage}}% ({{signal.peakProfit.pnlCost}} / {{signal.peakProfit.pnlEntries}})
|
|
11
|
-
**Max Drawdown:** {{signal.maxDrawdown.pnlPercentage}}% ({{signal.maxDrawdown.pnlCost}} / {{signal.maxDrawdown.pnlEntries}})
|
|
12
|
-
**Orig Entry:** `{{signal.originalPriceOpen}}`
|
|
13
|
-
**Orig TP:** `{{signal.originalPriceTakeProfit}}`
|
|
14
|
-
**Orig SL:** `{{signal.originalPriceStopLoss}}`
|
|
15
|
-
**DCA Entries:** `{{signal.totalEntries}}`
|
|
16
|
-
**Partials Done:** `{{signal.totalPartials}}`
|
|
17
|
-
**Partial Executed:** {{signal.partialExecuted}}%
|
|
18
|
-
**Signal ID:** `{{signal.id}}`
|
|
19
|
-
{{#closeId}}**Close ID:** `{{closeId}}`
|
|
20
|
-
{{/closeId}}**Time:** `{{createdAt}}`
|
|
21
|
-
|
|
22
|
-
{{#backtest}}
|
|
23
|
-
_๐งช Backtest_
|
|
1
|
+
**๐ Position Closed**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}` ({{signal.position}})
|
|
4
|
+
|
|
5
|
+
**Reason:** `{{closeReason}}`
|
|
6
|
+
**Current:** `{{currentPrice}}`
|
|
7
|
+
**Entry:** `{{pnl.priceOpen}}`
|
|
8
|
+
**Exit:** `{{pnl.priceClose}}`
|
|
9
|
+
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
10
|
+
**Peak Profit:** {{signal.peakProfit.pnlPercentage}}% ({{signal.peakProfit.pnlCost}} / {{signal.peakProfit.pnlEntries}})
|
|
11
|
+
**Max Drawdown:** {{signal.maxDrawdown.pnlPercentage}}% ({{signal.maxDrawdown.pnlCost}} / {{signal.maxDrawdown.pnlEntries}})
|
|
12
|
+
**Orig Entry:** `{{signal.originalPriceOpen}}`
|
|
13
|
+
**Orig TP:** `{{signal.originalPriceTakeProfit}}`
|
|
14
|
+
**Orig SL:** `{{signal.originalPriceStopLoss}}`
|
|
15
|
+
**DCA Entries:** `{{signal.totalEntries}}`
|
|
16
|
+
**Partials Done:** `{{signal.totalPartials}}`
|
|
17
|
+
**Partial Executed:** {{signal.partialExecuted}}%
|
|
18
|
+
**Signal ID:** `{{signal.id}}`
|
|
19
|
+
{{#closeId}}**Close ID:** `{{closeId}}`
|
|
20
|
+
{{/closeId}}**Time:** `{{createdAt}}`
|
|
21
|
+
|
|
22
|
+
{{#backtest}}
|
|
23
|
+
_๐งช Backtest_
|
|
24
24
|
{{/backtest}}
|
package/template/opened.mustache
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
**๐ Position Opened**
|
|
2
|
-
|
|
3
|
-
**Symbol:** `{{symbol}}` ({{signal.position}})
|
|
4
|
-
|
|
5
|
-
**Current:** `{{currentPrice}}`
|
|
6
|
-
**Entry:** `{{signal.priceOpen}}`
|
|
7
|
-
**Take Profit:** `{{signal.priceTakeProfit}}`
|
|
8
|
-
**Stop Loss:** `{{signal.priceStopLoss}}`
|
|
9
|
-
**Orig Entry:** `{{signal.originalPriceOpen}}`
|
|
10
|
-
**Orig TP:** `{{signal.originalPriceTakeProfit}}`
|
|
11
|
-
**Orig SL:** `{{signal.originalPriceStopLoss}}`
|
|
12
|
-
**Cost:** `{{signal.cost}}`
|
|
13
|
-
**DCA Entries:** `{{signal.totalEntries}}`
|
|
14
|
-
**Partials Done:** `{{signal.totalPartials}}`
|
|
15
|
-
**TTL:** {{signal.minuteEstimatedTime}} min
|
|
16
|
-
**Peak Profit:** {{signal.peakProfit.pnlPercentage}}% ({{signal.peakProfit.pnlCost}} / {{signal.peakProfit.pnlEntries}})
|
|
17
|
-
**Max Drawdown:** {{signal.maxDrawdown.pnlPercentage}}% ({{signal.maxDrawdown.pnlCost}} / {{signal.maxDrawdown.pnlEntries}})
|
|
18
|
-
**Signal ID:** `{{signal.id}}`
|
|
19
|
-
**Time:** `{{createdAt}}`
|
|
20
|
-
|
|
21
|
-
{{#backtest}}
|
|
22
|
-
_๐งช Backtest_
|
|
1
|
+
**๐ Position Opened**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}` ({{signal.position}})
|
|
4
|
+
|
|
5
|
+
**Current:** `{{currentPrice}}`
|
|
6
|
+
**Entry:** `{{signal.priceOpen}}`
|
|
7
|
+
**Take Profit:** `{{signal.priceTakeProfit}}`
|
|
8
|
+
**Stop Loss:** `{{signal.priceStopLoss}}`
|
|
9
|
+
**Orig Entry:** `{{signal.originalPriceOpen}}`
|
|
10
|
+
**Orig TP:** `{{signal.originalPriceTakeProfit}}`
|
|
11
|
+
**Orig SL:** `{{signal.originalPriceStopLoss}}`
|
|
12
|
+
**Cost:** `{{signal.cost}}`
|
|
13
|
+
**DCA Entries:** `{{signal.totalEntries}}`
|
|
14
|
+
**Partials Done:** `{{signal.totalPartials}}`
|
|
15
|
+
**TTL:** {{signal.minuteEstimatedTime}} min
|
|
16
|
+
**Peak Profit:** {{signal.peakProfit.pnlPercentage}}% ({{signal.peakProfit.pnlCost}} / {{signal.peakProfit.pnlEntries}})
|
|
17
|
+
**Max Drawdown:** {{signal.maxDrawdown.pnlPercentage}}% ({{signal.maxDrawdown.pnlCost}} / {{signal.maxDrawdown.pnlEntries}})
|
|
18
|
+
**Signal ID:** `{{signal.id}}`
|
|
19
|
+
**Time:** `{{createdAt}}`
|
|
20
|
+
|
|
21
|
+
{{#backtest}}
|
|
22
|
+
_๐งช Backtest_
|
|
23
23
|
{{/backtest}}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
**๐ป Partial Loss**
|
|
2
|
-
|
|
3
|
-
**Symbol:** `{{symbol}}` ({{position}})
|
|
4
|
-
|
|
5
|
-
**Current:** `{{currentPrice}}`
|
|
6
|
-
**Entry:** `{{priceOpen}}`
|
|
7
|
-
**Orig Entry:** `{{originalPriceOpen}}`
|
|
8
|
-
**Closed:** {{percentToClose}}%
|
|
9
|
-
**Take Profit:** `{{priceTakeProfit}}`
|
|
10
|
-
**Stop Loss:** `{{priceStopLoss}}`
|
|
11
|
-
**Orig TP:** `{{originalPriceTakeProfit}}`
|
|
12
|
-
**Orig SL:** `{{originalPriceStopLoss}}`
|
|
13
|
-
**DCA Entries:** `{{totalEntries}}`
|
|
14
|
-
**Partials Done:** `{{totalPartials}}`
|
|
15
|
-
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
16
|
-
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
17
|
-
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
18
|
-
**Signal ID:** `{{signalId}}`
|
|
19
|
-
**Time:** `{{timestamp}}`
|
|
20
|
-
|
|
21
|
-
{{#backtest}}
|
|
22
|
-
_๐งช Backtest_
|
|
1
|
+
**๐ป Partial Loss**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}` ({{position}})
|
|
4
|
+
|
|
5
|
+
**Current:** `{{currentPrice}}`
|
|
6
|
+
**Entry:** `{{priceOpen}}`
|
|
7
|
+
**Orig Entry:** `{{originalPriceOpen}}`
|
|
8
|
+
**Closed:** {{percentToClose}}%
|
|
9
|
+
**Take Profit:** `{{priceTakeProfit}}`
|
|
10
|
+
**Stop Loss:** `{{priceStopLoss}}`
|
|
11
|
+
**Orig TP:** `{{originalPriceTakeProfit}}`
|
|
12
|
+
**Orig SL:** `{{originalPriceStopLoss}}`
|
|
13
|
+
**DCA Entries:** `{{totalEntries}}`
|
|
14
|
+
**Partials Done:** `{{totalPartials}}`
|
|
15
|
+
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
16
|
+
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
17
|
+
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
18
|
+
**Signal ID:** `{{signalId}}`
|
|
19
|
+
**Time:** `{{timestamp}}`
|
|
20
|
+
|
|
21
|
+
{{#backtest}}
|
|
22
|
+
_๐งช Backtest_
|
|
23
23
|
{{/backtest}}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
**๐ Partial Profit**
|
|
2
|
-
|
|
3
|
-
**Symbol:** `{{symbol}}` ({{position}})
|
|
4
|
-
|
|
5
|
-
**Current:** `{{currentPrice}}`
|
|
6
|
-
**Entry:** `{{priceOpen}}`
|
|
7
|
-
**Orig Entry:** `{{originalPriceOpen}}`
|
|
8
|
-
**Closed:** {{percentToClose}}%
|
|
9
|
-
**Take Profit:** `{{priceTakeProfit}}`
|
|
10
|
-
**Stop Loss:** `{{priceStopLoss}}`
|
|
11
|
-
**Orig TP:** `{{originalPriceTakeProfit}}`
|
|
12
|
-
**Orig SL:** `{{originalPriceStopLoss}}`
|
|
13
|
-
**DCA Entries:** `{{totalEntries}}`
|
|
14
|
-
**Partials Done:** `{{totalPartials}}`
|
|
15
|
-
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
16
|
-
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
17
|
-
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
18
|
-
**Signal ID:** `{{signalId}}`
|
|
19
|
-
**Time:** `{{timestamp}}`
|
|
20
|
-
|
|
21
|
-
{{#backtest}}
|
|
22
|
-
_๐งช Backtest_
|
|
1
|
+
**๐ Partial Profit**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}` ({{position}})
|
|
4
|
+
|
|
5
|
+
**Current:** `{{currentPrice}}`
|
|
6
|
+
**Entry:** `{{priceOpen}}`
|
|
7
|
+
**Orig Entry:** `{{originalPriceOpen}}`
|
|
8
|
+
**Closed:** {{percentToClose}}%
|
|
9
|
+
**Take Profit:** `{{priceTakeProfit}}`
|
|
10
|
+
**Stop Loss:** `{{priceStopLoss}}`
|
|
11
|
+
**Orig TP:** `{{originalPriceTakeProfit}}`
|
|
12
|
+
**Orig SL:** `{{originalPriceStopLoss}}`
|
|
13
|
+
**DCA Entries:** `{{totalEntries}}`
|
|
14
|
+
**Partials Done:** `{{totalPartials}}`
|
|
15
|
+
**PnL:** {{pnl.pnlPercentage}}% ({{pnl.pnlCost}} / {{pnl.pnlEntries}})
|
|
16
|
+
**Peak Profit:** {{peakProfit.pnlPercentage}}% ({{peakProfit.pnlCost}} / {{peakProfit.pnlEntries}})
|
|
17
|
+
**Max Drawdown:** {{maxDrawdown.pnlPercentage}}% ({{maxDrawdown.pnlCost}} / {{maxDrawdown.pnlEntries}})
|
|
18
|
+
**Signal ID:** `{{signalId}}`
|
|
19
|
+
**Time:** `{{timestamp}}`
|
|
20
|
+
|
|
21
|
+
{{#backtest}}
|
|
22
|
+
_๐งช Backtest_
|
|
23
23
|
{{/backtest}}
|