<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:georss="http://www.georss.org/georss" >
  <channel>
    <title>b4tman.ru</title>
    <link>https://blog.b4tman.ru/</link>
    <guid>https://blog.b4tman.ru/</guid>
    <description>Recent content on b4tman.ru</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ru</language>
    <turbo:analytics type="Yandex" id="48214757"></turbo:analytics>
	<managingEditor>mail@b4tman.ru (Dmitry Belyaev)</managingEditor>
    <webMaster>mail@b4tman.ru (Dmitry Belyaev)</webMaster>
    
	<atom:link href="https://blog.b4tman.ru/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item turbo="true">
      <title>minica - программа для создания сертификатов ssl</title>
      <link>https://blog.b4tman.ru/post/2024-10-10-minica/</link>
      <category>native-yes</category>
      <pubDate>Thu, 10 Oct 2024 16:45:26 +0300</pubDate>
      <author>mail@b4tman.ru</author>
      <guid>https://blog.b4tman.ru/post/2024-10-10-minica/</guid>
      <description>&lt;p&gt;Описал как создавать и использовать сертификаты для веб публикаций 1С.&lt;/p&gt;</description>
	  <turbo:source>https://blog.b4tman.ru/post/2024-10-10-minica/</turbo:source>
      <turbo:topic>minica - программа для создания сертификатов ssl</turbo:topic>
	  <turbo:content><![CDATA[
            <header><h1>minica - программа для создания сертификатов ssl</h1></header>
			<p>Описал как создавать и использовать сертификаты для веб публикаций 1С.</p>
<h2 id="введение">Введение</h2>
<p>Для автоматического обновления тонких клиентов через веб-публикацию, включая <strong>1C Link</strong>, необходимо использовать либо протокол <strong>http</strong>, что не является безопасным, либо <strong>https</strong> с корректным сертификатом, так как самоподписанный сертификат больше не подходит.</p>
<h2 id="создание-сертификатов">Создание сертификатов</h2>
<p>Для решения этой задачи можно воспользоваться программой <strong>minica</strong>, доступной по следующей ссылке:
<a href="https://github.com/jsha/minica">https://github.com/jsha/minica</a></p>
<p>Например:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">minica -ca-cert company-ca.pem -ca-key company-ca-key.pem -domains *.company.local,mysrv,anothername,localhost -ip-addresses 127.0.0.1,192.168.1.21
</span></span></code></pre></div><p>Получим файлы CA:</p>
<ul>
<li>
<p><code>company-ca.pem</code> — корневой сертификат, можно переименовать в <code>.crt</code> и установить на клиентах и на сервере</p>
</li>
<li>
<p><code>company-ca-key.pem</code> — ключ коренного сертификата (не нужен)</p>
</li>
</ul>
<p>и папку <code>_.company.local</code> с файлами:</p>
<ul>
<li><code>cert.pem</code> — можно переименовать в <code>.crt</code> и установить на сервер</li>
<li><code>key.pem</code> — ключ сертификата</li>
</ul>
<p>Но это файлы в формате <code>pem</code> (для закрытого ключа), который подходит для <strong>apache</strong> и <strong>nginx</strong>, но не подойдёт для <strong>IIS</strong>.</p>
<h2 id="конвертация-для-iis">Конвертация для IIS</h2>
<p>Для использования с <strong>IIS</strong> нужно сконвертировать файлы сертификатов.
Это можно сделать с помощью <code>openssl</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">openssl pkcs12 -export -out cert.pfx -inkey .<span class="se">\k</span>ey.pem -in .<span class="se">\c</span>ert.pem -certfile .<span class="se">\c</span>ert.pem
</span></span></code></pre></div><p>В итоге получится файл <code>cert.pfx</code>, который можно импортировать в хранилище сертификатов Windows и использовать в <strong>IIS</strong>.</p>
<h2 id="установка-на-клиентах">Установка на клиентах</h2>
<p>Сертификаты CA нужно установить на клиентах в &ldquo;Доверенные корневые центры сертификации&rdquo;.</p>
<p>На Windows можно установить так:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bat" data-lang="bat"><span class="line"><span class="cl">certutil -addstore <span class="s2">&#34;Root&#34;</span> 1C-Link-CA.crt
</span></span></code></pre></div><h2 id="сертификаты-1с-линк">Сертификаты 1С Линк</h2>
<p>Сейчасм можно скачать тут:
<a href="https://d.1c.link/1C-Link-CA.crt">https://d.1c.link/1C-Link-CA.crt</a></p>
<p>Но путь могут изменить, лучше посмотреть в документации.</p>
<h2 id="заключение">Заключение</h2>
<p>Исползование корневых сертификатов созданных с помощью <strong>minica</strong> позволяет пользоваться автоматическим обновлением тонких клиентов, при этом не жертвуя безопасностью.</p>]]> 
      </turbo:content>
      <content:encoded><![CDATA[
              <p>Описал как создавать и использовать сертификаты для веб публикаций 1С.</p>
<h2 id="введение">Введение</h2>
<p>Для автоматического обновления тонких клиентов через веб-публикацию, включая <strong>1C Link</strong>, необходимо использовать либо протокол <strong>http</strong>, что не является безопасным, либо <strong>https</strong> с корректным сертификатом, так как самоподписанный сертификат больше не подходит.</p>
<h2 id="создание-сертификатов">Создание сертификатов</h2>
<p>Для решения этой задачи можно воспользоваться программой <strong>minica</strong>, доступной по следующей ссылке:
<a href="https://github.com/jsha/minica">https://github.com/jsha/minica</a></p>
<p>Например:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">minica -ca-cert company-ca.pem -ca-key company-ca-key.pem -domains *.company.local,mysrv,anothername,localhost -ip-addresses 127.0.0.1,192.168.1.21
</span></span></code></pre></div><p>Получим файлы CA:</p>
<ul>
<li>
<p><code>company-ca.pem</code> — корневой сертификат, можно переименовать в <code>.crt</code> и установить на клиентах и на сервере</p>
</li>
<li>
<p><code>company-ca-key.pem</code> — ключ коренного сертификата (не нужен)</p>
</li>
</ul>
<p>и папку <code>_.company.local</code> с файлами:</p>
<ul>
<li><code>cert.pem</code> — можно переименовать в <code>.crt</code> и установить на сервер</li>
<li><code>key.pem</code> — ключ сертификата</li>
</ul>
<p>Но это файлы в формате <code>pem</code> (для закрытого ключа), который подходит для <strong>apache</strong> и <strong>nginx</strong>, но не подойдёт для <strong>IIS</strong>.</p>
<h2 id="конвертация-для-iis">Конвертация для IIS</h2>
<p>Для использования с <strong>IIS</strong> нужно сконвертировать файлы сертификатов.
Это можно сделать с помощью <code>openssl</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">openssl pkcs12 -export -out cert.pfx -inkey .<span class="se">\k</span>ey.pem -in .<span class="se">\c</span>ert.pem -certfile .<span class="se">\c</span>ert.pem
</span></span></code></pre></div><p>В итоге получится файл <code>cert.pfx</code>, который можно импортировать в хранилище сертификатов Windows и использовать в <strong>IIS</strong>.</p>
<h2 id="установка-на-клиентах">Установка на клиентах</h2>
<p>Сертификаты CA нужно установить на клиентах в &ldquo;Доверенные корневые центры сертификации&rdquo;.</p>
<p>На Windows можно установить так:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bat" data-lang="bat"><span class="line"><span class="cl">certutil -addstore <span class="s2">&#34;Root&#34;</span> 1C-Link-CA.crt
</span></span></code></pre></div><h2 id="сертификаты-1с-линк">Сертификаты 1С Линк</h2>
<p>Сейчасм можно скачать тут:
<a href="https://d.1c.link/1C-Link-CA.crt">https://d.1c.link/1C-Link-CA.crt</a></p>
<p>Но путь могут изменить, лучше посмотреть в документации.</p>
<h2 id="заключение">Заключение</h2>
<p>Исползование корневых сертификатов созданных с помощью <strong>minica</strong> позволяет пользоваться автоматическим обновлением тонких клиентов, при этом не жертвуя безопасностью.</p>]]> 
      </content:encoded>
    </item>
    
    <item turbo="true">
      <title>Ссылки для спонсоров</title>
      <link>https://blog.b4tman.ru/post/2024-10-07-sponsor/</link>
      <category>native-yes</category>
      <pubDate>Mon, 07 Oct 2024 19:53:29 +0300</pubDate>
      <author>mail@b4tman.ru</author>
      <guid>https://blog.b4tman.ru/post/2024-10-07-sponsor/</guid>
      <description>&lt;p&gt;Добавил ссылки для тех, кто вдруг захочет поддержать меня.&lt;/p&gt;</description>
	  <turbo:source>https://blog.b4tman.ru/post/2024-10-07-sponsor/</turbo:source>
      <turbo:topic>Ссылки для спонсоров</turbo:topic>
	  <turbo:content><![CDATA[
            <header><h1>Ссылки для спонсоров</h1></header>
			<p>Добавил ссылки для тех, кто вдруг захочет поддержать меня.</p>
<p>Поддержать меня можно тут:</p>
<ul>
<li><a href="https://boosty.to/0xffff">Подписка на Бусти</a></li>
<li><a href="https://dalink.to/b4tman1">DonationAlerts (DALINK)</a></li>
<li><a href="https://live.vkvideo.ru/0xffff">Канал на VK Video Live</a></li>
<li><a href="https://dzen.ru/0xffff">Канал на Дзене</a></li>
</ul>]]> 
      </turbo:content>
      <content:encoded><![CDATA[
              <p>Добавил ссылки для тех, кто вдруг захочет поддержать меня.</p>
<p>Поддержать меня можно тут:</p>
<ul>
<li><a href="https://boosty.to/0xffff">Подписка на Бусти</a></li>
<li><a href="https://dalink.to/b4tman1">DonationAlerts (DALINK)</a></li>
<li><a href="https://live.vkvideo.ru/0xffff">Канал на VK Video Live</a></li>
<li><a href="https://dzen.ru/0xffff">Канал на Дзене</a></li>
</ul>]]> 
      </content:encoded>
    </item>
    
    <item turbo="true">
      <title>swatchdog - простая отправлялка запросов</title>
      <link>https://blog.b4tman.ru/post/2024-09-10-swatchdog-fork/</link>
      <category>native-yes</category>
      <pubDate>Tue, 10 Sep 2024 00:00:00 +0000</pubDate>
      <author>mail@b4tman.ru</author>
      <guid>https://blog.b4tman.ru/post/2024-09-10-swatchdog-fork/</guid>
      <description>&lt;p&gt;Форкнул &lt;a href=&#34;https://github.com/b4tman/swatchdog&#34;&gt;swatchdog&lt;/a&gt; - программу для Push монитора &lt;a href=&#34;https://github.com/louislam/uptime-kuma&#34;&gt;Uptime Kuma&lt;/a&gt;.&lt;/p&gt;</description>
	  <turbo:source>https://blog.b4tman.ru/post/2024-09-10-swatchdog-fork/</turbo:source>
      <turbo:topic>swatchdog - простая отправлялка запросов</turbo:topic>
	  <turbo:content><![CDATA[
            <header><h1>swatchdog - простая отправлялка запросов</h1></header>
			<p>Форкнул <a href="https://github.com/b4tman/swatchdog">swatchdog</a> - программу для Push монитора <a href="https://github.com/louislam/uptime-kuma">Uptime Kuma</a>.</p>
<p>В форк добавил:</p>
<ul>
<li>возможность установки и запуска как службы Windows;</li>
<li>замер и отправку времени пинга;</li>
<li>отправку времени работы (<code>uptime</code>) в параметре <code>msg</code>.</li>
</ul>
<p>В Linux также работает.</p>
<p>Оригинал <a href="https://github.com/ImSingee/swatchdog">тут</a>.</p>]]> 
      </turbo:content>
      <content:encoded><![CDATA[
              <p>Форкнул <a href="https://github.com/b4tman/swatchdog">swatchdog</a> - программу для Push монитора <a href="https://github.com/louislam/uptime-kuma">Uptime Kuma</a>.</p>
<p>В форк добавил:</p>
<ul>
<li>возможность установки и запуска как службы Windows;</li>
<li>замер и отправку времени пинга;</li>
<li>отправку времени работы (<code>uptime</code>) в параметре <code>msg</code>.</li>
</ul>
<p>В Linux также работает.</p>
<p>Оригинал <a href="https://github.com/ImSingee/swatchdog">тут</a>.</p>]]> 
      </content:encoded>
    </item>
    
    <item turbo="true">
      <title>Анализ корреляций биржевых колебаний</title>
      <link>https://blog.b4tman.ru/post/2020-11-13-pandas-stoks/</link>
      <category>native-yes</category>
      <pubDate>Thu, 12 Nov 2020 00:00:00 +0000</pubDate>
      <author>mail@b4tman.ru</author>
      <guid>https://blog.b4tman.ru/post/2020-11-13-pandas-stoks/</guid>
      <description>&lt;p&gt;Поэкспирементировал в Jupyter Lab и нарисовал несколько графиков на тему корреляции колебаний курса ETF и акций.&lt;/p&gt;</description>
	  <turbo:source>https://blog.b4tman.ru/post/2020-11-13-pandas-stoks/</turbo:source>
      <turbo:topic>Анализ корреляций биржевых колебаний</turbo:topic>
	  <turbo:content><![CDATA[
            <header><h1>Анализ корреляций биржевых колебаний</h1></header>
			<p>Поэкспирементировал в Jupyter Lab и нарисовал несколько графиков на тему корреляции колебаний курса ETF и акций.</p>
<p>Ставим зависимости, если надо.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># !conda install snappy python-snappy pyarrow fastparquet </span>
</span></span><span class="line"><span class="cl"><span class="c1"># !pip install pandas_datareader</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Настраиваем графики и импортируем библиотеки.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="o">%</span><span class="n">matplotlib</span> <span class="n">inline</span> 
</span></span><span class="line"><span class="cl"><span class="o">%</span><span class="n">config</span> <span class="n">InlineBackend</span><span class="o">.</span><span class="n">figure_format</span> <span class="o">=</span> <span class="s1">&#39;svg&#39;</span> <span class="c1">#векторный формат</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">style</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="s1">&#39;ggplot&#39;</span><span class="p">)</span>  <span class="c1"># Красивые графики</span>
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;figure.figsize&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>  <span class="c1"># Размер картинок</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">timedelta</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">math</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">pandas_datareader.data</span> <span class="k">as</span> <span class="nn">web</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Скачиваем информацию через API биржи в локальный каталог.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">tikers</span> <span class="o">=</span> <span class="s1">&#39;SBER,AFKS,GAZP,MAIL,YNDX,FXUS,FXIT,FXCN,FXDE,FXWO,FXRW&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">download_data</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">filepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">tiker</span><span class="si">}</span><span class="s1">_2020.parquet&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span>
</span></span><span class="line"><span class="cl">    <span class="n">df</span> <span class="o">=</span> <span class="n">web</span><span class="o">.</span><span class="n">DataReader</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="s1">&#39;moex&#39;</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="s1">&#39;2020-01-01&#39;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;2020-11-12&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="n">engine</span><span class="o">=</span><span class="s1">&#39;fastparquet&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;downloading: </span><span class="si">{</span><span class="n">tiker</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">download_data</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="s2">&#34;D:</span><span class="se">\\</span><span class="s2">data2</span><span class="se">\\</span><span class="s2">Documents</span><span class="se">\\</span><span class="s2">notebooks&#34;</span><span class="p">)</span>
</span></span></code></pre></div><pre><code>downloading: SBER
downloading: AFKS
downloading: GAZP
downloading: MAIL
downloading: YNDX
downloading: FXUS
downloading: FXIT
downloading: FXCN
downloading: FXDE
downloading: FXWO
downloading: FXRW
</code></pre>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Загружаем кешированные на диске данные.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">load_data</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">result</span> <span class="o">=</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">    <span class="n">filepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">tiker</span><span class="si">}</span><span class="s1">_2020.parquet&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">dfs</span> <span class="o">=</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">]</span> <span class="o">=</span> <span class="n">load_data</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="s2">&#34;D:</span><span class="se">\\</span><span class="s2">data2</span><span class="se">\\</span><span class="s2">Documents</span><span class="se">\\</span><span class="s2">notebooks&#34;</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Значения полей <code>BOARDID</code> (режимы торгов) у акций и ETF разные. Для акций берём <code>TQBR</code> а для фондов <code>TQTF</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">dfs</span><span class="p">[</span><span class="s1">&#39;FXIT&#39;</span><span class="p">][</span><span class="s1">&#39;BOARDID&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">(),</span> <span class="n">dfs</span><span class="p">[</span><span class="s1">&#39;YNDX&#39;</span><span class="p">][</span><span class="s1">&#39;BOARDID&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">()</span>
</span></span></code></pre></div><pre><code>(array(['TQTD', 'TQTF', 'SOTC', 'RPMO', 'PSRP', 'PSTF', 'PTTF'],
       dtype=object),
 array(['TQBR', 'SPEQ', 'SOTC', 'RPMO', 'RPEU', 'RPEO', 'MXBD', 'EQRP',
        'PSRP', 'EQRD', 'LIQR', 'PSRD', 'PSRE', 'PTEQ', 'PSEQ'],
       dtype=object))
