@backtest-kit/cli 9.6.0 → 9.7.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 (34) hide show
  1. package/README.md +1854 -1738
  2. package/build/index.cjs +268 -204
  3. package/build/index.mjs +268 -204
  4. package/config/notification.config.mjs +13 -13
  5. package/config/symbol.config.mjs +460 -460
  6. package/docker/.env.example +2 -2
  7. package/docker/README.md +1 -0
  8. package/docker/content/feb_2026/feb_2026.strategy.ts +11 -11
  9. package/docker/content/feb_2026/modules/backtest.module.ts +83 -83
  10. package/docker/docker-compose.yaml +46 -46
  11. package/docker/package.json +38 -38
  12. package/docker/tsconfig.json +36 -36
  13. package/package.json +126 -126
  14. package/template/average-buy.mustache +22 -22
  15. package/template/breakeven.mustache +21 -21
  16. package/template/cancel-scheduled.mustache +14 -14
  17. package/template/cancelled.mustache +21 -21
  18. package/template/close-pending.mustache +16 -16
  19. package/template/closed.mustache +23 -23
  20. package/template/opened.mustache +22 -22
  21. package/template/partial-loss.mustache +22 -22
  22. package/template/partial-profit.mustache +22 -22
  23. package/template/project/README.md +1 -0
  24. package/template/project/config/symbol.config.ts +460 -460
  25. package/template/project/package.mustache +28 -28
  26. package/template/risk.mustache +19 -19
  27. package/template/scheduled.mustache +22 -22
  28. package/template/signal-close.mustache +22 -22
  29. package/template/signal-info.mustache +20 -20
  30. package/template/signal-open.mustache +22 -22
  31. package/template/source/CLAUDE.md +160 -160
  32. package/template/trailing-stop.mustache +21 -21
  33. package/template/trailing-take.mustache +21 -21
  34. package/types.d.ts +1 -6
