{"id":495910,"date":"2026-09-24T11:21:43","date_gmt":"2026-09-24T11:21:43","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=495910"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=495910","title":{"rendered":"\u041a\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u0442\u0440\u0435\u0439\u0434\u0435\u0440\u0443? \u0411\u044d\u043a\u0442\u0435\u0441\u0442, \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0438\u0441\u043a \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u043c\u0435\u043d\u0442"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/backtest-kit\/backtest-ollama-casual\" rel=\"noopener nofollow\">\u043a\u043e\u0434 \u0434\u0432\u0438\u0436\u043a\u0430 \u0431\u0435\u043a\u0442\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a><\/p>\n<\/blockquote>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4f3\/dac\/bd3\/4f3dacbd3754b0115b869531a5f52967.jpg\" width=\"1248\" height=\"832\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4f3\/dac\/bd3\/4f3dacbd3754b0115b869531a5f52967.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4f3\/dac\/bd3\/4f3dacbd3754b0115b869531a5f52967.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042f \u0432\u0437\u044f\u043b \u0434\u0432\u0430 \u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u0430\u043d\u0430\u043b\u0430 \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u043c\u0435\u0441\u044f\u0446 \u0438\u0445 \u043f\u043e\u0441\u0442\u043e\u0432 (\u0430\u0432\u0433\u0443\u0441\u0442 2026) \u0447\u0435\u0440\u0435\u0437 LLM \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043b \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u043d\u044b\u0445 \u0441\u0432\u0435\u0447\u0430\u0445 \u0441 \u043a\u043e\u043c\u0438\u0441\u0441\u0438\u044f\u043c\u0438 \u0438 \u0441\u043b\u0438\u043f\u043f\u0435\u0434\u0436\u0435\u043c. \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0434\u0430\u043b\u00a0<strong>+10.3%<\/strong>\u00a0\u0437\u0430 \u043c\u0435\u0441\u044f\u0446, \u0432\u0442\u043e\u0440\u043e\u0439\u00a0<strong>\u221218.1%<\/strong>. \u041e\u0431\u0435 \u0446\u0438\u0444\u0440\u044b \u0431\u0435\u0437 \u043f\u043b\u0435\u0447\u0430. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u043e\u0432, \u0438 \u0435\u0451 \u0432\u0438\u0434\u043d\u043e \u0435\u0449\u0451 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0431\u044d\u043a\u0442\u0435\u0441\u0442\u0430.<\/p>\n<h3>\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u0441\u0451<\/h3>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u0440\u0435\u0439\u0434\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438\u0437 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0430 \u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0438\u043c. \u041e\u0442 \u0447\u0435\u0433\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430?<\/p>\n<p>\u0421\u0442\u043e\u043f-\u043b\u043e\u0441\u0441 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0431\u0438\u0432\u0430\u0435\u0442 \u0432 100% \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0435\u043f\u043e\u0437\u0438\u0442, \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u044f \u0440\u0438\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442. \u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0430\u0432\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0433\u043e\u043d \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438: \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u044b, \u043c\u0438\u043d\u0443\u0442\u043d\u044b\u0435 \u0441\u0432\u0435\u0447\u0438, \u043a\u043e\u043c\u0438\u0441\u0441\u0438\u0438, \u0441\u043b\u0438\u043f\u043f\u0435\u0434\u0436. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0446\u0438\u0444\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.<\/p>\n<p>\u042d\u0442\u0438\u043c \u044f \u0438 \u0437\u0430\u043d\u044f\u043b\u0441\u044f. \u041a\u0430\u043d\u0430\u043b\u044b \u0432\u044b\u0431\u0440\u0430\u043b \u0441 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u041a\u0430\u043d\u0430\u043b A<\/strong> \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0439 \u043f\u043b\u0430\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043d\u0430\u043b B<\/strong> \u0441\u0442\u0440\u043e\u0438\u0442 \u043f\u043e\u0434\u0430\u0447\u0443 \u043d\u0430 \u043b\u0438\u0447\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0435: \u00ab\u0431\u0435\u0440\u0443 \u043f\u043e 1% \u043e\u0442 \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u00bb, \u00ab\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e \u0443\u0431\u044b\u0442\u043a\u0438 \u0438 \u0434\u0432\u0438\u0433\u0430\u044e\u0441\u044c \u0434\u0430\u043b\u044c\u0448\u0435\u00bb.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\n<\/th>\n<th>\n<p align=\"left\">\u041a\u0430\u043d\u0430\u043b A<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u0430\u043d\u0430\u043b B<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0424\u043e\u0440\u043c\u0430\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u0445\u043e\u0434\u0430 + 5 \u0446\u0435\u043b\u0435\u0439 + \u0441\u0442\u043e\u043f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u00ab\u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 BTC \u0432 \u0448\u043e\u0440\u0442\u00bb + \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0434\u0435\u043b\u043e\u043a \u0437\u0430 \u043c\u0435\u0441\u044f\u0446<\/p>\n<\/td>\n<td>\n<p align=\"left\">21<\/p>\n<\/td>\n<td>\n<p align=\"left\">24<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0418\u0442\u043e\u0433 (\u0431\u0435\u0437 \u043f\u043b\u0435\u0447\u0430, \u0437\u0430 \u0432\u044b\u0447\u0435\u0442\u043e\u043c \u043a\u043e\u043c\u0438\u0441\u0441\u0438\u0439)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>+10.3%<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u221218.1%<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u0438\u0431\u044b\u043b\u044c\u043d\u044b\u0445 \u0441\u0434\u0435\u043b\u043e\u043a (win rate)<\/p>\n<\/td>\n<td>\n<p align=\"left\">76% (16 \u0438\u0437 21)<\/p>\n<\/td>\n<td>\n<p align=\"left\">29% (7 \u0438\u0437 24)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Profit factor<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.78<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.57<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">~17 \u0447\u0430\u0441\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">~44 \u0447\u0430\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0425\u0443\u0434\u0448\u0430\u044f \u0441\u0434\u0435\u043b\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u22124.6% (\u0441\u0442\u043e\u043f \u0430\u0432\u0442\u043e\u0440\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u22127.9% (\u043d\u0430\u0448 \u0441\u0442\u043e\u043f, \u0441\u0432\u043e\u0438\u0445 \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 \u043d\u0435\u0442)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u044b\u043d\u043e\u043a, \u043c\u0435\u0441\u044f\u0446 \u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430 28 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432. \u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043e \u0438 \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u0430 \u0432\u0437\u044f\u043b\u0430\u0441\u044c.<\/p>\n<h3>LLM \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u044b, \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u0434<\/h3>\n<p>\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435: \u043c\u043e\u0434\u0435\u043b\u044c\u00a0<strong>\u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/strong>. \u0415\u0439 \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 LLM \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u043e, &#8212; \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041f\u043e\u0441\u0442 \u0432\u0438\u0434\u0430 \u00ab\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u041b\u041e\u041d\u0413 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 $78600 &#8212; $79400, \u0446\u0435\u043b\u0438&#8230;, \u0441\u0442\u043e\u043f $77400\u00bb &#8212; \u044d\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u0441 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u043c\u0438, \u044d\u043c\u043e\u0434\u0437\u0438 \u0438 \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u043c\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438. \u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u0438\u0433\u043d\u0430\u043b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0442\u0435\u043a\u0441\u0442, \u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0441\u043e \u0441\u043b\u043e\u0432\u043e\u043c \u00ab\u0428\u043e\u0440\u0442\u00bb \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435. \u041f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 JSON \u0434\u043e\u043b\u0436\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c. \u0420\u0435\u0448\u0430\u0442\u044c, \u0432\u0445\u043e\u0434\u0438\u0442\u044c \u043b\u0438 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0433\u0434\u0435 \u0440\u0435\u0437\u0430\u0442\u044c \u0443\u0431\u044b\u0442\u043e\u043a, \u0434\u043e\u043b\u0436\u0435\u043d \u043a\u043e\u0434.<\/p>\n<pre><code class=\"typescript\">import { generateObject, InferenceName, type FormatModel } from \"json-inference\";const TradingPositionFormat = {  type: \"object\",  required: [\"id\", \"symbol\", \"position\", \"entryRange\", \"targets\", \"stoploss\", \"reasoning\"],  properties: {    id: {      type: \"number\",      description: \"ID \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0415\u0441\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435\u0442, \u0432\u0435\u0440\u043d\u0438 -1\",    },    position: {      type: \"string\",      enum: [\"long\", \"short\", \"wait\"],      description: \"\u0422\u0438\u043f \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0435\u0442, \u0432\u0435\u0440\u043d\u0438 wait\",    },    entryRange: {      type: \"object\",      required: [\"from\", \"to\"],      properties: { from: { type: \"number\" }, to: { type: \"number\" } },    },    targets: {      type: \"array\",      description: \"\u0426\u0435\u043b\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, 5 \u0443\u0440\u043e\u0432\u043d\u0435\u0439. \u0415\u0441\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435\u0442, \u0432\u0435\u0440\u043d\u0438 []\",      items: { type: \"number\" },    },    stoploss: { type: \"number\" },    reasoning: { type: \"string\", description: \"\u041e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 - \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438\" },  },} satisfies FormatModel;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e<\/h4>\n<p>\u042f \u0441\u0440\u0430\u0432\u043d\u0438\u043b \u0434\u0432\u0430 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u043a\u0435\u0448\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0432\u0445\u043e\u0434\u0430\u0445. \u0412\u0435\u0440\u0434\u0438\u043a\u0442\u044b \u0438\u00a0<strong>\u0432\u0441\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0441\u043e\u0432\u043f\u0430\u043b\u0438 \u0431\u0438\u0442 \u0432 \u0431\u0438\u0442<\/strong>. \u041e\u0442\u043b\u0438\u0447\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432\u00a0<code>reasoning<\/code>, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u044f\u0437\u044b\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0430. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0435\u0440\u0436\u0438\u0442 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430, \u0446\u0435\u043d\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0438\u0437 \u043f\u043e\u0441\u0442\u0430. \u0414\u043b\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h3>\u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d: \u043f\u043e\u0441\u0442 -&gt; \u0441\u0438\u0433\u043d\u0430\u043b -&gt; \u0441\u0434\u0435\u043b\u043a\u0430<\/h3>\n<p>\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0442\u0438\u043a\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043d\u0443\u0442\u0443 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0443. \u0415\u0441\u043b\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0438\u043a\u0435 \u0437\u0432\u0430\u0442\u044c LLM \u0438 Telegram, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u044b\u0441\u044f\u0447\u0438 \u043b\u0438\u0448\u043d\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0444\u043b\u0443\u0434-\u0431\u0430\u043d. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0431\u0451\u0440\u043d\u0443\u0442\u043e \u0432\u00a0<code>Cache.file<\/code>: \u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430 A \u043a\u0430\u043d\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 5 \u043c\u0438\u043d\u0443\u0442 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b.<\/p>\n<p>\u041a\u0435\u0448 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 Mongo. \u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439: \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u00a0<code>measure-items<\/code>\u00a0\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u043c \u0432\u0441\u0435\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u0430 \u043c\u0435\u0441\u044f\u0446.<\/p>\n<pre><code class=\"typescript\">import { Cache } from \"backtest-kit\";import { scrapeLookback } from \"telegram-reader\";const getSignal = Cache.file(  async (symbol: string, when: Date) =&gt; {    const coin = `#${symbol.replace(\"USDT\", \"\")}`;    \/\/ \u043e\u043a\u043d\u043e 15 \u043c\u0438\u043d\u0443\u0442 \u043d\u0430\u0437\u0430\u0434 \u043e\u0442 \u00ab\u0441\u0435\u0439\u0447\u0430\u0441\u00bb \u0431\u044d\u043a\u0442\u0435\u0441\u0442\u0430.    \/\/ \u041f\u043e\u0441\u0442, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0437\u0436\u0435 when, \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442    let messages = await scrapeLookback({      channel: \"crypto_yoda_channel\",      limit: 15,      dimension: \"minute\",      when,    });    messages = messages.filter(({ content }) =&gt; content.includes(coin));    if (!messages.length) return { entry: null }; \/\/ LLM \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c    const entry = await generateObject(      InferenceName.OllamaInference,      {        format: TradingPositionFormat,        messages: [          { role: \"user\", content: PARSER_PROMPT }, \/\/ \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043f\u043e\u0441\u0442\u0430          ...messages.map(({ id, date, content }) =&gt; ({            role: \"user\" as const,            content: `ID ${id}\\n\\n${content}\\n\\n[${date.toISOString()}]`,          })),        ],      },      \"gemma4:31b-cloud\",    );    return { entry, message };  },  { interval: \"5m\", name: \"crypto_yoda_entry_v3\" },);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u041a\u0430\u043d\u0430\u043b A: \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u043e\u0441\u0442\u0430<\/h3>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 &#8212; \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0439 \u043f\u043b\u0430\u043d:<\/p>\n<pre><code class=\"bash\">\u0421\u0418\u0413\u041d\u0410\u041b #BTC\/USDT\ud83d\udd11 \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u041b\u041e\u041d\u0413 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 $78600 - $79400 - 6% \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430, \u043f\u043b\u0435\u0447\u043e X15\ud83c\udf52 \u0426\u0435\u043b\u0438: $80300 \/ $80900 \/ $82000 \/ $83200 \/ $84500\u2757\ufe0f \u0421\u0422\u041e\u041f \u041b\u041e\u0421\u0421: $77400<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d, \u043f\u044f\u0442\u044c \u0446\u0435\u043b\u0435\u0439 \u0438 \u0441\u0442\u043e\u043f \u0435\u0441\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u0432\u0435\u0441\u044c \u043c\u0435\u0441\u044f\u0446. \u0422\u0430\u043a\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u0434\u043e\u043c, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u044f. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u0432 \u043c\u0430\u0448\u0438\u043d\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435.<\/p>\n<h4>\u041a\u0430\u043a \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442<\/h4>\n<ol>\n<li>\n<p><strong>\u0412\u0445\u043e\u0434<\/strong>\u00a0&#8212; \u043f\u043e \u0440\u044b\u043d\u043a\u0443 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043d\u0435 \u0441\u0442\u0430\u0440\u0448\u0435 15 \u043c\u0438\u043d\u0443\u0442. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0436\u0438\u0432\u0451\u0442 \u0440\u044f\u0434\u043e\u043c \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0435\u0439\u043a-\u043f\u0440\u043e\u0444\u0438\u0442<\/strong>\u00a0&#8212; \u043d\u0430 \u0441\u0430\u043c\u0443\u044e \u0434\u0430\u043b\u044c\u043d\u044e\u044e \u0446\u0435\u043b\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0442\u043e\u043f-\u043b\u043e\u0441\u0441<\/strong>\u00a0&#8212; \u0438\u0437 \u043f\u043e\u0441\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0435<\/strong>\u00a0&#8212; \u00ab\u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u0435\u0439\u00bb. \u041a\u0430\u0436\u0434\u0430\u044f \u0432\u0437\u044f\u0442\u0430\u044f \u0446\u0435\u043b\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u043c. \u0415\u0441\u043b\u0438 \u0446\u0435\u043d\u0430 \u043e\u0442\u043a\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0437\u044f\u0442\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043d\u0430 30% \u0448\u0430\u0433\u0430 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043b\u044f\u043c\u0438, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u0428\u0430\u0433 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0435\u0442\u043a\u0435 \u0446\u0435\u043b\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u043f\u0443\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c: \u0443 PENGU \u0448\u0430\u0433\u0438 \u043e\u043a\u043e\u043b\u043e 0.3\u20130.9%, \u0443 BTC &#8212; \u0441\u043e\u0442\u043d\u0438 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432.<\/p>\n<pre><code class=\"typescript\">listenActivePing(async ({ data, currentPrice }) =&gt; {  const levels = data.payload.levels as number[]; \/\/ \u0446\u0435\u043b\u0438 \u0438\u0437 \u043f\u043e\u0441\u0442\u0430  const currentLevel = getCurrentLevel(data.position, levels, currentPrice);  const { lastLevel } = await LEVEL_STATE.getState(); \/\/ \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438  if (currentLevel &gt; lastLevel) {    await LEVEL_STATE.setState({ lastLevel: currentLevel }); \/\/ \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b    return;  }  if (!lastLevel) return; \/\/ \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0446\u0435\u043b\u0438 \u043d\u0435 \u0432\u0437\u044f\u043b\u0438 - \u0436\u0434\u0451\u043c \u0441\u0442\u043e\u043f\u0430 \u0438\u043b\u0438 \u0442\u0435\u0439\u043a\u0430  const drift = getLevelDrift(data.position, levels, lastLevel, currentPrice);  const step = getLevelStep(levels, lastLevel); \/\/ \u0448\u0430\u0433 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u0446\u0435\u043b\u044f\u043c\u0438  if (drift &gt; step * LEVEL_DRIFT_RATIO) {    await commitClosePending(data.symbol); \/\/ \u043e\u0442\u043a\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0437\u0430 \u0432\u0437\u044f\u0442\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c - \u0432\u044b\u0445\u043e\u0434\u0438\u043c  }});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0418\u0442\u043e\u0433<\/h4>\n<p><strong>21 \u0441\u0434\u0435\u043b\u043a\u0430, +10.3% \u0431\u0435\u0437 \u043f\u043b\u0435\u0447\u0430 \u0437\u0430 \u0432\u044b\u0447\u0435\u0442\u043e\u043c \u043a\u043e\u043c\u0438\u0441\u0441\u0438\u0439, 16 \u0438\u0437 21 \u0432 \u043f\u043b\u044e\u0441\u0435.<\/strong><\/p>\n<ul>\n<li>\n<p>3 \u0440\u0430\u0437\u0430 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441\u0442\u043e\u043f \u0430\u0432\u0442\u043e\u0440\u0430: \u043e\u0442 \u22123.8% \u0434\u043e \u22124.6%, \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>1 \u0440\u0430\u0437 \u0446\u0435\u043d\u0430 \u0434\u043e\u0448\u043b\u0430 \u0434\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0442\u0435\u0439\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0434\u0435\u043b\u043a\u0438 \u0437\u0430\u043a\u0440\u044b\u043b \u0440\u044d\u0442\u0447\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0441\u044f \u043f\u043b\u044e\u0441<\/h4>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u043d\u0438\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 \u044f \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b. \u0415\u0433\u043e \u043f\u043b\u0430\u043d &#8212; \u0440\u0430\u0437\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043f\u044f\u0442\u0438 \u0446\u0435\u043b\u044f\u043c \u0441 \u043f\u043b\u0435\u0447\u043e\u043c X15\u201325 &#8212; \u043d\u0430 \u044d\u0442\u0438\u0445 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0431\u044b\u0442\u043e\u0447\u0435\u043d. \u0414\u0430\u043b\u044c\u043d\u0438\u0435 \u0446\u0435\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442\u0441\u044f, \u0430 \u043e\u0434\u0438\u043d \u0441\u0442\u043e\u043f \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043b\u0435\u0447\u0435 \u0441\u0436\u0438\u0433\u0430\u0435\u0442 60\u2013100% \u043c\u0430\u0440\u0436\u0438.<\/p>\n<p>\u041f\u043b\u044e\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0441\u0442\u044b\u043a\u0435: \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0448 \u0440\u0438\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442. \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0434\u0435\u043d\u044c\u0433\u0438, \u0435\u0433\u043e \u043f\u043b\u0435\u0447\u043e \u0441\u0436\u0438\u0433\u0430\u0435\u0442 \u0434\u0435\u043f\u043e\u0437\u0438\u0442.<\/p>\n<h3>\u041a\u0430\u043d\u0430\u043b B: \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u043d\u0430 \u0441\u043b\u043e\u0432\u0430\u0445<\/h3>\n<p>\u0423 \u0412\u0435\u0440\u0448\u0438\u043d\u0438\u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432, \u0446\u0435\u043b\u0435\u0439 \u0438 \u0441\u0442\u043e\u043f\u043e\u0432 \u043d\u0435\u0442. \u0415\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u044b:<\/p>\n<p><strong>\u0412\u0445\u043e\u0434 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044e<\/strong><\/p>\n<pre><code class=\"bash\">\u0420\u0430\u0431\u043e\u0442\u0430\u044e \u0441 BTC - \u0432 \u0448\u043e\u0440\u0442, \u0432\u0437\u044f\u043b \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0434\u043e\u0431\u043e\u0440\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/strong><\/p>\n<pre><code class=\"bash\">\u0418 \u0442\u0430\u043a, \u0431\u0435\u0440\u0435\u043c BTC, ETH, SOL \u0432 \u0448\u043e\u0440\u0442 \u043f\u043e 1% \u043e\u0442 \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430,\u0431\u0438\u0442\u043e\u043a \u0438 \u044d\u0444\u0438\u0440 100 \u043f\u043b\u0435\u0447\u043e, \u0421\u043e\u043b\u0430\u043d\u0430 50 \u043f\u043b\u0435\u0447\u043e.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0442\u0438\u043a\u0435\u0440 \u0447\u0430\u0441\u0442\u043e \u0432\u0438\u0434\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435: \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0433\u0440\u0430\u0444\u0438\u043a\u0435 TradingView \u0438\u043b\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435 \u0441\u0434\u0435\u043b\u043a\u0438 \u0441 \u0431\u0438\u0440\u0436\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0441\u0442\u0430, \u043d\u043e \u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"typescript\">const signal = await generateObject(  InferenceName.OllamaInference,  {    format: PositionOpenFormat, \/\/ { id, symbol, position: long|short|wait, reasoning }    messages: [      { role: \"user\", content: promptOpen },      ...messages.map(({ id, date, content, photo }) =&gt; ({        role: \"user\" as const,        content: `ID ${id}\\n\\n${content}\\n\\n[${date.toISOString()}]`,        ...(photo &amp;&amp; { images: [photo] }), \/\/ \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u043e\u0441\u0442\u0430 \u0432 base64 - \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430      })),    ],  },  \"gemma4:31b-cloud\",);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u043a\u0430\u043d\u0430\u043b\u0430. \u041d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043b\u043e\u0432\u0443\u0448\u043a\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0448\u0438\u0431\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e:\u00a0<strong>\u0437\u0435\u043b\u0451\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 P&amp;L \u0443 \u0448\u043e\u0440\u0442\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u0431\u044b\u043b\u044c, \u0430 \u043d\u0435 \u00ab\u043b\u043e\u043d\u0433\u00bb<\/strong>. \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0441\u043b\u043e\u0432\u0443 \u00ab\u041b\u043e\u043d\u0433\/\u0428\u043e\u0440\u0442\u00bb \u0438\u043b\u0438 \u043f\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0437\u043e\u043d \u0442\u0435\u0439\u043a\u0430 \u0438 \u0441\u0442\u043e\u043f\u0430 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u044f\u0432\u043d\u043e.<\/p>\n<h4>\u041a\u0430\u043a \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442<\/h4>\n<p>\u0410\u0432\u0442\u043e\u0440 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0441\u0442\u043e\u043f\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u043f \u0441\u0432\u043e\u0439: 7.5% \u043e\u0442 \u0446\u0435\u043d\u044b \u0432\u0445\u043e\u0434\u0430.<\/p>\n<p>\u0412\u0445\u043e\u0434 \u0438 \u0432\u044b\u0445\u043e\u0434 \u0443 \u044d\u0442\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 &#8212; \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0432 \u0440\u0430\u0437\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0434\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0435\u0442, \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0449\u0435\u0442 \u0432 \u043f\u043e\u0441\u0442\u0430\u0445 \u0432\u0445\u043e\u0434;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0449\u0435\u0442 \u043f\u043e\u0441\u0442, \u0433\u0434\u0435 \u0430\u0432\u0442\u043e\u0440 \u0435\u0451 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"typescript\">addStrategySchema({ strategyName: \"main_strategy\" }); \/\/ \u0441\u0445\u0435\u043c\u0430 \u043f\u0443\u0441\u0442\u0430\u044f, \u0431\u0435\u0437 getSignallistenIdlePing(async ({ symbol, when, currentPrice }) =&gt; { \/\/ \u0442\u0438\u043a\u0430\u0435\u0442, \u043f\u043e\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0435\u0442  const { signal } = await getOpenSignal(symbol, when); \/\/ Cache.file, 4h  if (!signal || signal.position === \"wait\") return;  await commitCreateSignal(symbol, {    id: `${signal.id}-${signal.symbol.toLowerCase()}`,    symbol: signal.symbol,    ...Position.moonbag({      position: signal.position,      currentPrice,      percentStopLoss: 7.5, \/\/ \u0441\u0432\u043e\u0439 \u0441\u0442\u043e\u043f - \u0430\u0432\u0442\u043e\u0440 \u0441\u0432\u043e\u0438\u0445 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442    }),  });});listenActivePing(async ({ symbol, when }) =&gt; { \/\/ \u0442\u0438\u043a\u0430\u0435\u0442, \u043f\u043e\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0430  const { signal } = await getCloseSignal(symbol, when);  if (signal?.action === \"close\") await commitClosePending(symbol);});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> 24 \u0441\u0434\u0435\u043b\u043a\u0438, \u221218.1%, \u0432 \u043f\u043b\u044e\u0441\u0435 7 \u0438\u0437 24.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b<\/h3>\n<blockquote>\n<p><strong>\u0421\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0441\u0430\u043c\u0438!<\/strong><\/p>\n<\/blockquote>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0438\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0432\u0442\u043e\u0440\u0430 \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u042d\u0442\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0438. \u0412\u0435\u0441\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0432\u044b\u0448\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u0430\u0445\u00a0<code>backtest.jsonl<\/code>. \u0412 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 &#8212; \u043e\u0434\u043d\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"typescript\">import { readFileSync } from \"node:fs\";const trades = readFileSync(\"backtest_yoda.jsonl\", \"utf8\")  .split(\"\\n\").filter(Boolean).map(JSON.parse)  .filter((e) =&gt; e.data.action === \"closed\");const pnl = trades.reduce((sum, e) =&gt; sum + e.data.pnl, 0);const wins = trades.filter((e) =&gt; e.data.pnl &gt; 0).length;const grossProfit = trades.filter((e) =&gt; e.data.pnl &gt; 0).reduce((s, e) =&gt; s + e.data.pnl, 0);const grossLoss = trades.filter((e) =&gt; e.data.pnl &lt;= 0).reduce((s, e) =&gt; s + e.data.pnl, 0);console.log({  trades: trades.length,  totalPnl: pnl.toFixed(2),                                \/\/ +10.26  winRate: (wins \/ trades.length * 100).toFixed(0) + \"%\",  \/\/ 76%  profitFactor: (grossProfit \/ -grossLoss).toFixed(2),     \/\/ 1.78});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0438\u00a0<code>closed<\/code>\u00a0\u0435\u0441\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0446\u0435\u043d\u044b \u0432\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f:\u00a0<code>take_profit<\/code>,\u00a0<code>stop_loss<\/code>,\u00a0<code>closed<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>time_expired<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0438\u0431\u044b\u043b\u044c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0441\u0430\u0434\u043a\u0430 \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0432 \u043f\u043e\u043b\u0435\u00a0<code>note<\/code>\u00a0&#8212; \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043f\u043e\u0441\u0442-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a.<\/p>\n<\/li>\n<\/ul>\n<p>\u041b\u044e\u0431\u0443\u044e \u0441\u0434\u0435\u043b\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u043e\u0442\u0430\u0442\u044c \u0434\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043f\u043e\u0441\u0442\u0430 \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c\u00a0<code>reasoning<\/code>\u00a0\u043c\u043e\u0434\u0435\u043b\u0438. \u041c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u0430\u043d\u0430\u043b \u0437\u0430 \u0432\u0435\u0447\u0435\u0440.<\/p>\n<h3>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/tripolskypetr\/backtest-kit\" rel=\"noopener nofollow\">backtest-kit<\/a>\u00a0&#8212; \u0434\u0432\u0438\u0436\u043e\u043a \u0431\u044d\u043a\u0442\u0435\u0441\u0442\u0430 \u0438 live-\u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 look-ahead.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.npmjs.com\/package\/telegram-reader\" rel=\"noopener nofollow\">telegram-reader<\/a>\u00a0&#8212; \u0447\u0442\u0435\u043d\u0438\u0435 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 MTProto.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/tripolskypetr\/json-inference\" rel=\"noopener nofollow\">json-inference<\/a>\u00a0&#8212; structured output \u0434\u043b\u044f ollama.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/backtest-kit\/backtest-ollama-casual\" rel=\"noopener nofollow\">backtest-ollama-casual<\/a>\u00a0&#8212; \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043e\u0431\u0435\u0438\u043c\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u043c\u0438 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435<\/h2>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1086148\/\">https:\/\/habr.com\/ru\/articles\/1086148\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0434 \u0434\u0432\u0438\u0436\u043a\u0430 \u0431\u0435\u043a\u0442\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435\u042f \u0432\u0437\u044f\u043b \u0434\u0432\u0430 \u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u0430\u043d\u0430\u043b\u0430 \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u043c\u0435\u0441\u044f\u0446 \u0438\u0445 \u043f\u043e\u0441\u0442\u043e\u0432 (\u0430\u0432\u0433\u0443\u0441\u0442 2026) \u0447\u0435\u0440\u0435\u0437 LLM \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043b \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u043d\u044b\u0445 \u0441\u0432\u0435\u0447\u0430\u0445 \u0441 \u043a\u043e\u043c\u0438\u0441\u0441\u0438\u044f\u043c\u0438 \u0438 \u0441\u043b\u0438\u043f\u043f\u0435\u0434\u0436\u0435\u043c. \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0434\u0430\u043b\u00a0+10.3%\u00a0\u0437\u0430 \u043c\u0435\u0441\u044f\u0446, \u0432\u0442\u043e\u0440\u043e\u0439\u00a0\u221218.1%. \u041e\u0431\u0435 \u0446\u0438\u0444\u0440\u044b \u0431\u0435\u0437 \u043f\u043b\u0435\u0447\u0430. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u043e\u0432, \u0438 \u0435\u0451 \u0432\u0438\u0434\u043d\u043e \u0435\u0449\u0451 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0431\u044d\u043a\u0442\u0435\u0441\u0442\u0430.\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u0441\u0451\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u0440\u0435\u0439\u0434\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438\u0437 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0430 \u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0438\u043c. \u041e\u0442 \u0447\u0435\u0433\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430?\u0421\u0442\u043e\u043f-\u043b\u043e\u0441\u0441 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0431\u0438\u0432\u0430\u0435\u0442 \u0432 100% \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0435\u043f\u043e\u0437\u0438\u0442, \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u044f \u0440\u0438\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442. \u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0430\u0432\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0433\u043e\u043d \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438: \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u044b, \u043c\u0438\u043d\u0443\u0442\u043d\u044b\u0435 \u0441\u0432\u0435\u0447\u0438, \u043a\u043e\u043c\u0438\u0441\u0441\u0438\u0438, \u0441\u043b\u0438\u043f\u043f\u0435\u0434\u0436. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0446\u0438\u0444\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.\u042d\u0442\u0438\u043c \u044f \u0438 \u0437\u0430\u043d\u044f\u043b\u0441\u044f. \u041a\u0430\u043d\u0430\u043b\u044b \u0432\u044b\u0431\u0440\u0430\u043b \u0441 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u043c\u0438:\u041a\u0430\u043d\u0430\u043b A \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0439 \u043f\u043b\u0430\u043d.\u041a\u0430\u043d\u0430\u043b B \u0441\u0442\u0440\u043e\u0438\u0442 \u043f\u043e\u0434\u0430\u0447\u0443 \u043d\u0430 \u043b\u0438\u0447\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0435: \u00ab\u0431\u0435\u0440\u0443 \u043f\u043e 1% \u043e\u0442 \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u00bb, \u00ab\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e \u0443\u0431\u044b\u0442\u043a\u0438 \u0438 \u0434\u0432\u0438\u0433\u0430\u044e\u0441\u044c \u0434\u0430\u043b\u044c\u0448\u0435\u00bb.\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b\u041a\u0430\u043d\u0430\u043b A\u041a\u0430\u043d\u0430\u043b B\u0424\u043e\u0440\u043c\u0430\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u0445\u043e\u0434\u0430 + 5 \u0446\u0435\u043b\u0435\u0439 + \u0441\u0442\u043e\u043f\u00ab\u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 BTC \u0432 \u0448\u043e\u0440\u0442\u00bb + \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0421\u0434\u0435\u043b\u043e\u043a \u0437\u0430 \u043c\u0435\u0441\u044f\u04462124\u0418\u0442\u043e\u0433 (\u0431\u0435\u0437 \u043f\u043b\u0435\u0447\u0430, \u0437\u0430 \u0432\u044b\u0447\u0435\u0442\u043e\u043c \u043a\u043e\u043c\u0438\u0441\u0441\u0438\u0439)+10.3%\u221218.1%\u041f\u0440\u0438\u0431\u044b\u043b\u044c\u043d\u044b\u0445 \u0441\u0434\u0435\u043b\u043e\u043a (win rate)76% (16 \u0438\u0437 21)29% (7 \u0438\u0437 24)Profit factor1.780.57\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u0438~17 \u0447\u0430\u0441\u043e\u0432~44 \u0447\u0430\u0441\u0430\u0425\u0443\u0434\u0448\u0430\u044f \u0441\u0434\u0435\u043b\u043a\u0430\u22124.6% (\u0441\u0442\u043e\u043f \u0430\u0432\u0442\u043e\u0440\u0430)\u22127.9% (\u043d\u0430\u0448 \u0441\u0442\u043e\u043f, \u0441\u0432\u043e\u0438\u0445 \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 \u043d\u0435\u0442)\u0420\u044b\u043d\u043e\u043a, \u043c\u0435\u0441\u044f\u0446 \u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430 28 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432. \u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043e \u0438 \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u0430 \u0432\u0437\u044f\u043b\u0430\u0441\u044c.LLM \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u044b, \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u0434\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435: \u043c\u043e\u0434\u0435\u043b\u044c\u00a0\u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u0415\u0439 \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 LLM \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u043e, &#8212; \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.\u041f\u043e\u0441\u0442 \u0432\u0438\u0434\u0430 \u00ab\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u041b\u041e\u041d\u0413 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 $78600 &#8212; $79400, \u0446\u0435\u043b\u0438&#8230;, \u0441\u0442\u043e\u043f $77400\u00bb &#8212; \u044d\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u0441 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u043c\u0438, \u044d\u043c\u043e\u0434\u0437\u0438 \u0438 \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u043c\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438. \u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u0438\u0433\u043d\u0430\u043b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0442\u0435\u043a\u0441\u0442, \u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0441\u043e \u0441\u043b\u043e\u0432\u043e\u043c \u00ab\u0428\u043e\u0440\u0442\u00bb \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435. \u041f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 JSON \u0434\u043e\u043b\u0436\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c. \u0420\u0435\u0448\u0430\u0442\u044c, \u0432\u0445\u043e\u0434\u0438\u0442\u044c \u043b\u0438 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0433\u0434\u0435 \u0440\u0435\u0437\u0430\u0442\u044c \u0443\u0431\u044b\u0442\u043e\u043a, \u0434\u043e\u043b\u0436\u0435\u043d \u043a\u043e\u0434.import { generateObject, InferenceName, type FormatModel } from &#171;json-inference&#187;;const TradingPositionFormat = {  type: &#171;object&#187;,  required: [&#171;id&#187;, &#171;symbol&#187;, &#171;position&#187;, &#171;entryRange&#187;, &#171;targets&#187;, &#171;stoploss&#187;, &#171;reasoning&#187;],  properties: {    id: {      type: &#171;number&#187;,      description: &#171;ID \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0415\u0441\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435\u0442, \u0432\u0435\u0440\u043d\u0438 -1&#187;,    },    position: {      type: &#171;string&#187;,      enum: [&#171;long&#187;, &#171;short&#187;, &#171;wait&#187;],      description: &#171;\u0422\u0438\u043f \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0435\u0442, \u0432\u0435\u0440\u043d\u0438 wait&#187;,    },    entryRange: {      type: &#171;object&#187;,      required: [&#171;from&#187;, &#171;to&#187;],      properties: { from: { type: &#171;number&#187; }, to: { type: &#171;number&#187; } },    },    targets: {      type: &#171;array&#187;,      description: &#171;\u0426\u0435\u043b\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, 5 \u0443\u0440\u043e\u0432\u043d\u0435\u0439. \u0415\u0441\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435\u0442, \u0432\u0435\u0440\u043d\u0438 []&#187;,      items: { type: &#171;number&#187; },    },    stoploss: { type: &#171;number&#187; },    reasoning: { type: &#171;string&#187;, description: &#171;\u041e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 &#8212; \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438&#187; },  },} satisfies FormatModel;\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u042f \u0441\u0440\u0430\u0432\u043d\u0438\u043b \u0434\u0432\u0430 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u043a\u0435\u0448\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0432\u0445\u043e\u0434\u0430\u0445. \u0412\u0435\u0440\u0434\u0438\u043a\u0442\u044b \u0438\u00a0\u0432\u0441\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0441\u043e\u0432\u043f\u0430\u043b\u0438 \u0431\u0438\u0442 \u0432 \u0431\u0438\u0442. \u041e\u0442\u043b\u0438\u0447\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432\u00a0reasoning, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u044f\u0437\u044b\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0430. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0435\u0440\u0436\u0438\u0442 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430, \u0446\u0435\u043d\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0438\u0437 \u043f\u043e\u0441\u0442\u0430. \u0414\u043b\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.\u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d: \u043f\u043e\u0441\u0442 -&gt; \u0441\u0438\u0433\u043d\u0430\u043b -&gt; \u0441\u0434\u0435\u043b\u043a\u0430\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0442\u0438\u043a\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043d\u0443\u0442\u0443 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0443. \u0415\u0441\u043b\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0438\u043a\u0435 \u0437\u0432\u0430\u0442\u044c LLM \u0438 Telegram, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u044b\u0441\u044f\u0447\u0438 \u043b\u0438\u0448\u043d\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0444\u043b\u0443\u0434-\u0431\u0430\u043d. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0431\u0451\u0440\u043d\u0443\u0442\u043e \u0432\u00a0Cache.file: \u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430 A \u043a\u0430\u043d\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 5 \u043c\u0438\u043d\u0443\u0442 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b.\u041a\u0435\u0448 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 Mongo. \u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439: \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u00a0measure-items\u00a0\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u043c \u0432\u0441\u0435\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u0430 \u043c\u0435\u0441\u044f\u0446.import { Cache } from &#171;backtest-kit&#187;;import { scrapeLookback } from &#171;telegram-reader&#187;;const getSignal = Cache.file(  async (symbol: string, when: Date) =&gt; {    const coin = `#${symbol.replace(&#171;USDT&#187;, &#171;&#187;)}`;    \/\/ \u043e\u043a\u043d\u043e 15 \u043c\u0438\u043d\u0443\u0442 \u043d\u0430\u0437\u0430\u0434 \u043e\u0442 \u00ab\u0441\u0435\u0439\u0447\u0430\u0441\u00bb \u0431\u044d\u043a\u0442\u0435\u0441\u0442\u0430.    \/\/ \u041f\u043e\u0441\u0442, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0437\u0436\u0435 when, \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442    let messages = await scrapeLookback({      channel: &#171;crypto_yoda_channel&#187;,      limit: 15,      dimension: &#171;minute&#187;,      when,    });    messages = messages.filter(({ content }) =&gt; content.includes(coin));    if (!messages.length) return { entry: null }; \/\/ LLM \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c    const entry = await generateObject(      InferenceName.OllamaInference,      {        format: TradingPositionFormat,        messages: [          { role: &#171;user&#187;, content: PARSER_PROMPT }, \/\/ \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043f\u043e\u0441\u0442\u0430          &#8230;messages.map(({ id, date, content }) =&gt; ({            role: &#171;user&#187; as const,            content: `ID ${id}\\n\\n${content}\\n\\n[${date.toISOString()}]`,          })),        ],      },      &#171;gemma4:31b-cloud&#187;,    );    return { entry, message };  },  { interval: &#171;5m&#187;, name: &#171;crypto_yoda_entry_v3&#187; },);\u041a\u0430\u043d\u0430\u043b A: \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u043e\u0441\u0442\u0430\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 &#8212; \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0439 \u043f\u043b\u0430\u043d:\u0421\u0418\u0413\u041d\u0410\u041b #BTC\/USDT\ud83d\udd11 \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u041b\u041e\u041d\u0413 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 $78600 &#8212; $79400 &#8212; 6% \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430, \u043f\u043b\u0435\u0447\u043e X15\ud83c\udf52 \u0426\u0435\u043b\u0438: $80300 \/ $80900 \/ $82000 \/ $83200 \/ $84500\u2757\ufe0f \u0421\u0422\u041e\u041f \u041b\u041e\u0421\u0421: $77400\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d, \u043f\u044f\u0442\u044c \u0446\u0435\u043b\u0435\u0439 \u0438 \u0441\u0442\u043e\u043f \u0435\u0441\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u0432\u0435\u0441\u044c \u043c\u0435\u0441\u044f\u0446. \u0422\u0430\u043a\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u0434\u043e\u043c, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u044f. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u0432 \u043c\u0430\u0448\u0438\u043d\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435.\u041a\u0430\u043a \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0412\u0445\u043e\u0434\u00a0&#8212; \u043f\u043e \u0440\u044b\u043d\u043a\u0443 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043d\u0435 \u0441\u0442\u0430\u0440\u0448\u0435 15 \u043c\u0438\u043d\u0443\u0442. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0436\u0438\u0432\u0451\u0442 \u0440\u044f\u0434\u043e\u043c \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.\u0422\u0435\u0439\u043a-\u043f\u0440\u043e\u0444\u0438\u0442\u00a0&#8212; \u043d\u0430 \u0441\u0430\u043c\u0443\u044e \u0434\u0430\u043b\u044c\u043d\u044e\u044e \u0446\u0435\u043b\u044c.\u0421\u0442\u043e\u043f-\u043b\u043e\u0441\u0441\u00a0&#8212; \u0438\u0437 \u043f\u043e\u0441\u0442\u0430.\u0421\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u00a0&#8212; \u00ab\u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u0435\u0439\u00bb. \u041a\u0430\u0436\u0434\u0430\u044f \u0432\u0437\u044f\u0442\u0430\u044f \u0446\u0435\u043b\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u043c. \u0415\u0441\u043b\u0438 \u0446\u0435\u043d\u0430 \u043e\u0442\u043a\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0437\u044f\u0442\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043d\u0430 30% \u0448\u0430\u0433\u0430 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043b\u044f\u043c\u0438, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.\u0428\u0430\u0433 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0435\u0442\u043a\u0435 \u0446\u0435\u043b\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u043f\u0443\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c: \u0443 PENGU \u0448\u0430\u0433\u0438 \u043e\u043a\u043e\u043b\u043e 0.3\u20130.9%, \u0443 BTC &#8212; \u0441\u043e\u0442\u043d\u0438 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432.listenActivePing(async ({ data, currentPrice }) =&gt; {  const levels = data.payload.levels as number[]; \/\/ \u0446\u0435\u043b\u0438 \u0438\u0437 \u043f\u043e\u0441\u0442\u0430  const currentLevel = getCurrentLevel(data.position, levels, currentPrice);  const { lastLevel } = await LEVEL_STATE.getState(); \/\/ \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438  if (currentLevel &gt; lastLevel) {    await LEVEL_STATE.setState({ lastLevel: currentLevel }); \/\/ \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b    return;  }  if (!lastLevel) return; \/\/ \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0446\u0435\u043b\u0438 \u043d\u0435 \u0432\u0437\u044f\u043b\u0438 &#8212; \u0436\u0434\u0451\u043c \u0441\u0442\u043e\u043f\u0430 \u0438\u043b\u0438 \u0442\u0435\u0439\u043a\u0430  const drift = getLevelDrift(data.position, levels, lastLevel, currentPrice);  const step = getLevelStep(levels, lastLevel); \/\/ \u0448\u0430\u0433 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u0446\u0435\u043b\u044f\u043c\u0438  if (drift &gt; step * LEVEL_DRIFT_RATIO) {    await commitClosePending(data.symbol); \/\/ \u043e\u0442\u043a\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0437\u0430 \u0432\u0437\u044f\u0442\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c &#8212; \u0432\u044b\u0445\u043e\u0434\u0438\u043c  }});\u0418\u0442\u043e\u043321 \u0441\u0434\u0435\u043b\u043a\u0430, +10.3% \u0431\u0435\u0437 \u043f\u043b\u0435\u0447\u0430 \u0437\u0430 \u0432\u044b\u0447\u0435\u0442\u043e\u043c \u043a\u043e\u043c\u0438\u0441\u0441\u0438\u0439, 16 \u0438\u0437 21 \u0432 \u043f\u043b\u044e\u0441\u0435.3 \u0440\u0430\u0437\u0430 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441\u0442\u043e\u043f \u0430\u0432\u0442\u043e\u0440\u0430: \u043e\u0442 \u22123.8% \u0434\u043e \u22124.6%, \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440.1 \u0440\u0430\u0437 \u0446\u0435\u043d\u0430 \u0434\u043e\u0448\u043b\u0430 \u0434\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0442\u0435\u0439\u043a\u0430.\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0434\u0435\u043b\u043a\u0438 \u0437\u0430\u043a\u0440\u044b\u043b \u0440\u044d\u0442\u0447\u0435\u0442.\u041e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0441\u044f \u043f\u043b\u044e\u0441\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u043d\u0438\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 \u044f \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b. \u0415\u0433\u043e \u043f\u043b\u0430\u043d &#8212; \u0440\u0430\u0437\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043f\u044f\u0442\u0438 \u0446\u0435\u043b\u044f\u043c \u0441 \u043f\u043b\u0435\u0447\u043e\u043c X15\u201325 &#8212; \u043d\u0430 \u044d\u0442\u0438\u0445 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0431\u044b\u0442\u043e\u0447\u0435\u043d. \u0414\u0430\u043b\u044c\u043d\u0438\u0435 \u0446\u0435\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442\u0441\u044f, \u0430 \u043e\u0434\u0438\u043d \u0441\u0442\u043e\u043f \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043b\u0435\u0447\u0435 \u0441\u0436\u0438\u0433\u0430\u0435\u0442 60\u2013100% \u043c\u0430\u0440\u0436\u0438.\u041f\u043b\u044e\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0441\u0442\u044b\u043a\u0435: \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0448 \u0440\u0438\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442. \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0434\u0435\u043d\u044c\u0433\u0438, \u0435\u0433\u043e \u043f\u043b\u0435\u0447\u043e \u0441\u0436\u0438\u0433\u0430\u0435\u0442 \u0434\u0435\u043f\u043e\u0437\u0438\u0442.\u041a\u0430\u043d\u0430\u043b B: \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u043d\u0430 \u0441\u043b\u043e\u0432\u0430\u0445\u0423 \u0412\u0435\u0440\u0448\u0438\u043d\u0438\u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432, \u0446\u0435\u043b\u0435\u0439 \u0438 \u0441\u0442\u043e\u043f\u043e\u0432 \u043d\u0435\u0442. \u0415\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u044b:\u0412\u0445\u043e\u0434 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044e\u0420\u0430\u0431\u043e\u0442\u0430\u044e \u0441 BTC &#8212; \u0432 \u0448\u043e\u0440\u0442, \u0432\u0437\u044f\u043b \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0434\u043e\u0431\u043e\u0440\u0430\u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u043f\u043e\u0437\u0438\u0446\u0438\u0438\u0418 \u0442\u0430\u043a, \u0431\u0435\u0440\u0435\u043c BTC, ETH, SOL \u0432 \u0448\u043e\u0440\u0442 \u043f\u043e 1% \u043e\u0442 \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430,\u0431\u0438\u0442\u043e\u043a \u0438 \u044d\u0444\u0438\u0440 100 \u043f\u043b\u0435\u0447\u043e, \u0421\u043e\u043b\u0430\u043d\u0430 50 \u043f\u043b\u0435\u0447\u043e.\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0442\u0438\u043a\u0435\u0440 \u0447\u0430\u0441\u0442\u043e \u0432\u0438\u0434\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435: \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0433\u0440\u0430\u0444\u0438\u043a\u0435 TradingView \u0438\u043b\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435 \u0441\u0434\u0435\u043b\u043a\u0438 \u0441 \u0431\u0438\u0440\u0436\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0441\u0442\u0430, \u043d\u043e \u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435:const signal = await generateObject(  InferenceName.OllamaInference,  {    format: PositionOpenFormat, \/\/ { id, symbol, position: long|short|wait, reasoning }    messages: [      { role: &#171;user&#187;, content: promptOpen },      &#8230;messages.map(({ id, date, content, photo }) =&gt; ({        role: &#171;user&#187; as const,        content: `ID ${id}\\n\\n${content}\\n\\n[${date.toISOString()}]`,        &#8230;(photo &amp;&amp; { images: [photo] }), \/\/ \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u043e\u0441\u0442\u0430 \u0432 base64 &#8212; \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430      })),    ],  },  &#171;gemma4:31b-cloud&#187;,);\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u043a\u0430\u043d\u0430\u043b\u0430. \u041d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043b\u043e\u0432\u0443\u0448\u043a\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0448\u0438\u0431\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e:\u00a0\u0437\u0435\u043b\u0451\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 P&amp;L \u0443 \u0448\u043e\u0440\u0442\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u0431\u044b\u043b\u044c, \u0430 \u043d\u0435 \u00ab\u043b\u043e\u043d\u0433\u00bb. \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0441\u043b\u043e\u0432\u0443 \u00ab\u041b\u043e\u043d\u0433\/\u0428\u043e\u0440\u0442\u00bb \u0438\u043b\u0438 \u043f\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0437\u043e\u043d \u0442\u0435\u0439\u043a\u0430 \u0438 \u0441\u0442\u043e\u043f\u0430 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u044f\u0432\u043d\u043e.\u041a\u0430\u043a \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0410\u0432\u0442\u043e\u0440 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0441\u0442\u043e\u043f\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u043f \u0441\u0432\u043e\u0439: 7.5% \u043e\u0442 \u0446\u0435\u043d\u044b \u0432\u0445\u043e\u0434\u0430.\u0412\u0445\u043e\u0434 \u0438 \u0432\u044b\u0445\u043e\u0434 \u0443 \u044d\u0442\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 &#8212; \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0432 \u0440\u0430\u0437\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0434\u0432\u0430:\u043f\u043e\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0435\u0442, \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0449\u0435\u0442 \u0432 \u043f\u043e\u0441\u0442\u0430\u0445 \u0432\u0445\u043e\u0434;\u043f\u043e\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0449\u0435\u0442 \u043f\u043e\u0441\u0442, \u0433\u0434\u0435 \u0430\u0432\u0442\u043e\u0440 \u0435\u0451 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442.addStrategySchema({ strategyName: &#171;main_strategy&#187; }); \/\/ \u0441\u0445\u0435\u043c\u0430 \u043f\u0443\u0441\u0442\u0430\u044f, \u0431\u0435\u0437 getSignallistenIdlePing(async ({ symbol, when, currentPrice }) =&gt; { \/\/ \u0442\u0438\u043a\u0430\u0435\u0442, \u043f\u043e\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0435\u0442  const { signal } = await getOpenSignal(symbol, when); \/\/ Cache.file, 4h  if (!signal || signal.position === &#171;wait&#187;) return;  await commitCreateSignal(symbol, {    id: `${signal.id}-${signal.symbol.toLowerCase()}`,    symbol: signal.symbol,    &#8230;Position.moonbag({      position: signal.position,      currentPrice,      percentStopLoss: 7.5, \/\/ \u0441\u0432\u043e\u0439 \u0441\u0442\u043e\u043f &#8212; \u0430\u0432\u0442\u043e\u0440 \u0441\u0432\u043e\u0438\u0445 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442    }),  });});listenActivePing(async ({ symbol, when }) =&gt; { \/\/ \u0442\u0438\u043a\u0430\u0435\u0442, \u043f\u043e\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0430  const { signal } = await getCloseSignal(symbol, when);  if (signal?.action === &#171;close&#187;) await commitClosePending(symbol);});\u0418\u0442\u043e\u0433: 24 \u0441\u0434\u0435\u043b\u043a\u0438, \u221218.1%, \u0432 \u043f\u043b\u044e\u0441\u0435 7 \u0438\u0437 24.\u0412\u044b\u0432\u043e\u0434\u044b\u0421\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0441\u0430\u043c\u0438!\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0438\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0432\u0442\u043e\u0440\u0430 \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u042d\u0442\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0438. \u0412\u0435\u0441\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0432\u044b\u0448\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u0430\u0445\u00a0backtest.jsonl. \u0412 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 &#8212; \u043e\u0434\u043d\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u043a:import { readFileSync } from &#171;node:fs&#187;;const trades = readFileSync(&#171;backtest_yoda.jsonl&#187;, &#171;utf8&#187;)  .split(&#171;\\n&#187;).filter(Boolean).map(JSON.parse)  .filter((e) =&gt; e.data.action === &#171;closed&#187;);const&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-495910","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/495910","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=495910"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/495910\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=495910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=495910"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=495910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}