@backtest-kit/cli 7.2.0 → 7.3.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.
Files changed (188) hide show
  1. package/build/index.cjs +23 -4
  2. package/build/index.mjs +24 -5
  3. package/package.json +13 -13
  4. package/template/signal-info.mustache +21 -0
  5. package/types.d.ts +3 -1
  6. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776683700000.json +0 -1
  7. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776684600000.json +0 -1
  8. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776685500000.json +0 -1
  9. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776686400000.json +0 -1
  10. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776687300000.json +0 -1
  11. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776688200000.json +0 -1
  12. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776689100000.json +0 -1
  13. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776690000000.json +0 -1
  14. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776690900000.json +0 -1
  15. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776691800000.json +0 -1
  16. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776692700000.json +0 -1
  17. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776693600000.json +0 -1
  18. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776694500000.json +0 -1
  19. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776695400000.json +0 -1
  20. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776696300000.json +0 -1
  21. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776697200000.json +0 -1
  22. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776698100000.json +0 -1
  23. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776699000000.json +0 -1
  24. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776699900000.json +0 -1
  25. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776700800000.json +0 -1
  26. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776701700000.json +0 -1
  27. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776702600000.json +0 -1
  28. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776703500000.json +0 -1
  29. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776704400000.json +0 -1
  30. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776705300000.json +0 -1
  31. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776706200000.json +0 -1
  32. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776707100000.json +0 -1
  33. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776708000000.json +0 -1
  34. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776708900000.json +0 -1
  35. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776709800000.json +0 -1
  36. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776710700000.json +0 -1
  37. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776711600000.json +0 -1
  38. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776712500000.json +0 -1
  39. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776713400000.json +0 -1
  40. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776714300000.json +0 -1
  41. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776715200000.json +0 -1
  42. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776716100000.json +0 -1
  43. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776717000000.json +0 -1
  44. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776717900000.json +0 -1
  45. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776718800000.json +0 -1
  46. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776719700000.json +0 -1
  47. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776720600000.json +0 -1
  48. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776721500000.json +0 -1
  49. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776722400000.json +0 -1
  50. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776723300000.json +0 -1
  51. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776724200000.json +0 -1
  52. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776725100000.json +0 -1
  53. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776726000000.json +0 -1
  54. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776726900000.json +0 -1
  55. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776727800000.json +0 -1
  56. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776728700000.json +0 -1
  57. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776729600000.json +0 -1
  58. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776730500000.json +0 -1
  59. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776731400000.json +0 -1
  60. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776732300000.json +0 -1
  61. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776733200000.json +0 -1
  62. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776734100000.json +0 -1
  63. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776735000000.json +0 -1
  64. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776735900000.json +0 -1
  65. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776736800000.json +0 -1
  66. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776737700000.json +0 -1
  67. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776738600000.json +0 -1
  68. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776739500000.json +0 -1
  69. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776740400000.json +0 -1
  70. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776741300000.json +0 -1
  71. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776742200000.json +0 -1
  72. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776743100000.json +0 -1
  73. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776744000000.json +0 -1
  74. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776744900000.json +0 -1
  75. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776745800000.json +0 -1
  76. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776746700000.json +0 -1
  77. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776747600000.json +0 -1
  78. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776748500000.json +0 -1
  79. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776749400000.json +0 -1
  80. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776750300000.json +0 -1
  81. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776751200000.json +0 -1
  82. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776752100000.json +0 -1
  83. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776753000000.json +0 -1
  84. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776753900000.json +0 -1
  85. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776754800000.json +0 -1
  86. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776755700000.json +0 -1
  87. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776756600000.json +0 -1
  88. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776757500000.json +0 -1
  89. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776758400000.json +0 -1
  90. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776759300000.json +0 -1
  91. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776760200000.json +0 -1
  92. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776761100000.json +0 -1
  93. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776762000000.json +0 -1
  94. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776762900000.json +0 -1
  95. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776763800000.json +0 -1
  96. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776764700000.json +0 -1
  97. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776765600000.json +0 -1
  98. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776766500000.json +0 -1
  99. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776767400000.json +0 -1
  100. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776768300000.json +0 -1
  101. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776769200000.json +0 -1
  102. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776770100000.json +0 -1
  103. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776771000000.json +0 -1
  104. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776771900000.json +0 -1
  105. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776772800000.json +0 -1
  106. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776773700000.json +0 -1
  107. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776774600000.json +0 -1
  108. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776775500000.json +0 -1
  109. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776776400000.json +0 -1
  110. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776777300000.json +0 -1
  111. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776778200000.json +0 -1
  112. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776779100000.json +0 -1
  113. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776780000000.json +0 -1
  114. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776780900000.json +0 -1
  115. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776781800000.json +0 -1
  116. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776782700000.json +0 -1
  117. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776783600000.json +0 -1
  118. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776784500000.json +0 -1
  119. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776785400000.json +0 -1
  120. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776786300000.json +0 -1
  121. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776787200000.json +0 -1
  122. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776788100000.json +0 -1
  123. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776789000000.json +0 -1
  124. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776789900000.json +0 -1
  125. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776790800000.json +0 -1
  126. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776791700000.json +0 -1
  127. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776792600000.json +0 -1
  128. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776793500000.json +0 -1
  129. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776794400000.json +0 -1
  130. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776795300000.json +0 -1
  131. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776796200000.json +0 -1
  132. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776797100000.json +0 -1
  133. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776798000000.json +0 -1
  134. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776798900000.json +0 -1
  135. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776799800000.json +0 -1
  136. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776800700000.json +0 -1
  137. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776801600000.json +0 -1
  138. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776802500000.json +0 -1
  139. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776803400000.json +0 -1
  140. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776804300000.json +0 -1
  141. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776805200000.json +0 -1
  142. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776806100000.json +0 -1
  143. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776807000000.json +0 -1
  144. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776807900000.json +0 -1
  145. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776808800000.json +0 -1
  146. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776809700000.json +0 -1
  147. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776810600000.json +0 -1
  148. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776811500000.json +0 -1
  149. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776812400000.json +0 -1
  150. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776813300000.json +0 -1
  151. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776814200000.json +0 -1
  152. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776815100000.json +0 -1
  153. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776816000000.json +0 -1
  154. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776816900000.json +0 -1
  155. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776817800000.json +0 -1
  156. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776818700000.json +0 -1
  157. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776819600000.json +0 -1
  158. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776820500000.json +0 -1
  159. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776821400000.json +0 -1
  160. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776822300000.json +0 -1
  161. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776823200000.json +0 -1
  162. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776824100000.json +0 -1
  163. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776825000000.json +0 -1
  164. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776825900000.json +0 -1
  165. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776826800000.json +0 -1
  166. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776827700000.json +0 -1
  167. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776828600000.json +0 -1
  168. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776829500000.json +0 -1
  169. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776830400000.json +0 -1
  170. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776831300000.json +0 -1
  171. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776832200000.json +0 -1
  172. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776833100000.json +0 -1
  173. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776834000000.json +0 -1
  174. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776834900000.json +0 -1
  175. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776835800000.json +0 -1
  176. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776836700000.json +0 -1
  177. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776837600000.json +0 -1
  178. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776838500000.json +0 -1
  179. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776839400000.json +0 -1
  180. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776840300000.json +0 -1
  181. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776841200000.json +0 -1
  182. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776842100000.json +0 -1
  183. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776843000000.json +0 -1
  184. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776843900000.json +0 -1
  185. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776844800000.json +0 -1
  186. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776845700000.json +0 -1
  187. package/build/dump/data/candle/default_exchange/BTCUSDT/15m/1776846600000.json +0 -1
  188. 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.2.0"}\n`);