</code></pre>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Обрабатываем данные, чтобы убрать всё кроме нужного режима торгов, и интерполируем цену.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">price_data</span><span class="p">(</span><span class="n">x_df</span><span class="p">,</span> <span class="n">boardid</span><span class="o">=</span><span class="s1">&#39;TQBR&#39;</span><span class="p">):</span>   
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span> <span class="o">=</span> <span class="n">x_df</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span> <span class="o">=</span> <span class="n">xdf</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;BOARDID&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">boardid</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s1">&#39;all&#39;</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s1">&#39;all&#39;</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="mi">0</span> <span class="o">==</span> <span class="n">xdf</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">xdf</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;OPEN&#39;</span><span class="p">]</span>    <span class="o">=</span> <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;OPEN&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">interpolate</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="s1">&#39;polynomial&#39;</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;CLOSE&#39;</span><span class="p">]</span>   <span class="o">=</span> <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;CLOSE&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">interpolate</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="s1">&#39;polynomial&#39;</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;WAPRICE&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;WAPRICE&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">interpolate</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="s1">&#39;polynomial&#39;</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">xdf</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># для простоты, считаем что если имя начинается на FX то это ETF</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">]</span> <span class="o">=</span> <span class="n">price_data</span><span class="p">(</span><span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">],</span> <span class="n">boardid</span><span class="o">=</span><span class="s1">&#39;TQTF&#39;</span> <span class="k">if</span> <span class="s1">&#39;FX&#39;</span> <span class="ow">in</span> <span class="n">tiker</span> <span class="k">else</span> <span class="s1">&#39;TQBR&#39;</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Нормализуем графики с помомщью отношения средневзвешеной (по объёму торгов) цены <code>WAPRICE</code> и медианой этого показателя.
Затем соединяем таблицы и строим графики.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># WAPRICE/median</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">calc_wdm</span><span class="p">(</span><span class="n">df</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;WAPRICE&#39;</span><span class="p">]</span> <span class="o">/</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;WAPRICE&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">median</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">][</span><span class="n">tiker</span><span class="p">]</span> <span class="o">=</span> <span class="n">calc_wdm</span><span class="p">(</span><span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">df_base</span> <span class="o">=</span> <span class="n">dfs</span><span class="p">[</span><span class="s1">&#39;FXIT&#39;</span><span class="p">][[]]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">merge_dfs</span><span class="p">(</span><span class="n">base</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">result</span> <span class="o">=</span> <span class="n">base</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">][[</span><span class="n">tiker</span><span class="p">]],</span> <span class="n">how</span><span class="o">=</span><span class="s1">&#39;outer&#39;</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="s1">&#39;TRADEDATE&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span> <span class="o">=</span> <span class="n">merge_dfs</span><span class="p">(</span><span class="n">df_base</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="p">[</span><span class="s1">&#39;diff_us&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">xxdf</span><span class="p">[</span><span class="s1">&#39;FXUS&#39;</span><span class="p">]</span> <span class="o">-</span> <span class="n">xxdf</span><span class="p">[</span><span class="s1">&#39;FXIT&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># рисуем графики</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;FXUS,FXIT,FXCN,FXDE,FXWO,FXRW&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;ETF: WAPRICE / median&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;SBER,AFKS,GAZP,MAIL,YNDX&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;RU: WAPRICE / median&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;diff_us&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;FXUS - FXIT&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;FXIT,YNDX&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;FXIT &amp; YNDX&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;FXWO,FXRW,FXUS&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;FXUS &amp; FXWO &amp; FXRW&#39;</span><span class="p">);</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Все ETF Finex достаточно сильно коррелируют, за исключением FXRW конечно.
<img src="/img/pstoks-201113/output_8_1.svg" alt="svg"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>На российском рынке по произвольно выбранным акциям корреляция слабая.
<img src="/img/pstoks-201113/output_8_2.svg" alt="svg"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Разница в колебаниях FXUS и FXIT.
<img src="/img/pstoks-201113/output_8_3.svg" alt="svg"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Между Яндексом и FXIT некоторая корреляция есть. <br>
<img src="/img/pstoks-201113/output_8_4.svg" alt="svg"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Между FXWO и FXUS корреляция очень сильная.
<img src="/img/pstoks-201113/output_8_5.svg" alt="svg"></p>]]> 
      </turbo:content>
      <content:encoded><![CDATA[
              <p>Поэкспирементировал в Jupyter Lab и нарисовал несколько графиков на тему корреляции колебаний курса ETF и акций.</p>
<p>Ставим зависимости, если надо.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># !conda install snappy python-snappy pyarrow fastparquet </span>
</span></span><span class="line"><span class="cl"><span class="c1"># !pip install pandas_datareader</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Настраиваем графики и импортируем библиотеки.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="o">%</span><span class="n">matplotlib</span> <span class="n">inline</span> 
</span></span><span class="line"><span class="cl"><span class="o">%</span><span class="n">config</span> <span class="n">InlineBackend</span><span class="o">.</span><span class="n">figure_format</span> <span class="o">=</span> <span class="s1">&#39;svg&#39;</span> <span class="c1">#векторный формат</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">style</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="s1">&#39;ggplot&#39;</span><span class="p">)</span>  <span class="c1"># Красивые графики</span>
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;figure.figsize&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>  <span class="c1"># Размер картинок</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">timedelta</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">math</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">pandas_datareader.data</span> <span class="k">as</span> <span class="nn">web</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Скачиваем информацию через API биржи в локальный каталог.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">tikers</span> <span class="o">=</span> <span class="s1">&#39;SBER,AFKS,GAZP,MAIL,YNDX,FXUS,FXIT,FXCN,FXDE,FXWO,FXRW&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">download_data</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">filepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">tiker</span><span class="si">}</span><span class="s1">_2020.parquet&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span>
</span></span><span class="line"><span class="cl">    <span class="n">df</span> <span class="o">=</span> <span class="n">web</span><span class="o">.</span><span class="n">DataReader</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="s1">&#39;moex&#39;</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="s1">&#39;2020-01-01&#39;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;2020-11-12&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="n">engine</span><span class="o">=</span><span class="s1">&#39;fastparquet&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;downloading: </span><span class="si">{</span><span class="n">tiker</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">download_data</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="s2">&#34;D:</span><span class="se">\\</span><span class="s2">data2</span><span class="se">\\</span><span class="s2">Documents</span><span class="se">\\</span><span class="s2">notebooks&#34;</span><span class="p">)</span>
</span></span></code></pre></div><pre><code>downloading: SBER
downloading: AFKS
downloading: GAZP
downloading: MAIL
downloading: YNDX
downloading: FXUS
downloading: FXIT
downloading: FXCN
downloading: FXDE
downloading: FXWO
downloading: FXRW
</code></pre>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Загружаем кешированные на диске данные.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">load_data</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">result</span> <span class="o">=</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">    <span class="n">filepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">tiker</span><span class="si">}</span><span class="s1">_2020.parquet&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">dfs</span> <span class="o">=</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">]</span> <span class="o">=</span> <span class="n">load_data</span><span class="p">(</span><span class="n">tiker</span><span class="p">,</span> <span class="s2">&#34;D:</span><span class="se">\\</span><span class="s2">data2</span><span class="se">\\</span><span class="s2">Documents</span><span class="se">\\</span><span class="s2">notebooks&#34;</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Значения полей <code>BOARDID</code> (режимы торгов) у акций и ETF разные. Для акций берём <code>TQBR</code> а для фондов <code>TQTF</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">dfs</span><span class="p">[</span><span class="s1">&#39;FXIT&#39;</span><span class="p">][</span><span class="s1">&#39;BOARDID&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">(),</span> <span class="n">dfs</span><span class="p">[</span><span class="s1">&#39;YNDX&#39;</span><span class="p">][</span><span class="s1">&#39;BOARDID&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">()</span>
</span></span></code></pre></div><pre><code>(array(['TQTD', 'TQTF', 'SOTC', 'RPMO', 'PSRP', 'PSTF', 'PTTF'],
       dtype=object),
 array(['TQBR', 'SPEQ', 'SOTC', 'RPMO', 'RPEU', 'RPEO', 'MXBD', 'EQRP',
        'PSRP', 'EQRD', 'LIQR', 'PSRD', 'PSRE', 'PTEQ', 'PSEQ'],
       dtype=object))
</code></pre>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Обрабатываем данные, чтобы убрать всё кроме нужного режима торгов, и интерполируем цену.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">price_data</span><span class="p">(</span><span class="n">x_df</span><span class="p">,</span> <span class="n">boardid</span><span class="o">=</span><span class="s1">&#39;TQBR&#39;</span><span class="p">):</span>   
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span> <span class="o">=</span> <span class="n">x_df</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span> <span class="o">=</span> <span class="n">xdf</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;BOARDID&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">boardid</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s1">&#39;all&#39;</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s1">&#39;all&#39;</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="mi">0</span> <span class="o">==</span> <span class="n">xdf</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">xdf</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;OPEN&#39;</span><span class="p">]</span>    <span class="o">=</span> <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;OPEN&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">interpolate</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="s1">&#39;polynomial&#39;</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;CLOSE&#39;</span><span class="p">]</span>   <span class="o">=</span> <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;CLOSE&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">interpolate</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="s1">&#39;polynomial&#39;</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;WAPRICE&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">xdf</span><span class="p">[</span><span class="s1">&#39;WAPRICE&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">interpolate</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="s1">&#39;polynomial&#39;</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">xdf</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># для простоты, считаем что если имя начинается на FX то это ETF</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">]</span> <span class="o">=</span> <span class="n">price_data</span><span class="p">(</span><span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">],</span> <span class="n">boardid</span><span class="o">=</span><span class="s1">&#39;TQTF&#39;</span> <span class="k">if</span> <span class="s1">&#39;FX&#39;</span> <span class="ow">in</span> <span class="n">tiker</span> <span class="k">else</span> <span class="s1">&#39;TQBR&#39;</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Нормализуем графики с помомщью отношения средневзвешеной (по объёму торгов) цены <code>WAPRICE</code> и медианой этого показателя.
Затем соединяем таблицы и строим графики.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># WAPRICE/median</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">calc_wdm</span><span class="p">(</span><span class="n">df</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;WAPRICE&#39;</span><span class="p">]</span> <span class="o">/</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;WAPRICE&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">median</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">][</span><span class="n">tiker</span><span class="p">]</span> <span class="o">=</span> <span class="n">calc_wdm</span><span class="p">(</span><span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">df_base</span> <span class="o">=</span> <span class="n">dfs</span><span class="p">[</span><span class="s1">&#39;FXIT&#39;</span><span class="p">][[]]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">merge_dfs</span><span class="p">(</span><span class="n">base</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">result</span> <span class="o">=</span> <span class="n">base</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">tiker</span> <span class="ow">in</span> <span class="n">tikers</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">dfs</span><span class="p">[</span><span class="n">tiker</span><span class="p">][[</span><span class="n">tiker</span><span class="p">]],</span> <span class="n">how</span><span class="o">=</span><span class="s1">&#39;outer&#39;</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="s1">&#39;TRADEDATE&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span> <span class="o">=</span> <span class="n">merge_dfs</span><span class="p">(</span><span class="n">df_base</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="p">[</span><span class="s1">&#39;diff_us&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">xxdf</span><span class="p">[</span><span class="s1">&#39;FXUS&#39;</span><span class="p">]</span> <span class="o">-</span> <span class="n">xxdf</span><span class="p">[</span><span class="s1">&#39;FXIT&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># рисуем графики</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;FXUS,FXIT,FXCN,FXDE,FXWO,FXRW&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;ETF: WAPRICE / median&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;SBER,AFKS,GAZP,MAIL,YNDX&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;RU: WAPRICE / median&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;diff_us&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;FXUS - FXIT&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;FXIT,YNDX&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;FXIT &amp; YNDX&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xxdf</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s1">&#39;FXWO,FXRW,FXUS&#39;</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;line&#39;</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;FXUS &amp; FXWO &amp; FXRW&#39;</span><span class="p">);</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Все ETF Finex достаточно сильно коррелируют, за исключением FXRW конечно.
<img src="/img/pstoks-201113/output_8_1.svg" alt="svg"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>На российском рынке по произвольно выбранным акциям корреляция слабая.
<img src="/img/pstoks-201113/output_8_2.svg" alt="svg"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Разница в колебаниях FXUS и FXIT.
<img src="/img/pstoks-201113/output_8_3.svg" alt="svg"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Между Яндексом и FXIT некоторая корреляция есть. <br>
<img src="/img/pstoks-201113/output_8_4.svg" alt="svg"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Между FXWO и FXUS корреляция очень сильная.
<img src="/img/pstoks-201113/output_8_5.svg" alt="svg"></p>]]> 
      </content:encoded>
    </item>
    
    <item turbo="true">
      <title>Сертификаты 1С</title>
      <link>https://blog.b4tman.ru/post/2020-06-14-certs-1c/</link>
      <category>native-yes</category>
      <pubDate>Sun, 14 Jun 2020 00:00:00 +0000</pubDate>
      <author>mail@b4tman.ru</author>
      <guid>https://blog.b4tman.ru/post/2020-06-14-certs-1c/</guid>
      <description>&lt;p&gt;В &lt;a href=&#34;https://uc1.1c.ru/check-certificate/&#34;&gt;сервисе проверки сертификатов 1С&lt;/a&gt; нашел несколько своих.&lt;/p&gt;</description>
	  <turbo:source>https://blog.b4tman.ru/post/2020-06-14-certs-1c/</turbo:source>
      <turbo:topic>Сертификаты 1С</turbo:topic>
	  <turbo:content><![CDATA[
            <header><h1>Сертификаты 1С</h1></header>
			<p>В <a href="https://uc1.1c.ru/check-certificate/">сервисе проверки сертификатов 1С</a> нашел несколько своих.</p>



<div class="gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition" itemscope itemtype="http://schema.org/ImageGallery">
	  
  
  <link rel="stylesheet" href="https://blog.b4tman.ru/css/hugo-easy-gallery.css" />
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-prof-plat82.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-prof-plat82.png" alt="1С:Профессионал по платформе"/>
      </div>
      <a href="/img/certs/cert-1s-prof-plat82.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Профессионал по платформе</p>
        </figcaption>
    </figure>
  </div>

  
  
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-spec-plat83.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-spec-plat83.png" alt="1С:Специалист по платформе"/>
      </div>
      <a href="/img/certs/cert-1s-spec-plat83.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Специалист по платформе</p>
        </figcaption>
    </figure>
  </div>

  
  
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-prof-its.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-prof-its.png" alt="1С:Профессионал по ИТС (Специалист по сопровождению ИТС)"/>
      </div>
      <a href="/img/certs/cert-1s-prof-its.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Профессионал по ИТС (Специалист по сопровождению ИТС)</p>
        </figcaption>
    </figure>
  </div>

  
  
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-prof-zup.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-prof-zup.png" alt="1С:Профессионал. Зарплата и управление персоналом 8"/>
      </div>
      <a href="/img/certs/cert-1s-prof-zup.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Профессионал. Зарплата и управление персоналом 8</p>
        </figcaption>
    </figure>
  </div>

  
  
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-prof-buh.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-prof-buh.png" alt="1С:Профессионал. Бухгалтерия 8"/>
      </div>
      <a href="/img/certs/cert-1s-prof-buh.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Профессионал. Бухгалтерия 8</p>
        </figcaption>
    </figure>
  </div>


</div>

<p>Файлы сертификатов <a href="https://yadi.sk/d/PLAmmN4nGpuKoA">на диске</a></p>]]> 
      </turbo:content>
      <content:encoded><![CDATA[
              <p>В <a href="https://uc1.1c.ru/check-certificate/">сервисе проверки сертификатов 1С</a> нашел несколько своих.</p>



<div class="gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition" itemscope itemtype="http://schema.org/ImageGallery">
	  
  
  <link rel="stylesheet" href="https://blog.b4tman.ru/css/hugo-easy-gallery.css" />
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-prof-plat82.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-prof-plat82.png" alt="1С:Профессионал по платформе"/>
      </div>
      <a href="/img/certs/cert-1s-prof-plat82.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Профессионал по платформе</p>
        </figcaption>
    </figure>
  </div>

  
  
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-spec-plat83.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-spec-plat83.png" alt="1С:Специалист по платформе"/>
      </div>
      <a href="/img/certs/cert-1s-spec-plat83.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Специалист по платформе</p>
        </figcaption>
    </figure>
  </div>

  
  
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-prof-its.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-prof-its.png" alt="1С:Профессионал по ИТС (Специалист по сопровождению ИТС)"/>
      </div>
      <a href="/img/certs/cert-1s-prof-its.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Профессионал по ИТС (Специалист по сопровождению ИТС)</p>
        </figcaption>
    </figure>
  </div>

  
  
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-prof-zup.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-prof-zup.png" alt="1С:Профессионал. Зарплата и управление персоналом 8"/>
      </div>
      <a href="/img/certs/cert-1s-prof-zup.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Профессионал. Зарплата и управление персоналом 8</p>
        </figcaption>
    </figure>
  </div>

  
  
  <div class="box" >
    <figure  itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
      <div class="img" style="background-image: url('https://blog.b4tman.ru//img/certs/cert-1s-prof-buh.png');">
        <img itemprop="thumbnail" src="/img/certs/cert-1s-prof-buh.png" alt="1С:Профессионал. Бухгалтерия 8"/>
      </div>
      <a href="/img/certs/cert-1s-prof-buh.png" itemprop="contentUrl"></a>
        <figcaption>
            <p>1С:Профессионал. Бухгалтерия 8</p>
        </figcaption>
    </figure>
  </div>


</div>

<p>Файлы сертификатов <a href="https://yadi.sk/d/PLAmmN4nGpuKoA">на диске</a></p>]]> 
      </content:encoded>
    </item>
    
    <item turbo="true">
      <title>Про коронавирус</title>
      <link>https://blog.b4tman.ru/post/2020-03-22-covid-2019/</link>
      <category>native-yes</category>
      <pubDate>Sun, 22 Mar 2020 00:00:00 +0000</pubDate>
      <author>mail@b4tman.ru</author>
      <guid>https://blog.b4tman.ru/post/2020-03-22-covid-2019/</guid>
      <description>&lt;p&gt;Просто &lt;a href=&#34;https://youtu.be/BtN-goy9VOY&#34;&gt;видео&lt;/a&gt; про коронавирус.&lt;/p&gt;</description>
	  <turbo:source>https://blog.b4tman.ru/post/2020-03-22-covid-2019/</turbo:source>
      <turbo:topic>Про коронавирус</turbo:topic>
	  <turbo:content><![CDATA[
            <header><h1>Про коронавирус</h1></header>
			<p>Просто <a href="https://youtu.be/BtN-goy9VOY">видео</a> про коронавирус.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/BtN-goy9VOY?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<p>И ещё одно <a href="https://youtu.be/Kas0tIxDvrg">видео</a>, про экспоненциальный рост.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Kas0tIxDvrg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<p>И <a href="https://youtu.be/54XLXg4fYsc">ещё</a>.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/54XLXg4fYsc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Текстовые статьи:</p>
<ul>
<li>Биомолекула: <a href="https://biomolecula.ru/articles/covid-19-chto-my-znaem-i-chego-ne-znaem">COVID-19: что мы знаем и чего не знаем</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div>]]> 
      </turbo:content>
      <content:encoded><![CDATA[
              <p>Просто <a href="https://youtu.be/BtN-goy9VOY">видео</a> про коронавирус.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/BtN-goy9VOY?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<p>И ещё одно <a href="https://youtu.be/Kas0tIxDvrg">видео</a>, про экспоненциальный рост.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Kas0tIxDvrg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<p>И <a href="https://youtu.be/54XLXg4fYsc">ещё</a>.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/54XLXg4fYsc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div><p>Текстовые статьи:</p>
<ul>
<li>Биомолекула: <a href="https://biomolecula.ru/articles/covid-19-chto-my-znaem-i-chego-ne-znaem">COVID-19: что мы знаем и чего не знаем</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"></code></pre></div>]]> 
      </content:encoded>
    </item>
    
    <item turbo="true">
      <title>Первый пост!</title>
      <link>https://blog.b4tman.ru/post/2019-08-13-first-post/</link>
      <category>native-yes</category>
      <pubDate>Tue, 13 Aug 2019 00:00:00 +0000</pubDate>
      <author>mail@b4tman.ru</author>
      <guid>https://blog.b4tman.ru/post/2019-08-13-first-post/</guid>
      <description>&lt;p&gt;Привет мир! Ну вот наконец то и первый пост!&lt;/p&gt;</description>
	  <turbo:source>https://blog.b4tman.ru/post/2019-08-13-first-post/</turbo:source>
      <turbo:topic>Первый пост!</turbo:topic>
	  <turbo:content><![CDATA[
            <header><h1>Первый пост!</h1></header>
			<p>Привет мир! Ну вот наконец то и первый пост!</p>
]]> 
      </turbo:content>
      <content:encoded><![CDATA[
              <p>Привет мир! Ну вот наконец то и первый пост!</p>
]]> 
      </content:encoded>
    </item>
    
  </channel>
</rss>