@@ -1,28 +1,28 @@
1
- {
2
- "name": "{{PROJECT_NAME}}",
3
- "version": "1.0.0",
4
- "description": "Backtest Kit trading bot project",
5
- "main": "index.js",
6
- "homepage": "https://backtest-kit.github.io/documents/article_07_ai_news_trading_signals.html",
7
- "scripts": {
8
- "start": "node ./node_modules/@backtest-kit/cli/build/index.mjs",
9
- "sync:lib": "node ./scripts/fetch_docs.mjs"
10
- },
11
- "keywords": [],
12
- "author": "",
13
- "license": "ISC",
14
- "type": "commonjs",
15
- "dependencies": {
16
- "@backtest-kit/cli": "^9.6.0",
17
- "@backtest-kit/graph": "^9.6.0",
18
- "@backtest-kit/pinets": "^9.6.0",
19
- "@backtest-kit/ui": "^9.6.0",
20
- "agent-swarm-kit": "^2.6.0",
21
- "backtest-kit": "^9.6.0",
22
- "functools-kit": "^2.3.0",
23
- "garch": "^1.2.3",
24
- "get-moment-stamp": "^1.1.2",
25
- "ollama": "^0.6.3",
26
- "volume-anomaly": "^1.2.3"
27
- }
28
- }
1
+ {
2
+ "name": "{{PROJECT_NAME}}",
3
+ "version": "1.0.0",
4
+ "description": "Backtest Kit trading bot project",
5
+ "main": "index.js",
6
+ "homepage": "https://backtest-kit.github.io/documents/article_07_ai_news_trading_signals.html",
7
+ "scripts": {
8
+ "start": "node ./node_modules/@backtest-kit/cli/build/index.mjs",
9
+ "sync:lib": "node ./scripts/fetch_docs.mjs"
10
+ },
11
+ "keywords": [],
12
+ "author": "",
13
+ "license": "ISC",
14
+ "type": "commonjs",
15
+ "dependencies": {
16
+ "@backtest-kit/cli": "^9.7.0",
17
+ "@backtest-kit/graph": "^9.7.0",
18
+ "@backtest-kit/pinets": "^9.7.0",
19
+ "@backtest-kit/ui": "^9.7.0",
20
+ "agent-swarm-kit": "^2.6.0",
21
+ "backtest-kit": "^9.7.0",
22
+ "functools-kit": "^2.3.0",
23
+ "garch": "^1.2.3",
24
+ "get-moment-stamp": "^1.1.2",
25
+ "ollama": "^0.6.3",
26
+ "volume-anomaly": "^1.2.3"
27
+ }
28
+ }
@@ -1,20 +1,20 @@
1
- **⛔ Risk Rejected**
2
-
3
- **Symbol:** `{{symbol}}` ({{currentSignal.position}})
4
-
5
- **Current:** `{{currentPrice}}`
6
- **Entry:** `{{currentSignal.priceOpen}}`
7
- **Take Profit:** `{{currentSignal.priceTakeProfit}}`
8
- **Stop Loss:** `{{currentSignal.priceStopLoss}}`
9
- **TTL:** {{currentSignal.minuteEstimatedTime}} min
10
- **Active Positions:** {{activePositionCount}}
11
- {{#currentSignal.note}}**Note:** {{currentSignal.note}}
12
- {{/currentSignal.note}}{{#rejectionId}}**Rejection ID:** `{{rejectionId}}`
13
- {{/rejectionId}}**Time:** `{{timestamp}}`
14
-
15
- **Reason:**
16
- {{rejectionNote}}
17
-
18
- {{#backtest}}
19
- _🧪 Backtest_
1
+ **⛔ Risk Rejected**
2
+
3
+ **Symbol:** `{{symbol}}` ({{currentSignal.position}})
4
+
5
+ **Current:** `{{currentPrice}}`
6
+ **Entry:** `{{currentSignal.priceOpen}}`
7
+ **Take Profit:** `{{currentSignal.priceTakeProfit}}`
8
+ **Stop Loss:** `{{currentSignal.priceStopLoss}}`
9
+ **TTL:** {{currentSignal.minuteEstimatedTime}} min
10
+ **Active Positions:** {{activePositionCount}}
11
+ {{#currentSignal.note}}**Note:** {{currentSignal.note}}
12
+ {{/currentSignal.note}}{{#rejectionId}}**Rejection ID:** `{{rejectionId}}`
13
+ {{/rejectionId}}**Time:** `{{timestamp}}`
14
+
15
+ **Reason:**
16
+ {{rejectionNote}}
17
+
18
+ {{#backtest}}
19
+ _🧪 Backtest_
20
20
  {{/backtest}}
@@ -1,23 +1,23 @@
1
- **📅 Signal Scheduled**
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
+ **📅 Signal Scheduled**
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
- **📭 Order Filled (Close)**
2
-
3
- **Symbol:** `{{symbol}}` ({{position}})
4
-
5
- **Reason:** `{{closeReason}}`
6
- **Current:** `{{currentPrice}}`
7
- **Entry:** `{{priceOpen}}`
8
- **Orig Entry:** `{{originalPriceOpen}}`
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
+ **📭 Order Filled (Close)**
2
+
3
+ **Symbol:** `{{symbol}}` ({{position}})
4
+
5
+ **Reason:** `{{closeReason}}`
6
+ **Current:** `{{currentPrice}}`
7
+ **Entry:** `{{priceOpen}}`
8
+ **Orig Entry:** `{{originalPriceOpen}}`
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,21 +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_
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
21
  {{/backtest}}
@@ -1,23 +1,23 @@
1
- **📬 Order Filled (Open)**
2
-
3
- **Symbol:** `{{symbol}}` ({{position}})
4
-
5
- **Current:** `{{currentPrice}}`
6
- **Entry:** `{{priceOpen}}`
7
- **Orig Entry:** `{{originalPriceOpen}}`
8
- **Cost:** `{{cost}}`
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
+ **📬 Order Filled (Open)**
2
+
3
+ **Symbol:** `{{symbol}}` ({{position}})
4
+
5
+ **Current:** `{{currentPrice}}`
6
+ **Entry:** `{{priceOpen}}`
7
+ **Orig Entry:** `{{originalPriceOpen}}`
8
+ **Cost:** `{{cost}}`
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,160 +1,160 @@
1
- ## Руководство
2
-
3
- > Вместо того чтобы брутфорсить входные параметры индикатора как тупая обезьяна — Я ЗАСТАВЛЯЮ ТЕБЯ изучить интернет и дамп свечей в поисках прибыльной концепции применимой к текущему состоянию рынка. Если попытка провалилась и ты не понимаешь точно почему — создай новую торговую стратегию основанную на другом принципе. Минимальные правки допустимы только когда результат уже виден и речь идёт о его улучшении. Deep research обязателен - и по дампу свечей, и по интернет-источникам. Не читай последние 100 свечей вместо полного таймфрейма делая вид что сделал работу, это халтура. Нужно внимательно взвесить все источники не экономя токены максимально многословно
4
-
5
- ### Как писать стратегию
6
-
7
- **Как не надо**
8
-
9
- - Не нужно читать все файлы проекта забивая контекст.
10
-
11
- Стратегию пишем простыми `.pine` файлами, команда для их запуска ниже.
12
-
13
- - Не нужно перебирать через брутфорс
14
-
15
- Самое худшее что можно сделать - начать инкрементально писать в существующий файл проекта. Это так не работает, нужен анализ рынка а не работа ради работы
16
-
17
- - Не нужно опускать эффективность ради универсальности
18
-
19
- Рынок изменчив, делая универсальное решение ты теряешь оптимизацию, которая и есть конкурентное преимущество, приносящее прибыль единомоментно
20
-
21
- - Не нужно писать `.pine` с сайд эффектами
22
-
23
- Тебе не нужны `var` и `na` в pinescript, нужно вычислять все значения на каждую итерацию, так больше вероятность отлова ошибки или непредсказуемого поведения до запуска в production. Делай код проще для понимания, не делай преждевременную оптимизацию
24
-
25
- - Не нужно использовать хаки в коде торговой стратегии
26
-
27
- Нельзя маскировать под ATR отсутствие SL, когда выход из позиции вечно сдвигается относительно close цены на каждую итерацию. Критерии trailing должны быть конечны, нельзя вечно сдвигать stop loss рассчитывая на отскок цены или падение. Нужно избегать HOLD в каком либо виде
28
-
29
- - Не нужно делать стратегии которые делают один сигнал раз в несколько дней
30
-
31
- Три прибыльных сигнала это не успешная торговая стратегия а удача. Чтобы оценить торговую стратегию статичтически нужно получить хотя бы один сигнал в день
32
-
33
- **Как надо**
34
-
35
- - Любая стратегия пишется на временной промежуток одного календарного месяца
36
-
37
- Нужно соблюсти паттерн нейминга, иначе отказаться работать. Деньги находятся в оптимизации под текущие условия рынка, бектест на два месяца и более не имеет смысл математически так как конечная сумма сведет прибыль к нулю с потерей комиссий whipsaw
38
-
39
- * `./math/jan_2026.pine`, `./content/jan_2026.strategy.ts`
40
- * `./math/feb_2026.pine`, `./content/feb_2026.strategy.ts`
41
- * `./math/march_2026.pine`, `./content/march_2026.strategy.ts`
42
- * `./math/apr_2026.pine`, `./content/apr_2026.strategy.ts`
43
- * `./math/may_2026.pine`, `./content/may_2026.strategy.ts`
44
-
45
- - Прочитать новостной фон за выбранный временной промежуток
46
-
47
- Акцент ВСЕГДА нужно делать на негативных новостях. Если просто искать цену биткоина, ты получишь маркетинговый треш. Если искать аналитику ты получишь SEO мусор. Нужны запросы вида:
48
-
49
- * Bitcoin новости негативные март 2026 цена падение регуляторные проблемы…
50
- * биткоин цена 5 февраля 2024 текущий уровень прогноз аналитики BTC
51
- * биткоин негативные новости февраль 2024 проблемы regulator crackdown bitcoin
52
- * биткоин негативные новости март 2026 регуляторные проблемы запреты
53
- * биткоин проблемы безопасность хакеры мошенничество регулирование негативные новости
54
-
55
- - Создать `--dump` который выведет свечи
56
-
57
- Тебе нужно посмотреть где на рынке реально есть деньги. Узнать общий тренд: если он медвежий нужна защита от LONG. Если он бычий нужна защита от SHORT. Может быть кратковременный отскок или паника связанная с геополитическими новостями
58
-
59
- - На рынке может быть боковик
60
-
61
- Есть случаи когда позицию не нужно открывать вовсе, твой анализ должен это включать
62
-
63
- - TP/SL должны быть динамичными, но не скальпинг
64
-
65
- Биржа взымает 0.2 процента за вход и 0.2 процента за выход. Ты можешь думать что стратегия прибыльная, но это whipsaw. Минимальный TP: 1%
66
-
67
- - Не нужно делать стратегию на все случаи жизни
68
-
69
- Мне нужно понять где деньги на бирже только в установленный временной промежуток: если стратегия перестанет приносить деньги я просто попрошу тебя сделать анализ ещё раз
70
-
71
- - Не нужно делать HOLD стратегии
72
-
73
- Мне нужно именно найти где на рынке находятся деньги, а не высиживать позицию в надежде на удачу. Критерий где деньги должны быть отражены формулой которая находит эффективные точки входа сразу приводящие к прибыли
74
-
75
- - Не гадай стратегию через брут форс
76
-
77
- Проверяй разные стратегии с различными концепциями. Нельзя зацикливаться на одной стратегии, так как это увеличит разве что количество заработка, а мне нужен другой уровень заработка. Мне нужна разработка концепций основанная на фундаментальных данных.
78
-
79
- ### Дамп свечей рынка
80
-
81
- Файл `BTCUSDT_500_15m_1772236800000.jsonl` будет создан в `./dump/BTCUSDT_500_15m_1772236800000.jsonl`
82
-
83
- ```
84
- npm start -- --dump --timeframe 15m --limit 500 --when "2026-02-28T00:00:00.000Z" --jsonl
85
- ```
86
-
87
- ### Запуск `.pine` файлов
88
-
89
- Файл `impulse_trend_15m.jsonl` будет создан в `./math/dump/impulse_trend_15m.jsonl`
90
-
91
- ```
92
- npm start -- --pine ./math/impulse_trend_15m.pine --timeframe 15m --limit 500 --when "2026-02-28T00:00:00.000Z" --jsonl
93
- ```
94
-
95
- ### Алгоритм
96
-
97
- **Планирование работы**
98
-
99
- 1. Прочитать файл `.pine` за предидущий месяц если он есть
100
-
101
- 2. Прочитать новости из интернета за текущий месяц с акцентом на негативные
102
-
103
- 3. Сопоставить новостной фон с дампом свечей на предмет корреляции. Источники новостей должны влиять на дамп свечей за выбранный временной промежуток: отскок цены, боковик, нейтральный тренд, падение и рост.
104
-
105
- 4. Понять почему файл за предидущий месяц перестал работать, интерпретировав его логику в контексте нового новостного фона
106
-
107
- 5. Помимо новостей сделать ревью дампа свечей отдельно: оценить волательность, market gap, объемы рынка, риски
108
-
109
- **Написание стратегии**
110
-
111
- 1. Создать НОВЫЕ файлы для текущего месяца и написать их с нуля. Важно не делать копипасту и не пытаться перебрать параметры брутфорсом. Новый месяц - новая стратегия
112
-
113
- 2. Запустить `.pine` файл и посмотреть вывод. Критерий приёмки работ это прибыльная торговая стратегия а не код ради кода. Не останавливать работу пока не будет получена прибыль
114
-
115
- 3. После получения прибыльной стратегии ОБЯЗАТЕЛЬНО сохранить базу знаний на основе который была сделана торговая стратегия в markdown файл с фундаментальным анализом рынка следуя паттерну нейминга
116
-
117
- * `./report/jan_2026.md`
118
- * `./report/feb_2026.md`
119
- * `./report/march_2026.md`
120
-
121
- 4. Отдельным агентом запустить код ревью
122
-
123
- Код ревью должно проверить стратегию на предмет вечного холда без строгих условий выхода. Например, вечно сдвигающийся trailing SL относительно close последней свечи. Мне нужно не просто заработать деньги, а найти где деньги в рынке математически, чтобы избежать высоких просадок ликвидности портфеляы
124
-
125
- 5. Если код ревью не пройдено, учесть ошибки и делать стратегию заного с нуля по этому руководству
126
-
127
- ### Рекомендация
128
-
129
- - Искать рекомендации в интернете
130
-
131
- Я приветствую не перебирать варианты через brut force, а заимствовать торговую идею у других людей через поиск в интернете. Важно не только найти чужую задумку, но и проверить на деле действительно ли она прибыльна
132
-
133
- - Анализировать структуру рынка
134
-
135
- Посмотрев свечи можно понять структуры, с которыми мы сталкиваемся в этом месяце: боковик, нейтральный тренд, бычий тренд, медвежий тренд, высокая волатильность. Нужно продумать как определить и как действовать при каждом случае
136
-
137
- - Использовать TODO list
138
-
139
- В этом руководстве много шагов. Нужно сформировать TODO список и двигаться по шагам, финализируя завершение каждого пункта. В todo list включи как поиск новостей, так и анализ свечей `--dump`, анализ стратегии pine, максимально детально
140
-
141
- - Использовать deep research
142
-
143
- Руководство подразумевает умный анализ рынка, а не код ради кода. Делай вдумчиво не экономя токены
144
-
145
- - Думай логически
146
-
147
- Цель 1% нельзя достигнуть менее чем за 4 часа. Цель ниже 1% не интересна так как slippage выбъет позицию при эффективном Risk/Reward. Мне не нужна отписка, мне нужен анализ рынка
148
-
149
- ### Результат
150
-
151
- Файл `.pine` без маркетингого треша
152
-
153
- - Никаких TP=0.5% SL=-10%, грамотный риск менеджемент который исключает HOLD на удачу
154
- - Явно описаные и прокоментированные режимы работы со ссылками на временной промежуток на котором тестировались
155
- - Честный подсчёт прибыльности стратегии комментарием в шапке
156
- - Честный подсчёт количества сигналов в среднем за день в шапке
157
- - Честный подсчёт `sharpeRatio`, `avgPnl`, `stdDev` в шапке
158
- - Один и более сигнал в день, лучше больше
159
-
160
- Если заработать нельзя не пытайся подогнать результат, напиши как есть не преукрашивая картину
1
+ ## Руководство
2
+
3
+ > Вместо того чтобы брутфорсить входные параметры индикатора как тупая обезьяна — Я ЗАСТАВЛЯЮ ТЕБЯ изучить интернет и дамп свечей в поисках прибыльной концепции применимой к текущему состоянию рынка. Если попытка провалилась и ты не понимаешь точно почему — создай новую торговую стратегию основанную на другом принципе. Минимальные правки допустимы только когда результат уже виден и речь идёт о его улучшении. Deep research обязателен - и по дампу свечей, и по интернет-источникам. Не читай последние 100 свечей вместо полного таймфрейма делая вид что сделал работу, это халтура. Нужно внимательно взвесить все источники не экономя токены максимально многословно
4
+
5
+ ### Как писать стратегию
6
+
7
+ **Как не надо**
8
+
9
+ - Не нужно читать все файлы проекта забивая контекст.
10
+
11
+ Стратегию пишем простыми `.pine` файлами, команда для их запуска ниже.
12
+
13
+ - Не нужно перебирать через брутфорс
14
+
15
+ Самое худшее что можно сделать - начать инкрементально писать в существующий файл проекта. Это так не работает, нужен анализ рынка а не работа ради работы
16
+
17
+ - Не нужно опускать эффективность ради универсальности
18
+
19
+ Рынок изменчив, делая универсальное решение ты теряешь оптимизацию, которая и есть конкурентное преимущество, приносящее прибыль единомоментно
20
+
21
+ - Не нужно писать `.pine` с сайд эффектами
22
+
23
+ Тебе не нужны `var` и `na` в pinescript, нужно вычислять все значения на каждую итерацию, так больше вероятность отлова ошибки или непредсказуемого поведения до запуска в production. Делай код проще для понимания, не делай преждевременную оптимизацию
24
+
25
+ - Не нужно использовать хаки в коде торговой стратегии
26
+
27
+ Нельзя маскировать под ATR отсутствие SL, когда выход из позиции вечно сдвигается относительно close цены на каждую итерацию. Критерии trailing должны быть конечны, нельзя вечно сдвигать stop loss рассчитывая на отскок цены или падение. Нужно избегать HOLD в каком либо виде
28
+
29
+ - Не нужно делать стратегии которые делают один сигнал раз в несколько дней
30
+
31
+ Три прибыльных сигнала это не успешная торговая стратегия а удача. Чтобы оценить торговую стратегию статичтически нужно получить хотя бы один сигнал в день
32
+
33
+ **Как надо**
34
+
35
+ - Любая стратегия пишется на временной промежуток одного календарного месяца
36
+
37
+ Нужно соблюсти паттерн нейминга, иначе отказаться работать. Деньги находятся в оптимизации под текущие условия рынка, бектест на два месяца и более не имеет смысл математически так как конечная сумма сведет прибыль к нулю с потерей комиссий whipsaw
38
+
39
+ * `./math/jan_2026.pine`, `./content/jan_2026.strategy.ts`
40
+ * `./math/feb_2026.pine`, `./content/feb_2026.strategy.ts`
41
+ * `./math/march_2026.pine`, `./content/march_2026.strategy.ts`
42
+ * `./math/apr_2026.pine`, `./content/apr_2026.strategy.ts`
43
+ * `./math/may_2026.pine`, `./content/may_2026.strategy.ts`
44
+
45
+ - Прочитать новостной фон за выбранный временной промежуток
46
+
47
+ Акцент ВСЕГДА нужно делать на негативных новостях. Если просто искать цену биткоина, ты получишь маркетинговый треш. Если искать аналитику ты получишь SEO мусор. Нужны запросы вида:
48
+
49
+ * Bitcoin новости негативные март 2026 цена падение регуляторные проблемы…
50
+ * биткоин цена 5 февраля 2024 текущий уровень прогноз аналитики BTC
51
+ * биткоин негативные новости февраль 2024 проблемы regulator crackdown bitcoin
52
+ * биткоин негативные новости март 2026 регуляторные проблемы запреты
53
+ * биткоин проблемы безопасность хакеры мошенничество регулирование негативные новости
54
+
55
+ - Создать `--dump` который выведет свечи
56
+
57
+ Тебе нужно посмотреть где на рынке реально есть деньги. Узнать общий тренд: если он медвежий нужна защита от LONG. Если он бычий нужна защита от SHORT. Может быть кратковременный отскок или паника связанная с геополитическими новостями
58
+
59
+ - На рынке может быть боковик
60
+
61
+ Есть случаи когда позицию не нужно открывать вовсе, твой анализ должен это включать
62
+
63
+ - TP/SL должны быть динамичными, но не скальпинг
64
+
65
+ Биржа взымает 0.2 процента за вход и 0.2 процента за выход. Ты можешь думать что стратегия прибыльная, но это whipsaw. Минимальный TP: 1%
66
+
67
+ - Не нужно делать стратегию на все случаи жизни
68
+
69
+ Мне нужно понять где деньги на бирже только в установленный временной промежуток: если стратегия перестанет приносить деньги я просто попрошу тебя сделать анализ ещё раз
70
+
71
+ - Не нужно делать HOLD стратегии
72
+
73
+ Мне нужно именно найти где на рынке находятся деньги, а не высиживать позицию в надежде на удачу. Критерий где деньги должны быть отражены формулой которая находит эффективные точки входа сразу приводящие к прибыли
74
+
75
+ - Не гадай стратегию через брут форс
76
+
77
+ Проверяй разные стратегии с различными концепциями. Нельзя зацикливаться на одной стратегии, так как это увеличит разве что количество заработка, а мне нужен другой уровень заработка. Мне нужна разработка концепций основанная на фундаментальных данных.
78
+
79
+ ### Дамп свечей рынка
80
+
81
+ Файл `BTCUSDT_500_15m_1772236800000.jsonl` будет создан в `./dump/BTCUSDT_500_15m_1772236800000.jsonl`
82
+
83
+ ```
84
+ npm start -- --dump --timeframe 15m --limit 500 --when "2026-02-28T00:00:00.000Z" --jsonl
85
+ ```
86
+
87
+ ### Запуск `.pine` файлов
88
+
89
+ Файл `impulse_trend_15m.jsonl` будет создан в `./math/dump/impulse_trend_15m.jsonl`
90
+
91
+ ```
92
+ npm start -- --pine ./math/impulse_trend_15m.pine --timeframe 15m --limit 500 --when "2026-02-28T00:00:00.000Z" --jsonl
93
+ ```
94
+
95
+ ### Алгоритм
96
+
97
+ **Планирование работы**
98
+
99
+ 1. Прочитать файл `.pine` за предидущий месяц если он есть
100
+
101
+ 2. Прочитать новости из интернета за текущий месяц с акцентом на негативные
102
+
103
+ 3. Сопоставить новостной фон с дампом свечей на предмет корреляции. Источники новостей должны влиять на дамп свечей за выбранный временной промежуток: отскок цены, боковик, нейтральный тренд, падение и рост.
104
+
105
+ 4. Понять почему файл за предидущий месяц перестал работать, интерпретировав его логику в контексте нового новостного фона
106
+
107
+ 5. Помимо новостей сделать ревью дампа свечей отдельно: оценить волательность, market gap, объемы рынка, риски
108
+
109
+ **Написание стратегии**
110
+
111
+ 1. Создать НОВЫЕ файлы для текущего месяца и написать их с нуля. Важно не делать копипасту и не пытаться перебрать параметры брутфорсом. Новый месяц - новая стратегия
112
+
113
+ 2. Запустить `.pine` файл и посмотреть вывод. Критерий приёмки работ это прибыльная торговая стратегия а не код ради кода. Не останавливать работу пока не будет получена прибыль
114
+
115
+ 3. После получения прибыльной стратегии ОБЯЗАТЕЛЬНО сохранить базу знаний на основе который была сделана торговая стратегия в markdown файл с фундаментальным анализом рынка следуя паттерну нейминга
116
+
117
+ * `./report/jan_2026.md`
118
+ * `./report/feb_2026.md`
119
+ * `./report/march_2026.md`
120
+
121
+ 4. Отдельным агентом запустить код ревью
122
+
123
+ Код ревью должно проверить стратегию на предмет вечного холда без строгих условий выхода. Например, вечно сдвигающийся trailing SL относительно close последней свечи. Мне нужно не просто заработать деньги, а найти где деньги в рынке математически, чтобы избежать высоких просадок ликвидности портфеляы
124
+
125
+ 5. Если код ревью не пройдено, учесть ошибки и делать стратегию заного с нуля по этому руководству
126
+
127
+ ### Рекомендация
128
+
129
+ - Искать рекомендации в интернете
130
+
131
+ Я приветствую не перебирать варианты через brut force, а заимствовать торговую идею у других людей через поиск в интернете. Важно не только найти чужую задумку, но и проверить на деле действительно ли она прибыльна
132
+
133
+ - Анализировать структуру рынка
134
+
135
+ Посмотрев свечи можно понять структуры, с которыми мы сталкиваемся в этом месяце: боковик, нейтральный тренд, бычий тренд, медвежий тренд, высокая волатильность. Нужно продумать как определить и как действовать при каждом случае
136
+
137
+ - Использовать TODO list
138
+
139
+ В этом руководстве много шагов. Нужно сформировать TODO список и двигаться по шагам, финализируя завершение каждого пункта. В todo list включи как поиск новостей, так и анализ свечей `--dump`, анализ стратегии pine, максимально детально
140
+
141
+ - Использовать deep research
142
+
143
+ Руководство подразумевает умный анализ рынка, а не код ради кода. Делай вдумчиво не экономя токены
144
+
145
+ - Думай логически
146
+
147
+ Цель 1% нельзя достигнуть менее чем за 4 часа. Цель ниже 1% не интересна так как slippage выбъет позицию при эффективном Risk/Reward. Мне не нужна отписка, мне нужен анализ рынка
148
+
149
+ ### Результат
150
+
151
+ Файл `.pine` без маркетингого треша
152
+
153
+ - Никаких TP=0.5% SL=-10%, грамотный риск менеджемент который исключает HOLD на удачу
154
+ - Явно описаные и прокоментированные режимы работы со ссылками на временной промежуток на котором тестировались
155
+ - Честный подсчёт прибыльности стратегии комментарием в шапке
156
+ - Честный подсчёт количества сигналов в среднем за день в шапке
157
+ - Честный подсчёт `sharpeRatio`, `avgPnl`, `stdDev` в шапке
158
+ - Один и более сигнал в день, лучше больше
159
+
160
+ Если заработать нельзя не пытайся подогнать результат, напиши как есть не преукрашивая картину