2857
+ process.stdout.write(`@backtest-kit/cli ${"7.3.0"}\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.2.0"}\n\n`);
3521
+ process.stdout.write(`@backtest-kit/cli ${"7.3.0"}\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.2.0"}\n`);
3535
+ process.stdout.write(`@backtest-kit/cli ${"7.3.0"}\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.2.0"}\n`);
2828
+ process.stdout.write(`@backtest-kit/cli ${"7.3.0"}\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.2.0"}\n\n`);
3492
+ process.stdout.write(`@backtest-kit/cli ${"7.3.0"}\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.2.0"}\n`);
3506
+ process.stdout.write(`@backtest-kit/cli ${"7.3.0"}\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.2.0",
3
+ "version": "7.3.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",
@@ -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.2.0",
66
- "@backtest-kit/ollama": "7.2.0",
67
- "@backtest-kit/pinets": "7.2.0",
68
- "@backtest-kit/signals": "7.2.0",
69
- "@backtest-kit/ui": "7.2.0",
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.2.0",
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.2.0",
93
- "@backtest-kit/ollama": "^7.2.0",
94
- "@backtest-kit/pinets": "^7.2.0",
95
- "@backtest-kit/signals": "^7.2.0",
96
- "@backtest-kit/ui": "^7.2.0",
97
- "backtest-kit": "^7.2.0",
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
  },
@@ -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}
@@ -1 +0,0 @@
1
- {"timestamp":1776765600000,"open":76362.78,"high":76502.72,"low":76349.59,"close":76438,"volume":94.09326}
@@ -1 +0,0 @@
1
- {"timestamp":1776766500000,"open":76437.99,"high":76574,"low":76373.03,"close":76511.72,"volume":150.95596}
@@ -1 +0,0 @@
1
- {"timestamp":1776767400000,"open":76511.73,"high":76598.56,"low":76471.27,"close":76572.11,"volume":65.36969}
@@ -1 +0,0 @@
1
- {"timestamp":1776768300000,"open":76572.1,"high":76866.55,"low":76550.86,"close":76746.41,"volume":225.92352}
@@ -1 +0,0 @@
1
- {"timestamp":1776769200000,"open":76746.41,"high":76750.68,"low":76344.34,"close":76405.37,"volume":284.49354}