{"id":310180,"date":"2020-09-19T21:00:41","date_gmt":"2020-09-19T21:00:41","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=310180"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=310180","title":{"rendered":"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 TradingView"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/519784\/\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lg\/ca\/vr\/lgcavrd_vrl1n9lo3thy51frlns.png\"><\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0412\u044b \u2014 \u0444\u0440\u0438\u043b\u0430\u043d\u0441\u0435\u0440 \u0438\u043b\u0438 CTO \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u043d\u043e \u0412\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0435\u0441\u044c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u044f \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u044e \u0412\u0430\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u0443\u0442\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b. \u0422\u0435, \u043a\u0442\u043e \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u0439\u0434\u0443\u0442 \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435. <\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 &quot;\u043a\u043d\u0438\u0433\u0438 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432&quot; \u0441 open source \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u043d\u043e\u0439 \u0431\u0438\u0440\u0436\u0438 Binance \u0438 Forex.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/p>\n<p>  <\/p>\n<p>\u0423 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 TradingView (charting_library) \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0434\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u043e\u043d\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u0430 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0435 TradingView.com. \u0420\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c &quot;\u043a\u043d\u0438\u0433\u0443 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432&quot; \u0441 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0430: &quot;<a href=\"https:\/\/habr.com\/ru\/post\/519676\/\">\u0424\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a>&quot;. <\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/medium.com\/marcius-studio\/connecting-and-settings-tradingview-with-js-api-and-udf-adapter-b790297a31fa\" rel=\"nofollow\">English version<\/a>.<\/p>\n<p>  <\/p>\n<h1 id=\"cook-book\">Cook book<\/h1>\n<p>  <\/p>\n<p>\u041a\u043e\u043d\u0442\u0435\u043d\u0442 \u0431\u0443\u0434\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0438 \u0412\u044b \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \ud83d\ude42<\/p>\n<p>  <\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e. \u0415\u0441\u043b\u0438, \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435, \u0443 \u0412\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>404 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430<\/strong>, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0443 \u0412\u0430\u0441 \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430.<\/p>\n<p>  <\/p>\n<h2 id=\"licenziya\">\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f<\/h2>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0432 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0438 \u043d\u0435\u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0446\u0435\u043b\u044f\u0445. \u0421\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u2014 \u0441\u043e\u0445\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043b\u043e\u0433\u043e\u0442\u0438\u043f\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445. <\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0438 Forex-\u0434\u0430\u0442\u0443 \u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0443, \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438. \u0417\u0430 2-\u0439 \u043c\u0435\u0441\u044f\u0446 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0435 Forex \u043d\u0435 \u043f\u0440\u043e\u043f\u043b\u0430\u0442\u0438\u043b, \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0438\u0441\u044c \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u043b\u043e\u0433\u043e\u0442\u0438\u043f. \u041f\u043e\u0441\u043b\u0435 \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0439 \u0441\u0432\u044f\u0437\u0430\u043b\u0441\u044f \u0441 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u044d\u043b.\u043f\u043e\u0447\u0442\u044b \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<h2 id=\"poluchenie-dostupa\">\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430<\/h2>\n<p>  <\/p>\n<p>\u0423 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 GitHub, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c <a href=\"https:\/\/www.tradingview.com\/HTML5-stock-forex-bitcoin-charting-library\/?feature=technical-analysis-charts\" rel=\"nofollow\">\u0437\u0430\u044f\u0432\u043a\u0443<\/a> \u043d\u0430 \u0441\u0430\u0439\u0442\u0435<\/li>\n<li>\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e\u0433\u043e\u0432\u043e\u0440<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044e \u043d\u0430 GitHub<\/li>\n<\/ol>\n<p>  <\/p>\n<h3 id=\"moy-opyt-polucheniya-dostupa\">\u041c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430<\/h3>\n<p>  <\/p>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 4 \u043d\u0435\u0434\u0435\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u044f\u0432\u043a\u0438 \u043c\u043d\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u0434\u043e\u0433\u043e\u0432\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f. \u0427\u0435\u0440\u0435\u0437 3 \u0434\u043d\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435. \u0421\u0443\u0434\u044f \u043f\u043e \u043e\u0442\u0437\u044b\u0432\u0430\u043c, \u043f\u0435\u0440\u0438\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043b\u0430\u0432\u0430\u0435\u0442 \u0438 \u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0440\u043e\u043a\u043e\u0432 \u043d\u0435\u0442.<\/p>\n<p>  <\/p>\n<h2 id=\"ne-otobrazhaetsya-grafik-dazhe-s-testovymi-dannymi\">\u041d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u043a, \u0434\u0430\u0436\u0435 \u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442 \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0438\u0431\u0438\u043b\u0438\u043e\u0442\u0435\u043a\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"podklyuchenie-vidzheta\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u0430<\/h3>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/\/ \u0434\u043b\u044f Nodejs import { widget } from '..\/public\/charting_library\/charting_library.min' const widget = new widget({ &lt;options&gt; })<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"dostup-k-biblioteke\">\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435<\/h3>\n<p>  <\/p>\n<p>\u0423\u043a\u0430\u0437\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 <strong>charting_library<\/strong> \u0432 \u043e\u043f\u0446\u0438\u044f\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 <strong>library_path: &#8216;\/charting_library\/&#8217;<\/strong><\/p>\n<p>  <\/p>\n<p>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Vuejs \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0432 <strong>vue.config.js<\/strong> =&gt; <code>publicPath: '\/'<\/code>. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a: <code>\/public\/index.html<\/code>, <code>\/public\/charting_library\/<\/code> \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432\u044b\u0448\u0435.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Widget-Constructor#library_path\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/p>\n<p>  <\/p>\n<h2 id=\"podklyuchenie-dannyh\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>  <\/p>\n<p>\u0412 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0434\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439: <strong>JS API <\/strong> \u0438\u043b\u0438 <strong>UDF<\/strong>. \u041d\u0430\u043f\u0440\u044f\u043c\u0443\u044e &quot;\u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c&quot; \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041c\u044b \u0440\u0430\u0441\u043c\u043e\u0442\u0440\u0438\u043c JSAPI, UDF \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0441 \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u043c \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  <\/p>\n<ul>\n<li>JS API \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/li>\n<li>UDF \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 JSAPI \u043e\u0442 UDF, \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f UDF \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c WebSocket \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0432\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430: <code>datafeed: new Datafeeds.UDFCompatibleDatafeed('http:\/\/localhost:3000\/datafeed', 1000)<\/code><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Connecting-Data\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/p>\n<p>  <\/p>\n<h3 id=\"tradingview-js-api-adapter\">TradingView JS API adapter<\/h3>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0435\u0440, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0445\u0443\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043b\u0443\u0447\u0448\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0445\u0443\u043a\u0430 <code>console.log('[&lt;\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0445\u0443\u043a\u0430&gt;]: Method call')<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430: <strong>onReady<\/strong> =&gt; <strong>resolveSymbol<\/strong> =&gt; <strong>getBars<\/strong> =&gt; <strong>subscribeBars<\/strong> =&gt; <strong>unsubscribeBars<\/strong>. <\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u0442\u0430\u0439\u043c\u0444\u0440\u0435\u0439\u043c, \u0441\u0438\u043c\u0432\u043e\u043b, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0445\u0443\u043a <strong>unsubscribeBars<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0432\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 WebSocket \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 <strong>subscribeBars<\/strong>, \u0442\u043e \u0438 <strong>unsubscribeBars<\/strong> \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. <strong>getServerTime<\/strong> \u0445\u0443\u043a \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435 \u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043e\u0442\u0434\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043c\u044b, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0445\u0443\u043a\u0435 <strong>resolveSymbol<\/strong> \u2014 <strong>has_no_volume: true<\/strong>. <\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">export default {     \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0410\u0421\u0418\u041d\u0425\u0420\u041e\u041d\u041d\u041e     onReady: (callback) =&gt; {         console.log('[onReady]: Method call');                 \/\/ setTimeout(() =&gt; callback(&lt;\u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438&gt;))     },     \/*      \/\/ \u041d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043f\u043e\u0438\u0441\u043a     searchSymbols: (userInput, exchange, symbolType, onResultReadyCallback) =&gt; {         console.log('[searchSymbols]: Method call');     },      *\/     \/\/ \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0435     resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) =&gt; {         console.log('[resolveSymbol]: Method call', symbolName);                 \/\/ onSymbolResolvedCallback({ ..., has_no_volume: true})     },     \/\/ \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430     getBars: (symbolInfo, interval, from, to, onHistoryCallback, onErrorCallback, firstDataRequest) =&gt; {         console.log('[getBars] Method call', symbolInfo, interval)         console.log('[getBars] First request', firstDataRequest)     },     \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f WebSocket     subscribeBars: (symbolInfo, interval, onRealtimeCallback, subscribeUID, onResetCacheNeededCallback) =&gt; {         console.log('[subscribeBars]: Method call with subscribeUID:', subscribeUID);     },         \/\/ \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043f\u0438\u0441\u043a\u0438 \u043e\u0442 \u0441\u0442\u0440\u0438\u043c\u0430     unsubscribeBars: (subscriberUID) =&gt; {         console.log('[unsubscribeBars]: Method call with subscriberUID:', subscriberUID);     },     getServerTime: (callback) =&gt; {} };<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u0438\u0440\u0436\u0430 Binance, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u043a\u0441\u0438.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/JS-Api\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f JS API<\/a> | <a href=\"https:\/\/github.com\/marcius-studio\/tradingview-jsapi-forex\/blob\/master\/client\/src\/tradingview\/api\/index.js\" rel=\"nofollow\">\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/a><\/p>\n<p>  <\/p>\n<h3 id=\"tradingview-udf-adapter\">TradingView UDF adapter<\/h3>\n<p>  <\/p>\n<p>UDF \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c <code>datafeed: new Datafeeds.UDFCompatibleDatafeed('http:\/\/localhost:3000\/datafeed', 1000)<\/code><\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/\/ \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f **Fastify** \/\/ main.js const app = Fastify() app.register(import('.\/modules\/tradingview'), {})  \/\/ tradingview.js const plugin = async (app, options) =&gt; {          \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438     app.get('\/', (req, res) =&gt; {         res.code(200).header('Content-Type', 'text\/plain')             .send('Welcome to UDF Adapter for TradingView. See .\/config for more details.')     })          \/\/ \u0432\u0440\u0435\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430     app.get('\/time', (req, res) =&gt; {         console.log('[time]: Method call')         const time = Math.floor(Date.now() \/ 1000)  \/\/ In seconds         res.code(200).header('Content-Type', 'text\/plain').send(time.toString())     })           \/\/ \u0430\u043d\u0430\u043b\u043e\u0433 onReady         \/\/ https:\/\/github.com\/tradingview\/charting_library\/wiki\/UDF#data-feed-configuration-data     app.get('\/config', (req, res) =&gt; {         console.log('[config]: Method call')     })      \/\/ \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0441\u043b\u0438: supports_group_request: true &amp; supports_search: false     app.get('\/symbol_info', async (req, res) =&gt; {         console.log('[symbol_info]: Method call')     })      \/\/ \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0441\u043b\u0438: supports_group_request: false &amp; supports_search: true     app.get('\/symbols', async (req, res) =&gt; {         console.log('[symbol_info]: Method call')         const symbol = await getSymbols(req.query.symbol)         return symbol     })          \/\/ \u0430\u043d\u0430\u043b\u043e\u0433 getBars, \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435     app.get('\/history', async (req, res) =&gt; {         console.log('[history]: Method call')     }) } <\/code><\/pre>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/UDF\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f UDF<\/a><\/p>\n<p>  <\/p>\n<h2 id=\"js-api-getbars-huk-vyzyvaetsya-mnogo-raz\">JS API getBars \u0445\u0443\u043a \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437<\/h2>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0431\u044b\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f &quot;\u0434\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c&quot; \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u0412 \u0445\u0443\u043a\u0435 <strong>getBars<\/strong> \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>firstDataRequest<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u0443\u043b\u0435\u0432\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>true\\false<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0435\u0433\u043e. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>true<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u0430\u0440\u043a\u0435\u0442\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">getBars: (symbolInfo, interval, from, to, onHistoryCallback, onErrorCallback, firstDataRequest) =&gt; {         console.log('[getBars] Method call', symbolInfo, interval)         console.log('[getBars] First request', firstDataRequest)                  if (firstDataRequest) {                     console.log('do something')                 } },<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"u-moego-provaydera-net-websocket-podklyucheniya\">\u0423 \u043c\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043d\u0435\u0442 WebSocket \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<p>\u041d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c UDF \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u0442\u0440\u0438\u043c\u0430. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u043b\u044f JS API \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <strong>setInterval<\/strong> \u0432 <strong>subscribeBars<\/strong> \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">subscribeBars: (symbolInfo, resolution, onRealtimeCallback, subscribeUID,  onResetCacheNeededCallback) =&gt; {         console.log('[subscribeBars]: Method call with subscribeUID:', subscribeUID)          window.interval = setInterval(function () {             getLastKline(symbolInfo.ticker, resolution).then(kline =&gt; onRealtimeCallback(kline))         }, 1000 * 60) \/\/ 60s update interval }, unsubscribeBars: (subscriberUID) =&gt; {         console.log('[unsubscribeBars]: Method call with subscriberUID:', subscriberUID)          clearInterval(window.interval)         console.log('[unsubscribeBars]: cleared') }<\/code><\/pre>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/marcius-studio\/tradingview-jsapi-forex\/blob\/master\/client\/src\/tradingview\/api\/index.js\" rel=\"nofollow\">\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/a><\/p>\n<p>  <\/p>\n<h2 id=\"kastomizaciya-dizayna\">\u041a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0438\u0437\u0430\u0439\u043d\u0430<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u0432\u0435 \u0442\u0435\u043c\u044b: <code>theme: &quot;Light&quot; || &quot;Dark&quot;<\/code>. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0435\u0441\u044c \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u0446\u0432\u0435\u0442\u0430 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \u0432\u0435\u0437\u0434\u0435, \u043a\u0440\u043e\u043c\u0435 <strong>header_widget<\/strong> (\u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0431\u043b\u043e\u043a \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440.), \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <strong>.css<\/strong>. <\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u043f\u0446\u0438\u044f\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c: <code>custom_css_url: '\/tradingview.css'<\/code>, \u0433\u0434\u0435 <code>\/<\/code> \u2014 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e <code>index.html<\/code>. \u0421 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"css\">.chart-controls-bar {     border-top: none !important; }  .chart-page, .group-wWM3zP_M-  {     background: transparent !important; }  .pane-separator {     display: none !important; }<\/code><\/pre>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Widget-Constructor#theme\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/p>\n<p>  <\/p>\n<h2 id=\"sohranie-dannyh\">\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c &quot;\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u043a\u0438&quot;. <\/p>\n<p>  <\/p>\n<h3 id=\"saveload-metodyhttpsgithubcomtradingviewcharting_librarywikiwidget-methodssavecallback\"><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Widget-Methods#savecallback\" rel=\"nofollow\">Save\\Load \u043c\u0435\u0442\u043e\u0434\u044b<\/a><\/h3>\n<p>  <\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445. \u041f\u0440\u043e\u0441\u0442\u043e\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 <code>widget.save(cb =&gt; this.setOverlay(cb))<\/code> \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0430\u043c, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/marcius-studio\/tradingview-jsapi-forex\/blob\/master\/client\/src\/tradingview\/mixins\/overlay.js\" rel=\"nofollow\">\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/a><\/p>\n<p>  <\/p>\n<h3 id=\"saveload-adapterhttpsgithubcomtradingviewcharting_librarywikisaving-and-loading-chartssave_load_adapter\"><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Saving-and-Loading-Charts#save_load_adapter\" rel=\"nofollow\">Save\\Load adapter<\/a><\/h3>\n<p>  <\/p>\n<p>\u041f\u043e\u0445\u043e\u0436 \u043d\u0430 UDF adapter. \u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f\\\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Saving-and-Loading-Charts\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/p>\n<p>  <\/p>\n<h2 id=\"u-menya-chto-to-ne-rabotaet-delayu-vse-po-dokumentacii\">\u0423 \u043c\u0435\u043d\u044f \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0434\u0435\u043b\u0430\u044e \u0432\u0441\u0435 \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/h2>\n<p>  <\/p>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0435\u0439\u0441, \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0444\u0440\u0438\u043b\u0430\u043d\u0441\u0435\u0440 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u044b\u043b \u0441\u0442\u0430\u0440\u044b\u0439, \u043e\u043d \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043b. \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u043b\u0430 \u0441\u0442\u0430\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<p>  <\/p>\n<p>\u0414\u0440\u0443\u0433\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0443 \u0435\u0449\u0435 \u043d\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 <strong>onChartReady<\/strong>. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d <strong>Observer<\/strong>.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">widget.onChartReady(function() {     \/\/ It's now safe to call any other methods of the widget });<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"grafiki-bibilioteki-otlichayutsya-ot-versiy-na-sayte-tradingviewcom\">\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u0431\u0438\u0431\u0438\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 TradingView.com<\/h2>\n<p>  <\/p>\n<p>\u0414\u0430, \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"kak-dobavit-ordera-na-grafik\">\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0440\u0434\u0435\u0440\u0430 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0440\u0434\u0435\u0440\u0430 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a, \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0440\u0434\u0435\u0440\u0430. \u041f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0441\u0432\u043e\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u043e\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043c\u0438\u043a\u0441\u0438\u043d\u0430 \u0434\u043b\u044f Vuejs, \u0441\u0443\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">import orders from '..\/..\/..\/multiblock\/orders\/mixin'  import createOrder from '.\/createOrder' import openOrders from '.\/openOrders' import trades from '.\/trades'  export default {     mixins: [orders, createOrder, openOrders, trades],     data: () =&gt; ({         lines: new Map()     }),     watch: {         onChartReady(val) {             if (val) {                 \/\/* Uncomment: Testing price line                 \/\/ this.line({ id: 'test', price: 0.021, quantity: 100 })             }         },     },     methods: {         \/\/ Line: open orders         positionLine(data) {             this.line(data)                 .onCancel(() =&gt; {                     this.deleteLine(data.id)                     this.$bus.$emit('market-orders-deleteOrder', data.id)                 })                 .onMove(() =&gt; this.$bus.$emit('market-orders-updateOrder', { id: data.id, price: this.lines.get(data.id).getPrice() }))          },         \/\/ Line: order mobule ('price', 'stopPrice')         orderLine({ id = 'price', ...data }) {             this.line({ id, ...data })                 .onMove(() =&gt; {                     \/\/ Set new value on draging                     this.$store.commit('setMarketOrder', { [id]: this.lines.get(id).getPrice() })                 })                 .onCancel(() =&gt; {                     \/\/ Delete price line &amp; set price = 0                     this.deleteLine(id)                     this.$store.commit('setMarketOrder', { [id]: 0 }) \/\/ set 0 value in vuex storage                 })         },         line({ id = 'price', text = 'Price', color = '#ff9f0a', price, quantity, fontColor = '#fff', lineStyle = 2, lineLength = 25 }) {             if (this.lines.has(id)) this.deleteLine(id)              \/\/ Creating line from scratch             const widget = this.widget.chart().createOrderLine()                 .setText(text)                 .setPrice(price)                 .setQuantity(quantity)                 .onModify(res =&gt; res) \/\/ Need for dragging                  \/\/ Customize color                 .setLineColor(color)                 .setBodyTextColor(fontColor)                 .setBodyBorderColor(color)                 .setBodyBackgroundColor(color)                  .setQuantityBorderColor(color)                 .setQuantityTextColor(fontColor)                 .setQuantityBackgroundColor(color)                  .setCancelButtonBorderColor(color)                 .setCancelButtonBackgroundColor(color)                 .setCancelButtonIconColor(fontColor)                  .setLineLength(lineLength) \/\/ Margin right 25%                 .setLineStyle(lineStyle)              this.lines.set(id, widget)              return widget \/\/ return for orderLine func()          },         deleteLine(id) {             this.lines.get(id).remove()             this.lines.delete(id)         },         deleteLines() {             this.lines.forEach((value, key) =&gt; this.deleteLine(key))         }     } }<\/code><\/pre>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Chart-Methods#trading-primitives\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/p>\n<p>  <\/p>\n<h2 id=\"kak-dobavit-formy-na-grafik\">\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u044b \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a<\/h2>\n<p>  <\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u0442\u0435\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0442\u0443\u043b\u0431\u0430\u0440\u0435. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Chart-Methods#createshapepoint-options\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> | <a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Shapes-and-Overrides\" rel=\"nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0444\u043e\u0440\u043c<\/a><\/p>\n<p>  <\/p>\n<h2 id=\"hochu-ispolzovat-pinescript\">\u0425\u043e\u0447\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c PineScript<\/h2>\n<p>  <\/p>\n<p>charting_library \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.<\/p>\n<p>  <\/p>\n<h2 id=\"hochu-dobavit-svoy-indikator\">\u0425\u043e\u0447\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 <a href=\"https:\/\/github.com\/tradingview\/charting_library\/wiki\/Creating-Custom-Studies\" rel=\"nofollow\">Custom Studies<\/a><\/p>\n<p>  <\/p>\n<h2 id=\"hochu-ispolzovat-neskolko-grafikov-v-odnom-okne\">\u0425\u043e\u0447\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u043e\u043a\u043d\u0435<\/h2>\n<p>  <\/p>\n<p>\u0412 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <strong>charting_library<\/strong> \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c HTML+CSS.<\/p>\n<p>  <\/p>\n<h1 id=\"open-source\">Open source<\/h1>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/marcius-studio\/tradingview-jsapi-binance\" rel=\"nofollow\">tradingview-jsapi-binance<\/a> \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u0431\u0438\u0440\u0436\u0430 Binance c JS API \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u043c \u0438 WebSocket \u0441\u0442\u0440\u0438\u043c\u043e\u043c<\/li>\n<li><a href=\"https:\/\/github.com\/marcius-studio\/tradingview-jsapi-forex\" rel=\"nofollow\">tradingview-jsapi-forex<\/a> \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 Forex \u0434\u043b\u044f JS API \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430. \u0415\u0436\u0435\u043c\u0438\u043d\u0443\u0442\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u0437 WebSocket \u0441 Save\\Load \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<h1 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h1>\n<p>  <\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043a\u0435\u0439\u0441 \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u2014 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043f\u0438\u0448\u0438\u0442\u0435, \u0434\u043e\u043f\u043e\u043b\u043d\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430. <\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0432\u0430\u0448\u0435 \u043c\u043d\u0435\u043d\u0438\u0435, \u043e\u043f\u044b\u0442, \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0438 \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\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\/post\/519784\/\"> https:\/\/habr.com\/ru\/post\/519784\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/519784\/\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lg\/ca\/vr\/lgcavrd_vrl1n9lo3thy51frlns.png\"><\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0412\u044b \u2014 \u0444\u0440\u0438\u043b\u0430\u043d\u0441\u0435\u0440 \u0438\u043b\u0438 CTO \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u043d\u043e \u0412\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0435\u0441\u044c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u044f \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u044e \u0412\u0430\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u0443\u0442\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b. \u0422\u0435, \u043a\u0442\u043e \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u0439\u0434\u0443\u0442 \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435. <\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 &quot;\u043a\u043d\u0438\u0433\u0438 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432&quot; \u0441 open source \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u043d\u043e\u0439 \u0431\u0438\u0440\u0436\u0438 Binance \u0438 Forex.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-310180","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/310180","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=310180"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/310180\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=310180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=310180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=310180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}