@backtest-kit/cli 7.2.0 → 7.3.1
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/build/index.cjs +23 -4
- package/build/index.mjs +24 -5
- package/package.json +13 -13
- package/template/project/package.mustache +5 -5
- package/template/signal-info.mustache +21 -0
- package/types.d.ts +3 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776683700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776684600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776685500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776686400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776687300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776688200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776689100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776690000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776690900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776691800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776692700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776693600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776694500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776695400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776696300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776697200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776698100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776699000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776699900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776700800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776701700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776702600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776703500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776704400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776705300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776706200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776707100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776708000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776708900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776709800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776710700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776711600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776712500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776713400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776714300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776715200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776716100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776717000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776717900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776718800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776719700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776720600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776721500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776722400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776723300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776724200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776725100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776726000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776726900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776727800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776728700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776729600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776730500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776731400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776732300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776733200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776734100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776735000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776735900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776736800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776737700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776738600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776739500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776740400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776741300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776742200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776743100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776744000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776744900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776745800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776746700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776747600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776748500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776749400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776750300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776751200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776752100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776753000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776753900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776754800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776755700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776756600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776757500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776758400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776759300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776760200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776761100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776762000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776762900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776763800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776764700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776765600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776766500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776767400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776768300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776769200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776770100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776771000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776771900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776772800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776773700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776774600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776775500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776776400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776777300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776778200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776779100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776780000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776780900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776781800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776782700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776783600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776784500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776785400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776786300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776787200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776788100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776789000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776789900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776790800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776791700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776792600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776793500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776794400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776795300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776796200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776797100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776798000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776798900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776799800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776800700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776801600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776802500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776803400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776804300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776805200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776806100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776807000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776807900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776808800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776809700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776810600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776811500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776812400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776813300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776814200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776815100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776816000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776816900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776817800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776818700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776819600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776820500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776821400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776822300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776823200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776824100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776825000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776825900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776826800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776827700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776828600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776829500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776830400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776831300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776832200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776833100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776834000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776834900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776835800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776836700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776837600000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776838500000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776839400000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776840300000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776841200000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776842100000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776843000000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776843900000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776844800000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776845700000.json +0 -1
- package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776846600000.json +0 -1
- package/build/error.txt +0 -770
package/build/index.cjs
CHANGED
|
@@ -2054,6 +2054,16 @@ class TelegramLogicService {
|
|
|
2054
2054
|
markdown,
|
|
2055
2055
|
});
|
|
2056
2056
|
});
|
|
2057
|
+
this.notifySignalInfo = functoolsKit.trycatch(async (event) => {
|
|
2058
|
+
this.loggerService.log("telegramLogicService notifySignalInfo", {
|
|
2059
|
+
event,
|
|
2060
|
+
});
|
|
2061
|
+
const markdown = await this.telegramTemplateService.getSignalInfoMarkdown(event);
|
|
2062
|
+
await this.telegramWebService.publishNotify({
|
|
2063
|
+
symbol: event.symbol,
|
|
2064
|
+
markdown,
|
|
2065
|
+
});
|
|
2066
|
+
});
|
|
2057
2067
|
this.notifyCancelScheduled = async (event) => {
|
|
2058
2068
|
this.loggerService.log("telegramLogicService notifyCancelScheduled", {
|
|
2059
2069
|
event,
|
|
@@ -2141,8 +2151,11 @@ class TelegramLogicService {
|
|
|
2141
2151
|
return;
|
|
2142
2152
|
}
|
|
2143
2153
|
});
|
|
2154
|
+
const unSignalNotify = BacktestKit.listenSignalNotify(async (event) => {
|
|
2155
|
+
await this.notifySignalInfo(event);
|
|
2156
|
+
});
|
|
2144
2157
|
const unConnect = () => this.connect.clear();
|
|
2145
|
-
const unListen = functoolsKit.compose(() => unRisk(), () => unSignal(), () => unCommit(), () => unSync(), () => unConnect());
|
|
2158
|
+
const unListen = functoolsKit.compose(() => unRisk(), () => unSignal(), () => unCommit(), () => unSync(), () => unSignalNotify(), () => unConnect());
|
|
2146
2159
|
return () => {
|
|
2147
2160
|
STOP_BOT_FN();
|
|
2148
2161
|
unListen();
|
|
@@ -2261,6 +2274,12 @@ class TelegramTemplateService {
|
|
|
2261
2274
|
});
|
|
2262
2275
|
return await RENDER_TEMPLATE_FN("close-pending.mustache", event, this);
|
|
2263
2276
|
};
|
|
2277
|
+
this.getSignalInfoMarkdown = async (event) => {
|
|
2278
|
+
this.loggerService.log("telegramTemplateService getSignalInfoMarkdown", {
|
|
2279
|
+
event,
|
|
2280
|
+
});
|
|
2281
|
+
return await RENDER_TEMPLATE_FN("signal-info.mustache", event, this);
|
|
2282
|
+
};
|
|
2264
2283
|
}
|
|
2265
2284
|
}
|
|
2266
2285
|
|
|
@@ -2835,7 +2854,7 @@ const main$d = async () => {
|
|
|
2835
2854
|
if (MODES.some((mode) => values[mode])) {
|
|
2836
2855
|
return;
|
|
2837
2856
|
}
|
|
2838
|
-
process.stdout.write(`@backtest-kit/cli ${"7.
|
|
2857
|
+
process.stdout.write(`@backtest-kit/cli ${"7.3.1"}\n`);
|
|
2839
2858
|
process.stdout.write("\n");
|
|
2840
2859
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
2841
2860
|
process.stdout.write("\n");
|
|
@@ -3499,7 +3518,7 @@ const main$1 = async () => {
|
|
|
3499
3518
|
if (!values.help) {
|
|
3500
3519
|
return;
|
|
3501
3520
|
}
|
|
3502
|
-
process.stdout.write(`@backtest-kit/cli ${"7.
|
|
3521
|
+
process.stdout.write(`@backtest-kit/cli ${"7.3.1"}\n\n`);
|
|
3503
3522
|
process.stdout.write(HELP_TEXT);
|
|
3504
3523
|
process.exit(0);
|
|
3505
3524
|
};
|
|
@@ -3513,7 +3532,7 @@ const main = async () => {
|
|
|
3513
3532
|
if (!values.version) {
|
|
3514
3533
|
return;
|
|
3515
3534
|
}
|
|
3516
|
-
process.stdout.write(`@backtest-kit/cli ${"7.
|
|
3535
|
+
process.stdout.write(`@backtest-kit/cli ${"7.3.1"}\n`);
|
|
3517
3536
|
process.exit(0);
|
|
3518
3537
|
};
|
|
3519
3538
|
main();
|
package/build/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import * as BacktestKit from 'backtest-kit';
|
|
3
|
-
import { setConfig, Log, listExchangeSchema, addExchangeSchema, roundTicks, listFrameSchema, addFrameSchema, listenDoneLive, listenDoneBacktest, shutdown, listenSignal, Notification, Recent, Storage, Markdown, Report, Dump, Memory, StorageLive, StorageBacktest, RecentLive, RecentBacktest, NotificationLive, NotificationBacktest, MarkdownWriter, ReportWriter, PersistSignalAdapter, PersistRiskAdapter, PersistScheduleAdapter, PersistPartialAdapter, PersistBreakevenAdapter, PersistCandleAdapter, PersistStorageAdapter, PersistNotificationAdapter, PersistLogAdapter, PersistMeasureAdapter, PersistIntervalAdapter, PersistMemoryAdapter, PersistRecentAdapter, listStrategySchema, overrideExchangeSchema, Backtest, Session, Cache, Interval, alignToInterval, addWalkerSchema, overrideWalkerSchema, Walker, listenDoneWalker, Live, getCandles, checkCandles, warmCandles, listenRisk, listenStrategyCommit, listenSync, Exchange } from 'backtest-kit';
|
|
3
|
+
import { setConfig, Log, listExchangeSchema, addExchangeSchema, roundTicks, listFrameSchema, addFrameSchema, listenDoneLive, listenDoneBacktest, shutdown, listenSignal, Notification, Recent, Storage, Markdown, Report, Dump, Memory, StorageLive, StorageBacktest, RecentLive, RecentBacktest, NotificationLive, NotificationBacktest, MarkdownWriter, ReportWriter, PersistSignalAdapter, PersistRiskAdapter, PersistScheduleAdapter, PersistPartialAdapter, PersistBreakevenAdapter, PersistCandleAdapter, PersistStorageAdapter, PersistNotificationAdapter, PersistLogAdapter, PersistMeasureAdapter, PersistIntervalAdapter, PersistMemoryAdapter, PersistRecentAdapter, listStrategySchema, overrideExchangeSchema, Backtest, Session, Cache, Interval, alignToInterval, addWalkerSchema, overrideWalkerSchema, Walker, listenDoneWalker, Live, getCandles, checkCandles, warmCandles, listenRisk, listenStrategyCommit, listenSync, listenSignalNotify, Exchange } from 'backtest-kit';
|
|
4
4
|
import { getErrorMessage, errorData, singleshot, str, BehaviorSubject, compose, createAwaiter, execpool, queued, sleep, randomString, TIMEOUT_SYMBOL, typo, retry, trycatch, memoize, isObject } from 'functools-kit';
|
|
5
5
|
import fs, { constants } from 'fs';
|
|
6
6
|
import * as stackTrace from 'stack-trace';
|
|
@@ -2029,6 +2029,16 @@ class TelegramLogicService {
|
|
|
2029
2029
|
markdown,
|
|
2030
2030
|
});
|
|
2031
2031
|
});
|
|
2032
|
+
this.notifySignalInfo = trycatch(async (event) => {
|
|
2033
|
+
this.loggerService.log("telegramLogicService notifySignalInfo", {
|
|
2034
|
+
event,
|
|
2035
|
+
});
|
|
2036
|
+
const markdown = await this.telegramTemplateService.getSignalInfoMarkdown(event);
|
|
2037
|
+
await this.telegramWebService.publishNotify({
|
|
2038
|
+
symbol: event.symbol,
|
|
2039
|
+
markdown,
|
|
2040
|
+
});
|
|
2041
|
+
});
|
|
2032
2042
|
this.notifyCancelScheduled = async (event) => {
|
|
2033
2043
|
this.loggerService.log("telegramLogicService notifyCancelScheduled", {
|
|
2034
2044
|
event,
|
|
@@ -2116,8 +2126,11 @@ class TelegramLogicService {
|
|
|
2116
2126
|
return;
|
|
2117
2127
|
}
|
|
2118
2128
|
});
|
|
2129
|
+
const unSignalNotify = listenSignalNotify(async (event) => {
|
|
2130
|
+
await this.notifySignalInfo(event);
|
|
2131
|
+
});
|
|
2119
2132
|
const unConnect = () => this.connect.clear();
|
|
2120
|
-
const unListen = compose(() => unRisk(), () => unSignal(), () => unCommit(), () => unSync(), () => unConnect());
|
|
2133
|
+
const unListen = compose(() => unRisk(), () => unSignal(), () => unCommit(), () => unSync(), () => unSignalNotify(), () => unConnect());
|
|
2121
2134
|
return () => {
|
|
2122
2135
|
STOP_BOT_FN();
|
|
2123
2136
|
unListen();
|
|
@@ -2236,6 +2249,12 @@ class TelegramTemplateService {
|
|
|
2236
2249
|
});
|
|
2237
2250
|
return await RENDER_TEMPLATE_FN("close-pending.mustache", event, this);
|
|
2238
2251
|
};
|
|
2252
|
+
this.getSignalInfoMarkdown = async (event) => {
|
|
2253
|
+
this.loggerService.log("telegramTemplateService getSignalInfoMarkdown", {
|
|
2254
|
+
event,
|
|
2255
|
+
});
|
|
2256
|
+
return await RENDER_TEMPLATE_FN("signal-info.mustache", event, this);
|
|
2257
|
+
};
|
|
2239
2258
|
}
|
|
2240
2259
|
}
|
|
2241
2260
|
|
|
@@ -2806,7 +2825,7 @@ const main$d = async () => {
|
|
|
2806
2825
|
if (MODES.some((mode) => values[mode])) {
|
|
2807
2826
|
return;
|
|
2808
2827
|
}
|
|
2809
|
-
process.stdout.write(`@backtest-kit/cli ${"7.
|
|
2828
|
+
process.stdout.write(`@backtest-kit/cli ${"7.3.1"}\n`);
|
|
2810
2829
|
process.stdout.write("\n");
|
|
2811
2830
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
2812
2831
|
process.stdout.write("\n");
|
|
@@ -3470,7 +3489,7 @@ const main$1 = async () => {
|
|
|
3470
3489
|
if (!values.help) {
|
|
3471
3490
|
return;
|
|
3472
3491
|
}
|
|
3473
|
-
process.stdout.write(`@backtest-kit/cli ${"7.
|
|
3492
|
+
process.stdout.write(`@backtest-kit/cli ${"7.3.1"}\n\n`);
|
|
3474
3493
|
process.stdout.write(HELP_TEXT);
|
|
3475
3494
|
process.exit(0);
|
|
3476
3495
|
};
|
|
@@ -3484,7 +3503,7 @@ const main = async () => {
|
|
|
3484
3503
|
if (!values.version) {
|
|
3485
3504
|
return;
|
|
3486
3505
|
}
|
|
3487
|
-
process.stdout.write(`@backtest-kit/cli ${"7.
|
|
3506
|
+
process.stdout.write(`@backtest-kit/cli ${"7.3.1"}\n`);
|
|
3488
3507
|
process.exit(0);
|
|
3489
3508
|
};
|
|
3490
3509
|
main();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backtest-kit/cli",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.3.1",
|
|
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",
|
|
@@ -62,11 +62,11 @@
|
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@babel/plugin-transform-modules-umd": "7.27.1",
|
|
64
64
|
"@babel/standalone": "7.29.1",
|
|
65
|
-
"@backtest-kit/graph": "7.
|
|
66
|
-
"@backtest-kit/ollama": "7.
|
|
67
|
-
"@backtest-kit/pinets": "7.
|
|
68
|
-
"@backtest-kit/signals": "7.
|
|
69
|
-
"@backtest-kit/ui": "7.
|
|
65
|
+
"@backtest-kit/graph": "7.3.0",
|
|
66
|
+
"@backtest-kit/ollama": "7.3.0",
|
|
67
|
+
"@backtest-kit/pinets": "7.3.0",
|
|
68
|
+
"@backtest-kit/signals": "7.3.0",
|
|
69
|
+
"@backtest-kit/ui": "7.3.0",
|
|
70
70
|
"@rollup/plugin-replace": "6.0.3",
|
|
71
71
|
"@rollup/plugin-typescript": "11.1.6",
|
|
72
72
|
"@types/image-size": "0.7.0",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"@types/mustache": "4.2.6",
|
|
75
75
|
"@types/node": "22.9.0",
|
|
76
76
|
"@types/stack-trace": "0.0.33",
|
|
77
|
-
"backtest-kit": "7.
|
|
77
|
+
"backtest-kit": "7.3.0",
|
|
78
78
|
"glob": "11.0.1",
|
|
79
79
|
"markdown-it": "14.1.1",
|
|
80
80
|
"rimraf": "6.0.1",
|
|
@@ -89,12 +89,12 @@
|
|
|
89
89
|
"peerDependencies": {
|
|
90
90
|
"@babel/plugin-transform-modules-umd": "^7.27.1",
|
|
91
91
|
"@babel/standalone": "^7.29.1",
|
|
92
|
-
"@backtest-kit/graph": "^7.
|
|
93
|
-
"@backtest-kit/ollama": "^7.
|
|
94
|
-
"@backtest-kit/pinets": "^7.
|
|
95
|
-
"@backtest-kit/signals": "^7.
|
|
96
|
-
"@backtest-kit/ui": "^7.
|
|
97
|
-
"backtest-kit": "^7.
|
|
92
|
+
"@backtest-kit/graph": "^7.3.0",
|
|
93
|
+
"@backtest-kit/ollama": "^7.3.0",
|
|
94
|
+
"@backtest-kit/pinets": "^7.3.0",
|
|
95
|
+
"@backtest-kit/signals": "^7.3.0",
|
|
96
|
+
"@backtest-kit/ui": "^7.3.0",
|
|
97
|
+
"backtest-kit": "^7.3.0",
|
|
98
98
|
"markdown-it": "^14.1.1",
|
|
99
99
|
"typescript": "^5.0.0"
|
|
100
100
|
},
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"license": "ISC",
|
|
14
14
|
"type": "commonjs",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@backtest-kit/cli": "^7.
|
|
17
|
-
"@backtest-kit/graph": "^7.
|
|
18
|
-
"@backtest-kit/pinets": "^7.
|
|
19
|
-
"@backtest-kit/ui": "^7.
|
|
16
|
+
"@backtest-kit/cli": "^7.3.1",
|
|
17
|
+
"@backtest-kit/graph": "^7.3.0",
|
|
18
|
+
"@backtest-kit/pinets": "^7.3.0",
|
|
19
|
+
"@backtest-kit/ui": "^7.3.0",
|
|
20
20
|
"agent-swarm-kit": "^2.6.0",
|
|
21
|
-
"backtest-kit": "^7.
|
|
21
|
+
"backtest-kit": "^7.3.0",
|
|
22
22
|
"functools-kit": "^2.3.0",
|
|
23
23
|
"garch": "^1.2.3",
|
|
24
24
|
"get-moment-stamp": "^1.1.2",
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
**ℹ️ Signal Info**
|
|
2
|
+
|
|
3
|
+
**Symbol:** `{{symbol}}` ({{data.position}})
|
|
4
|
+
**Current:** `{{currentPrice}}`
|
|
5
|
+
**Entry:** `{{data.priceOpen}}`
|
|
6
|
+
**Orig Entry:** `{{data.originalPriceOpen}}`
|
|
7
|
+
**DCA Entries:** `{{data.totalEntries}}`
|
|
8
|
+
**Partials Done:** `{{data.totalPartials}}`
|
|
9
|
+
**Take Profit:** `{{data.priceTakeProfit}}`
|
|
10
|
+
**Stop Loss:** `{{data.priceStopLoss}}`
|
|
11
|
+
**Orig TP:** `{{data.originalPriceTakeProfit}}`
|
|
12
|
+
**Orig SL:** `{{data.originalPriceStopLoss}}`
|
|
13
|
+
**PnL:** {{data.pnl.pnlPercentage}}% ({{data.pnl.pnlCost}} / {{data.pnl.pnlEntries}})
|
|
14
|
+
**Peak Profit:** {{data.peakProfit.pnlPercentage}}% ({{data.peakProfit.pnlCost}} / {{data.peakProfit.pnlEntries}})
|
|
15
|
+
**Max Drawdown:** {{data.maxDrawdown.pnlPercentage}}% ({{data.maxDrawdown.pnlCost}} / {{data.maxDrawdown.pnlEntries}})
|
|
16
|
+
**Signal ID:** `{{data.id}}`
|
|
17
|
+
**Time:** `{{timestamp}}`
|
|
18
|
+
|
|
19
|
+
{{#backtest}}
|
|
20
|
+
_🧪 Backtest_
|
|
21
|
+
{{/backtest}}
|
package/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as functools_kit from 'functools-kit';
|
|
2
2
|
import * as BacktestKit from 'backtest-kit';
|
|
3
|
-
import { CandleInterval, TrailingTakeCommit, TrailingStopCommit, BreakevenCommit, PartialProfitCommit, PartialLossCommit, IStrategyTickResultScheduled, IStrategyTickResultCancelled, IStrategyTickResultOpened, IStrategyTickResultClosed, RiskContract, AverageBuyCommit, SignalOpenContract, SignalCloseContract, CancelScheduledCommit, ClosePendingCommit } from 'backtest-kit';
|
|
3
|
+
import { CandleInterval, TrailingTakeCommit, TrailingStopCommit, BreakevenCommit, PartialProfitCommit, PartialLossCommit, IStrategyTickResultScheduled, IStrategyTickResultCancelled, IStrategyTickResultOpened, IStrategyTickResultClosed, RiskContract, AverageBuyCommit, SignalOpenContract, SignalCloseContract, CancelScheduledCommit, ClosePendingCommit, SignalInfoContract } from 'backtest-kit';
|
|
4
4
|
import * as BacktestKitUi from '@backtest-kit/ui';
|
|
5
5
|
import * as BacktestKitGraph from '@backtest-kit/graph';
|
|
6
6
|
import * as BacktestKitOllama from '@backtest-kit/ollama';
|
|
@@ -311,6 +311,7 @@ declare class TelegramLogicService {
|
|
|
311
311
|
private notifyAverageBuy;
|
|
312
312
|
private notifySignalOpen;
|
|
313
313
|
private notifySignalClose;
|
|
314
|
+
private notifySignalInfo;
|
|
314
315
|
private notifyCancelScheduled;
|
|
315
316
|
private notifyClosePending;
|
|
316
317
|
connect: (() => () => void) & functools_kit.ISingleshotClearable<() => () => void>;
|
|
@@ -334,6 +335,7 @@ declare class TelegramTemplateService {
|
|
|
334
335
|
getSignalCloseMarkdown: (event: SignalCloseContract) => Promise<string>;
|
|
335
336
|
getCancelScheduledMarkdown: (event: CancelScheduledCommit) => Promise<string>;
|
|
336
337
|
getClosePendingMarkdown: (event: ClosePendingCommit) => Promise<string>;
|
|
338
|
+
getSignalInfoMarkdown: (event: SignalInfoContract) => Promise<string>;
|
|
337
339
|
}
|
|
338
340
|
|
|
339
341
|
declare class ModuleConnectionService {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776683700000,"open":75171.24,"high":75266.46,"low":75059.39,"close":75170.49,"volume":75.67269}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776684600000,"open":75170.49,"high":75287.88,"low":75083.22,"close":75215.78,"volume":60.00404}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776685500000,"open":75215.78,"high":75274.85,"low":75149.98,"close":75192.71,"volume":74.68719}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776686400000,"open":75192.72,"high":75393.55,"low":75075.04,"close":75354.1,"volume":114.58486}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776687300000,"open":75354.09,"high":75650,"low":75294.61,"close":75412.1,"volume":285.7306}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776688200000,"open":75412.1,"high":75450,"low":75043.86,"close":75215.38,"volume":196.21933}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776689100000,"open":75215.39,"high":75378.92,"low":75215.39,"close":75289.9,"volume":102.32005}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776690000000,"open":75289.91,"high":75350,"low":75120.05,"close":75221.38,"volume":160.83549}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776690900000,"open":75221.38,"high":75267.52,"low":75000,"close":75192.79,"volume":154.46322}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776691800000,"open":75192.8,"high":75434.41,"low":74859.11,"close":75227.04,"volume":281.95982}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776692700000,"open":75227.03,"high":75321.31,"low":74972.44,"close":75269.38,"volume":176.8324}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776693600000,"open":75269.37,"high":75300,"low":75030,"close":75070.99,"volume":191.65591}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776694500000,"open":75070.98,"high":75766.74,"low":75030.73,"close":75570.61,"volume":308.04668}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776695400000,"open":75570.61,"high":75669.82,"low":75200,"close":75329.8,"volume":190.41965}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776696300000,"open":75329.79,"high":75435.11,"low":74921.42,"close":75034.79,"volume":357.08704}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776697200000,"open":75034.79,"high":75081.9,"low":74702,"close":75063.13,"volume":354.98685}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776698100000,"open":75063.13,"high":75772.72,"low":75042.02,"close":75754.4,"volume":444.26314}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776699000000,"open":75754.39,"high":75754.39,"low":75516.65,"close":75580.57,"volume":255.58983}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776699900000,"open":75580.56,"high":75729.5,"low":75541.15,"close":75716.77,"volume":142.11278}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776700800000,"open":75716.78,"high":75723.99,"low":75409.72,"close":75419.01,"volume":200.89812}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776701700000,"open":75419.01,"high":75516.64,"low":75325.84,"close":75359.76,"volume":174.21177}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776702600000,"open":75359.77,"high":75568.81,"low":75311.25,"close":75481.83,"volume":168.4888}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776703500000,"open":75481.83,"high":75558.6,"low":75299.26,"close":75338.74,"volume":87.11836}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776704400000,"open":75338.75,"high":75683.46,"low":75289.92,"close":75644.87,"volume":146.38758}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776705300000,"open":75644.87,"high":75887.99,"low":75607.22,"close":75719.67,"volume":153.4664}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776706200000,"open":75719.67,"high":75844.58,"low":75607.83,"close":75762.03,"volume":155.23886}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776707100000,"open":75762.04,"high":75991.47,"low":75697.1,"close":75898.14,"volume":187.51761}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776708000000,"open":75898.14,"high":76300,"low":75898.14,"close":76275.24,"volume":482.8632}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776708900000,"open":76275.24,"high":76319.99,"low":76082.94,"close":76102,"volume":289.18541}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776709800000,"open":76102,"high":76268.78,"low":76001,"close":76173.07,"volume":356.45546}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776710700000,"open":76173.06,"high":76453.19,"low":76097.28,"close":76423.69,"volume":416.25896}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776711600000,"open":76423.69,"high":76486.67,"low":76302.98,"close":76333.75,"volume":416.51485}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776712500000,"open":76333.74,"high":76338.48,"low":76157.76,"close":76211.09,"volume":388.98859}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776713400000,"open":76211.09,"high":76257.79,"low":76154.49,"close":76250.57,"volume":66.67309}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776714300000,"open":76250.57,"high":76347.45,"low":76209.07,"close":76296.96,"volume":495.9459}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776715200000,"open":76296.97,"high":76372.86,"low":76113.07,"close":76333.2,"volume":456.65791}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776716100000,"open":76333.2,"high":76558.62,"low":76297.57,"close":76325.12,"volume":283.34142}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776717000000,"open":76325.12,"high":76325.13,"low":76199.94,"close":76250.81,"volume":373.19763}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776717900000,"open":76250.81,"high":76311.91,"low":76237.57,"close":76276.17,"volume":305.66054}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776718800000,"open":76276.18,"high":76357.2,"low":75918.07,"close":76004.79,"volume":222.08014}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776719700000,"open":76004.8,"high":76037.57,"low":75854.54,"close":75926.87,"volume":78.18997}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776720600000,"open":75926.87,"high":75945.05,"low":75784.05,"close":75888.73,"volume":147.87715}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776721500000,"open":75888.73,"high":75968.25,"low":75857.59,"close":75954.71,"volume":75.13506}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776722400000,"open":75954.72,"high":76143.71,"low":75954.72,"close":76067.97,"volume":66.9225}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776723300000,"open":76067.96,"high":76108.43,"low":75904.39,"close":75919.99,"volume":41.88771}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776724200000,"open":75920,"high":76066.87,"low":75904.83,"close":75991.55,"volume":45.0822}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776725100000,"open":75991.55,"high":75995.53,"low":75928.27,"close":75974.24,"volume":66.74929}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776726000000,"open":75974.24,"high":75974.24,"low":75727,"close":75753.42,"volume":140.13306}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776726900000,"open":75753.41,"high":75755.95,"low":75617.6,"close":75658,"volume":80.34183}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776727800000,"open":75657.99,"high":75806.8,"low":75636.75,"close":75775.52,"volume":30.94625}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776728700000,"open":75775.53,"high":75882.81,"low":75757.51,"close":75840.97,"volume":50.36362}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776729600000,"open":75840.97,"high":75924.42,"low":75700,"close":75867.21,"volume":91.7639}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776730500000,"open":75867.21,"high":75928.63,"low":75808.18,"close":75909.51,"volume":61.83046}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776731400000,"open":75909.51,"high":75993.22,"low":75861.58,"close":75881.61,"volume":132.02951}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776732300000,"open":75881.62,"high":76099.19,"low":75881.61,"close":76092.45,"volume":143.33444}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776733200000,"open":76092.46,"high":76263.4,"low":76024.72,"close":76129.94,"volume":171.28396}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776734100000,"open":76129.94,"high":76142.49,"low":75987.94,"close":76133.01,"volume":101.58182}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776735000000,"open":76133,"high":76226.4,"low":75990.82,"close":76072.2,"volume":62.03411}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776735900000,"open":76072.2,"high":76072.21,"low":75866.01,"close":75927.59,"volume":56.23604}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776736800000,"open":75927.58,"high":75932.7,"low":75703.61,"close":75731.99,"volume":93.53487}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776737700000,"open":75732,"high":75794.34,"low":75691.03,"close":75721.38,"volume":301.35013}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776738600000,"open":75721.39,"high":75797.94,"low":75600,"close":75603.87,"volume":76.01029}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776739500000,"open":75603.88,"high":75672.42,"low":75580,"close":75581.33,"volume":65.19812}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776740400000,"open":75581.33,"high":75635.78,"low":75474.77,"close":75568.07,"volume":108.48875}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776741300000,"open":75568.07,"high":75663.09,"low":75500.01,"close":75630.58,"volume":43.28465}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776742200000,"open":75630.57,"high":75720.84,"low":75492.67,"close":75556.81,"volume":47.02629}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776743100000,"open":75556.81,"high":75721.12,"low":75548.82,"close":75710.3,"volume":57.45181}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776744000000,"open":75710.31,"high":75763.07,"low":75611.05,"close":75611.05,"volume":55.57354}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776744900000,"open":75611.05,"high":75712.89,"low":75600,"close":75633.63,"volume":56.2265}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776745800000,"open":75633.63,"high":75729.46,"low":75623.2,"close":75711.19,"volume":83.72791}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776746700000,"open":75711.19,"high":75823.49,"low":75689.91,"close":75813.81,"volume":64.11478}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776747600000,"open":75813.8,"high":75970.68,"low":75804,"close":75900,"volume":76.53564}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776748500000,"open":75900,"high":75981.1,"low":75850,"close":75892.42,"volume":137.47972}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776749400000,"open":75892.41,"high":75892.42,"low":75829.79,"close":75841.62,"volume":36.78141}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776750300000,"open":75841.62,"high":75841.62,"low":75782.75,"close":75802,"volume":70.74181}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776751200000,"open":75802,"high":75817.54,"low":75734.15,"close":75788.54,"volume":61.47036}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776752100000,"open":75788.53,"high":75800.06,"low":75703.85,"close":75760.41,"volume":90.74332}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776753000000,"open":75760.41,"high":76129.95,"low":75760.41,"close":75992.06,"volume":196.79828}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776753900000,"open":75992.07,"high":76045.71,"low":75964.29,"close":75974.11,"volume":59.86143}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776754800000,"open":75974.12,"high":75982.13,"low":75814.26,"close":75955.87,"volume":62.28449}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776755700000,"open":75955.88,"high":76300,"low":75938,"close":76179.82,"volume":126.24421}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776756600000,"open":76179.82,"high":76300,"low":76028.7,"close":76194.84,"volume":644.42642}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776757500000,"open":76194.84,"high":76293.36,"low":76084.33,"close":76084.34,"volume":403.76936}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776758400000,"open":76084.34,"high":76211.79,"low":76063.98,"close":76132.47,"volume":138.29505}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776759300000,"open":76132.46,"high":76370,"low":76115.62,"close":76352.16,"volume":160.37389}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776760200000,"open":76352.15,"high":76496.68,"low":76250,"close":76458.78,"volume":163.12362}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776761100000,"open":76458.78,"high":76927.57,"low":76419.87,"close":76507.21,"volume":453.44527}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776762000000,"open":76507.21,"high":76587.82,"low":76349.82,"close":76476.68,"volume":171.60279}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776762900000,"open":76476.69,"high":76531,"low":76196.05,"close":76246.75,"volume":144.17409}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776763800000,"open":76246.76,"high":76322.27,"low":76155,"close":76301.26,"volume":171.16386}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"timestamp":1776764700000,"open":76301.25,"high":76381.61,"low":76250,"close":76362.77,"volume":95.73163}
|