﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Сообщество. StockSharp</title>
  <id>https://stocksharp.ru/handlers/atom.ashx?category=community&amp;page=177</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-06T05:57:31Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=community&amp;page=177" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/topic/351/</id>
    <title type="text">ЛЧИ, данные</title>
    <published>2012-04-01T20:26:28Z</published>
    <updated>2012-12-17T14:42:35Z</updated>
    <author>
      <name>vlad1024</name>
      <uri>https://stocksharp.ru/users/768/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="WealthLab" />
    <category term="Python" />
    <category term="Статьи" />
    <content type="html">С 2003 года проводится ежегодный всероссийский чемпионат по биржевой торговле – конкурс &amp;quot;Лучший частный инвестор&amp;quot;. Многим трейдерам интересна статистическая составляющая этого конкурса, а именно анализ работы его участников и агрегированные данные. В данной статье показан способ получения статистики по ЛЧИ на примере данных 2011 года с использованием Python.&lt;br /&gt;&lt;br /&gt;Скрипты на Питоне для выкачивания данных из статистики ЛЧИ и пост процессинга, а также данные по всем участникам за ЛЧИ 2011 &lt;a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAABwqdrcBFGFGlRVeYyEx_QRAhJR-NmfvC4QO1zL_9h9M9HgYwuQ1GBohxiAPoelEEZ_pEtcLJ8AYJUH1zZaxbQT6oD7zsqAD11Blviz2ec8KQ" title="http://narod.ru/disk/44882504001.d7c35f3ac792adb077498439d010da2c/lchi.rar.html"&gt;скачать здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Как использовать?&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Скачать и установить сборку питона, если он не установлен (&lt;a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAAAxtMfQxFnmJ2ZlhMnneGRQBpCe4aKoi-D0KUXjkQGc0XbU_SFbHew-UZr12fR0LU-1zP6jtP0wXcHq1TGpZMLreKO3vyS6Ikc9XWDTH53rZBLr1_ytUAKjYv8paNlh1caGpzoRUDGCFABI9g4UuS0p" title="http://sourceforge.net/projects/numpy/files/NumPy/1.4.1/numpy-1.4.1-win32-superpack-python2.6.exe/download"&gt;ссылка 1&lt;/a&gt; и &lt;a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAADOLieoAnu7d4IqdQoXcFdNEWpg5VO5LZanMpRU76dCFFD46tlpqrtMogV9fzKQ9VDLuefu7FvU4hsZuUWcoqH9" title="http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi"&gt;ссылка 2&lt;/a&gt;).&lt;br /&gt;&lt;li&gt;Набрать в командной строке команду &amp;quot;python&amp;quot;. Должна появиться консоль питона (если этого не произошло, необходимо прописать в PATH путь к интерпретатору).&lt;br /&gt;&lt;li&gt;Скрипт &lt;em&gt;download.py&lt;/em&gt; скачивает данные для заданного года и участника. Пример: python download.py 2011 dr-mart &lt;br /&gt;&lt;li&gt;Скрипт &lt;em&gt;agregate.py&lt;/em&gt; агрегирует скаченные данные (т.е. раскладывает по инструментам, фиксит вечернюю сессию в хронологическом порядке, немного склеивает сделки и считает балансовую позицию).&lt;br /&gt;Пример: &lt;em&gt;python agregate.py 2011 dr-mart&lt;/em&gt;&lt;br /&gt;&lt;li&gt;В результате должно получиться (dr-mart_RIZ1.csv):&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:python"&gt;
code,direction,price,amount,time,date,balance 

RIZ1,1,122185.0,83,194936,20111005,83
RIZ1,-1,122220.0,-83,194956,20111005,0
RIZ1,-1,125610.0,-30,155054,20111006,-30
RIZ1,1,125965.0,6,174509,20111006,-24
RIZ1,1,125965.0,14,174510,20111006,-10
RIZ1,1,125965.0,1,174511,20111006,-9
RIZ1,1,126110.0,30,174515,20111006,21
RIZ1,1,126100.0,9,174616,20111006,30
RIZ1,1,125965.0,9,174645,20111006,39
RIZ1,-1,125100.0,-30,175144,20111006,9
RIZ1,1,125760.0,21,175858,20111006,30
RIZ1,1,126490.0,30,181004,20111006,60
RIZ1,-1,129025.0,-60,221820,20111006,0
RIZ1,-1,129780.0,-15,125659,20111007,-15
RIZ1,1,130630.0,15,160719,20111007,0
RIZ1,-1,131515.0,-15,175620,20111007,-15
RIZ1,-1,129180.0,-10,203153,20111007,-25
RIZ1,1,130750.0,25,232610,20111007,0&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;В аттаче — агрегированные текущие данные за 2011 для всех участников.&lt;br /&gt;&lt;br /&gt;В корне архива &lt;em&gt;lchi/VisualizeStrategy.wld&lt;/em&gt; расположена стратегия для WealtLab 5, которая визуализирует агрегированные данные.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Порядок действий:&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Экспортировать данные по инструменту в data sets за период ЛЧИ (например, через Ascii Files — данные от финама размещены в папке &lt;em&gt;lchi/rts_m1_lchi&lt;/em&gt;)&lt;br /&gt;&lt;li&gt;Создать новую пустую стратегию File → New → New Strategy From Code. В открывшуюся новую стратегию необходимо скопировать и заменить код из &lt;em&gt;VisualizeStrategy.wld&lt;/em&gt;&lt;br /&gt;&lt;li&gt;Единственный параметр стратегии — это filePath; он идет первой строкой в методе Execute. В него необходимо прописать полный путь до файла, содержащего агрегированные с ЛЧИ данные по инструменту. Например, если распаковать архив lchi.rar в каталог c:/project, после чего мы хотим посмотреть торговлю dr-mart на ri, получаем следующее:&lt;br /&gt;&lt;em&gt;string filePath = &amp;#171;c:/project/lchi/data/2011/agregate/dr-mart_RIZ1.csv&amp;#187;&lt;/em&gt;. Вместо &lt;em&gt;dr_mart_RIZ1.csv&lt;/em&gt; может быть любой другой файл из каталога &lt;em&gt;agregate&lt;/em&gt;. &lt;b&gt;Все слэши в пути должны быть обратными, как в примере!&lt;/b&gt;&lt;/ol&gt;&lt;br /&gt;В результате получим такую картинку (за 16.11.2011 dr-mart):&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101831/img1.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101831/img1.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;На рисунке изображено следующее: минутный график инструмента, над ним индикатор черным цветом — чистая балансовая позиция, красная пунктирная линимя — ноль, зеленая — максимум чистой балансовой позиции, синяя — минимум.</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/348/</id>
    <title type="text">Каким стереотипам о фондовом рынке стоит верить?</title>
    <published>2012-04-25T22:36:33Z</published>
    <updated>2012-12-17T14:41:37Z</updated>
    <author>
      <name>M.Kovaleva</name>
      <uri>https://stocksharp.ru/users/5979/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Для начинающих" />
    <category term="Алготрейдинг" />
    <category term="Статьи" />
    <content type="html">Результаты работы на фондовом рынке зачастую воспринимаются как результат игры случая, а движения биржевых котировок и фондовых показателей - не поддающимися научному анализу и прогнозу. Несмотря на это необходимо и желательно находить статистические закономерности для возможного последующего прогноза. В данной статье я постараюсь рассказать о некоторых из них, опровергая устоявшиеся заблуждения.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;div align="center"&gt;Закономерность 1. Самая надежная и успешная стратегия поведения на рынке – стратегия &amp;#171;купил и держи&amp;#187; (&amp;#171;bye and hold&amp;#187;)&lt;/div&gt;&lt;/b&gt;&lt;br /&gt;Существует  мнение о постоянном росте рынка. В доказательство обычно приводят пример индекса Доу-Джонса, выросшего за 20 век примерно в 1000 раз. &lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101859/002.JPG' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101859/002.JPG?size=800x800" alt="График индекс Доу-Джонса" title="График индекс Доу-Джонса" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Следовательно, чтобы успешно работать на бирже, нужно накупить акций и ждать; самое сложное – перетерпеть возможные коррекции рынка. Действительно, фондовый рынок обычно достаточно длительное время находится в фазах интенсивного роста, и чем дольше эта фаза длится, тем крепче укореняется мысль о стратегии &amp;#171;купил и держи&amp;#187;, и начинает казаться, что это самый удобный и простой способ обогащения. Однако опыт показывает, что следование этой стратегии всегда заканчивается жестокой расплатой. Периодичность таких событий обычно составляет 15-20 лет – именно столько составляет срок инвестиционной памяти участников рынка. Самый сокрушительный крах был в 1929-м году, когда биржевики выбрасывались из окон гостиниц Нью-Йорка. Самый недавний – мировой кризис 2008 года. И не всегда рынок восстанавливается быстро, как, например, после краха 1987 года. Бывают и длительные рецессии по 5-10 и более лет. Восстановление прежних позиций после краха 1929 года продолжалось около 20 лет, еще примерно столько же, в 60-80-е годы, рынок простоял на месте. В качестве еще одного примера можно привести Индекс Токийской фондовой биржи, движения которого также нестабильны и при этом динамика отрицательна.&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101860/003.JPG' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101860/003.JPG?size=800x800" alt="График индекс Токийской фондовой биржы" title="График индекс Токийской фондовой биржы" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Отметим, что и рост Индекса Доу-Джонса на три порядка за 100 лет на самом деле не такой уж впечатляющий: если усреднить весь рост с 1933 года (дно краха 1929 года) по сегодняшний день и пересчитать в годовые приросты – получится рост всего 8 % годовых.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;div align="center"&gt;Закономерность 2. В летние месяцы наблюдается снижение активности фондового рынка&lt;/div&gt;&lt;/b&gt;&lt;br /&gt;С приближением лета в СМИ все чаще упоминается &amp;#171;летнее затишье&amp;#187;. Об этом пишут аналитики и говорят комментаторы на РБК. Согласно этим сообщениям получается, что у фондового рынка тоже есть своеобразный период отпусков.&lt;br /&gt;На самом деле, для того, чтобы доказать, что нет такого понятия как &amp;#171;отпуск рынка&amp;#187;, можно даже не использовать сложные алгоритмы вычислений. На примере изменений индекса РТС с 2000 по 2011 год была применена простая методика, которая позволяет определить удельный вес диапазона, пришедшегося на период отпусков с июня по август по отношению к диапазону всего года.&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101861/3.PNG' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101861/3.PNG?size=800x800" alt="Расчет активности рынка в летние месяцы" title="Расчет активности рынка в летние месяцы" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Исходя из данных таблицы, делаем следующий вывод: в среднем почти половина годового диапазона (49%) приходится на 3 летних месяца. Это значит, что лето – самый динамичный период в году. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;div align="center"&gt;Закономерность 3. Пятница – день фиксации прибыли, рынок в пятницу падает&lt;/div&gt;&lt;/b&gt;&lt;br /&gt;К такому выводу пришли некоторые трейдеры и аналитики. Можно рассчитать, действительно ли для российского рынка характерно снижение котировок по пятницам. &lt;br /&gt;Рассчитаем, сколько было понедельников за последние 10 лет, когда торги закрывались в плюс, и сколько было понедельников, которые закрывались в минус; аналогично посмотреть статистику для каждого дня недели, для чего используем котировки индекса РТС с 2000 года по 2011 год.&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101862/099.PNG' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101862/099.PNG?size=800x800" alt="Расчет активности рынка по дням недели" title="Расчет активности рынка по дням недели" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;В итоге приходим к следующему выводу: самым падающим днем является среда, именно в среду котировки росли всего лишь в 47% случаев, самыми растущими были понедельники и четверги. Цены повышались в эти дни соответственно в 56,8% и 55,4% случаев. &lt;br /&gt;Как видно, пятницу ни в коем случае нельзя назвать днем, когда надо открывать короткие позиции, только потому, что большинство будет фиксировать прибыль, иначе бы в 54,3% случаев рынок бы не закрывался в эти дни в плюс.</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/350/</id>
    <title type="text">Статистические модели трендов. Смещение среднего.</title>
    <published>2012-04-03T14:11:29Z</published>
    <updated>2012-12-17T14:41:07Z</updated>
    <author>
      <name>vlad1024</name>
      <uri>https://stocksharp.ru/users/768/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Алготрейдинг" />
    <category term="Статьи" />
    <content type="html">Попросили объяснить без специальных терминов, что такое персистентность и как она связана с трендовостью рынка. Совсем без терминов вряд ли получится, но если их минимизировать, то достаточно одного понятия — плотность вероятности.&lt;br /&gt;&lt;br /&gt;Плотность вероятности — это функция, интеграл интервала которой дает нам вероятность попадания в этот интервал. Или, в простейшем случае, если мы рассматриваем ее эмпирическую оценку в виде гистограммы распределения, это будет просто частота попадания в набор фиксированных интервалов. &lt;br /&gt;Для примера рассмотрим гистограмму нормального распределения.&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101834/img1.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101834/img1.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Собственно, что мы видим — это разбиение на набор фиксированных интервалов, затем подсчет попадания каждого значения в тот или иной интервал, который дает частоту. Если мы хотим посчитать частоту попадания в бОльший интервал (например от 0 до 2), то нам необходимо сложить(проинтегрировать) частоту попадания во все маленькие интервалы внутри этого отрезка [0, 2]. Таким образом плотность вероятности дает возможность, зная интервал, получить вероятность попадания в него. Или, если рассматривать на более &amp;#171;интуитивном&amp;#187; уровне, — показывает, какие значения выпадают более часто, а какие менее. В приведенном примере наиболее часто выпадают значения вокруг нуля распределения, а затем оно постепенно спадает. &lt;br /&gt;&lt;br /&gt;Если мы рассмотрим распределение как набор значений, расположенных во времени (привычные для трейдинга представления в виде графиков числовых рядов), то получим для все того же нормального (гауссового) распределения следующую картинку:&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101835/img2.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101835/img2.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Как и ожидалось из гистограммы распределения, 95% значений находятся внутри интервала от -2 до +2 с центром в 0. &lt;br /&gt;&lt;br /&gt;Каждый наверняка видел график случайного блуждания, а этот на него мало похож. Разница в том, что для того чтобы получить случайное блуждание, необходимо последовательно сложить эти значения. Или, наоборот, чтобы получить из случайного блуждания распределение приращений, необходимо взять разность соседних значений.&lt;br /&gt;&lt;br /&gt;Таким образом, мы подходим к первой простейшей модели тренда. Рассмотрим такое распределение приращений: &lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101836/img3.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101836/img3.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;На глаз оно практически не отличается от предыдущего, но среднее (центр) значение сдвинуто на +0.1. Теперь просуммируем значения распределений для первого случая с нулевым и положительным (+0.1) смещением среднего. Так мы получим два графика случайных блужданий. &lt;br /&gt;&lt;br /&gt;Первый график (без смещения в мат. ожидании приращений):&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101837/img4.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101837/img4.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;И второй график (с &amp;#171;ничтожным&amp;#187;,ели различимым на графике распределения приращений, смещением +0.1):&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101838/img5.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101838/img5.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Разница разительная, но на первом графике заработать не возможно, а на втором — вполне. &lt;br /&gt;&lt;br /&gt;В данном случае мы рассматриваем зависимость (смещение в мат. ожидании), которая не изменяется во времени, то есть стационарна, и равняется 0 для всего графика, или +0.1 — другого. Теперь представим, что эти значения сами изменяются во времени и представляют, например, кусочно-постоянную функцию, т.е. набор констант, из которого мы выбираем значение, действующее на каком-то интервале. Соответственно, если это значение положительное, возникает &amp;#171;растущий кусок тренда&amp;#187;, если отрицательное — &amp;#171;падающий&amp;#187;. А сам график &amp;#171;сшит&amp;#187; из таких интервалов с постоянными значениями. Таким образом мы получим приближенную к реальности простейшую динамическую модель тренда, у которой стационарное среднее приращений равняется 0, но при этом существуют интервалы, на которых оно отклоняется от 0 как в положительную, так и отрицательную сторону. При этом в среднем количество таких участков &amp;#171;уравновешивается&amp;#187;, и мы получаем среднее всех приращений близким к 0.&lt;br /&gt;&lt;br /&gt;Или если мы будем рассматривать среднее как функцию времени, то для кусочно-постоянной модели получим следующую картинку:&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101839/img6.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101839/img6.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Или ввиде формулы: P_i+1 = P_i + A_k + N(0, 1) , где&lt;br /&gt;A_k — это значение среднего на данном временном интервале (t_k, t_k+1),&lt;br /&gt;N(0, 1) — стандартизированное нормальное распределение,&lt;br /&gt;Pi — это получившийся стохастический процесс. &lt;br /&gt;&lt;br /&gt;Для примера рассмотрим реализацию такого стохастического процесса, при t_k = (0, 100, 200, 400, 450, 600, 650) и A_k = (+0.1, -0.1, +0.05, +0.15, -0.2, -0.05), что примерно соответствует представленному выше графику зависимости от времени. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Первая реализация:&lt;/b&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101840/img7.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101840/img7.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Вторая реализация:&lt;/b&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101841/img8.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101841/img8.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Как видно, они мало похожи и в них гораздо менее очевидно наличие трендов по сравненинию с простейшим стационарным случаем, но, тем не менее, они там присутствуют, а значит на таком процессе возможно заработать.&lt;br /&gt;&lt;br /&gt;В следующей статье мы поговорим о еще одной модели тренда, которая связана с персистентностью. Точнее, мы будем понимать под персистентностью авто-регрессивность числового ряда.</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/349/</id>
    <title type="text">Статистические модели трендов. Авторегрессивность.</title>
    <published>2012-04-03T14:11:32Z</published>
    <updated>2012-12-17T14:41:04Z</updated>
    <author>
      <name>vlad1024</name>
      <uri>https://stocksharp.ru/users/768/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Алготрейдинг" />
    <category term="Статьи" />
    <content type="html">В чем состоит смысл понятия авторегрессивности / автокорреляции / персистентности? &lt;br /&gt;Расмотрим простейший процесс, в котором последующие приращения зависят от предыдущего. Обозначим приращение в момент времени t — X_t, в момент времени t + 1 — X_t+1. Соответственно, мы хотим, чтобы приращение в момент времени t+1 каким-то образом зависело от предыдущего t. Если выразить такую зависимость качественно, то у нас есть два варианта.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Первый вариант&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Мы предполагаем, что положительное приращение X_t должно увеличивать вероятность положительного приращения в следующий момент времени X_t+1 и аналогично для отрицательного. Проще говоря, Х_t и X_t+1 положительно скоррелированны. Такая модель является &amp;#171;трендовой, персистентной&amp;#187;, то есть покупая/продавая то, что растет/падает, мы смещаем вероятность выигрыша в свою сторону.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Второй вариант&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Мы предполагаем, что положительные приращения X_t должны увеличивать вероятность отрицательных в момент времени X_t+1, а отрицательные приращения — положительных. То есть X_t и X_t+1 отрицательно скоррелированны. Такая моделья является &amp;#171;контр трендовой, анти-персистентной&amp;#187;, то есть продавая то, что выросло и покупая то, что упало, мы получаем статистическое преимущество. &lt;br /&gt;&lt;br /&gt;Соответственно, если закодировать эти наблюдения в виде общей формулы мы получим:&lt;br /&gt;&lt;br /&gt;X_t+1 = C + A*X_t + W_t, где&lt;br /&gt;С — это смещение мат. ожидания,&lt;br /&gt;A — коэффициент авторегрессии,&lt;br /&gt;W — белый (к примеру, гаусовский) шум.&lt;br /&gt;&lt;br /&gt;Для простоты предположим, что C = 0; тогда при A &amp;gt; 0 получим первый вариант из расмотренных выше, а при A &amp;lt; 0 — второй. При A = 1 получаем случайное блуждание. Если A по модулю &amp;gt; 1, модель теряет устойчивость, что характеризуется взрывным (экспоненциальным) ростом/падением или расширяющимися колебаниями с экспоненциальным ростом амплитуды. &lt;br /&gt;Если еще больше расширить модель, то в общем случае она может зависеть от нескольких значений в предыдущей истории, то есть зависимость будет иметь вид:&lt;br /&gt;X_t+1 = C + A1*X_t + A2*X_t-1 + A3*X_t-2 +… + Ai*X_t-i-1,&lt;br /&gt;но мы ограничимся рассмотрением случая с единичным лагом и C=0 как наиболее характерного.&lt;br /&gt;&lt;br /&gt;Теперь рассмотрим, как этот простейший пример будет выглядеть. Для этого возьмем исходный гауссовский шум:&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101842/img1.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101842/img1.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt; &lt;br /&gt;И применим к нему нашу AR(1) (авторегрессивность с 1 лагом) модель с С=0 и с различными значениями A. При A=0.9 получим следующее (сверху — результат авторегрессивной модели приращений, снизу — интеграл этих приращений + аддативный шум, то есть приближение к случайному блужданию рыночной модели):&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101843/img2.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101843/img2.png?size=800x800" alt=""/&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Та же самая модель при A=0.15:&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101844/img3.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101844/img3.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Зависимость слабая, но несмотря на это, хорошо видно, как возникают локально-трендовые участки на графике.&lt;br /&gt;&lt;br /&gt;Так жеесли мы построим облако точек, где по оси X — приращение X_t, а по Y — приращение X_t-1, эта зависимость будет отчетливо видна:&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101845/img4.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101845/img4.png?size=800x800" alt=""/&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Теперь переходим к оставшейся части. Очевидно, что стационарных зависимостей на рынке нет, поэтому автокорреляционная функция приращений имеет тривиальный вид. Из этого следует, что такие зависимости могут быть описаны лишь, в лучшем случае, нестационарными моделями, то есть такими, в которых вид этой локальной зависимости не остается постоянным, а изменяется время от времени. Аналогично введенной в предыдущем посте &lt;a href="http://stocksharp.com/algo/article.aspx?aid=14" title="http://stocksharp.com/algo/article.aspx?aid=14"&gt;&amp;#171;Статистические модели трендов. Смещение среднего&amp;#187;&lt;/a&gt;, мы можем ввести кусочно-постоянную функцию, но на этот раз она будет описывать не смещение среднего, а значение коэффициента регрессии A. Таким образом можно получить участки, на которых авторегрессия носит локально-трендовый характер (A&amp;gt;0), на других — локально-контртрендовый (A&amp;lt;0), чтобы в конечном итоге удовлетворить наше условие тривиальности АКФ.</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/347/</id>
    <title type="text">Основы статистического арбитража. Коинтеграция.</title>
    <published>2012-04-25T22:36:43Z</published>
    <updated>2012-12-17T14:40:50Z</updated>
    <author>
      <name>vlad1024</name>
      <uri>https://stocksharp.ru/users/768/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Алготрейдинг" />
    <category term="Статьи" />
    <content type="html">Собственно, понятие коинтеграции лежало в основе статистического арбитража, который только начал появляться в конце 80-х и позволил первопроходцам из JP Morgan нарубить не мало денег, пока ... Но об этом в конце статьи. Поэтому в этот раз мы поговорим про коинтеграцию: что это такое, зачем и почему. Но начнем издалека и рассмотрим такие статистические понятия как порядок интеграции процесса и фиктивной (spurios) регрессии, которые и лежат в основе. &lt;br /&gt;&lt;br /&gt;Рассмотрим для начала простейший процесс - гауссовский шум:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101883/1.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101883/1.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Теперь построим его кумулятивную сумму, то есть возьмем значения и последовательно их сложим. Таким образом получим, что Y_i = sum k = 0..i X_k, где X_k - это исходный гаусовский шум, Y_i - результирующий процесс. То есть в данном случае мы взяли шум и его проинтегрировали, получив случайное блуждание. Так же мы можем повторить данный процесс, но на этот раз, взяв в качестве исходных значений полученное нами на предыдущем шаге случайное блуждание. Результат представлен на рисунке (сверху - интеграл шума, случайное блуждание, снизу - повторная сумма, но на этот раз, взятая по случайному блужданию):&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101884/2.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101884/2.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Проще говоря, мы проделали следующее: мы взяли числовой ряд шума и применили к нему операцию кумулятивной суммы (интегрирования). После первого применения мы, очевидно, получили случайное блуждание, а после последующего применения получили еще один числовой ряд. Чтобы опять вернуться к шуму, нам так же дважды необходимо применить операцию конечной разности к этому числовому ряду (или один раз к случайному блужданию). Тогда количество раз применения операции кумулятивной суммы мы можем назвать порядком интеграции процесса (числового ряда). То есть порядок интеграции процесса - это то, сколько раз мы применили сумму к шуму или, наоборот, сколько раз необходимо применить конечную разность к  процессу, чтобы получить шум (гауссово распределенную случайную переменную). В общем случае, шум заменяется на требование получения стационарного процесса (то есть числового ряда у которого мат. ожидание и АКФ не изменяются во времени). Процесс с порядком интеграции k мы будем обозначать как I(k).&lt;br /&gt;&lt;br /&gt;К примеру, график цены можно отнести к I(1) процессу (случайному блужданию). Если мы возьмем приращение, то есть разницу Close-Open свечек, то получим процесс с порядком интеграции I(0). Если рассмотрим какие-то экономические индикаторы, к примеру, ВВП или объем различных агрегатов денежной массы, то получим процессы, близкие к I(2).&lt;br /&gt;&lt;br /&gt;Широко известны случаи, когда между абсолютно не связанными числовыми рядами находилась корреляция: к примеру, между уровнем цен и уровнем осадков в Великобритании, или поголовьем овец и GDP. Все это - примеры фиктивной регрессии (spurious regression). Рассмотрим для примера два независимых случайных блуждания:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101885/3.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101885/3.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Коэффициент корреляции между ними равен 0.35, хотя они и не взаимосвязаны. Вспомним, что корреляция связана с линейной регрессией, и рассмотрим взаимный график первого и второго процесса (по оси x - отложен первый процесс, по оси y - второй):&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101886/4.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101886/4.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Фактически, расчет обычной корреляции сводится к следующему:&lt;/b&gt; мы считаем, какой процент времени два процесса находятся совместно по одну (или разную, если корреляция отрицательная) сторону от нуля. Но, как известно, для случайного блуждания вероятность нахождения по одну сторону от нуля подчиняется закону арксинуса, соответственно, когда мы пытаемся посчитать корреляцию между двумя случайными блужданиями, вероятность, что они чисто случайно ушли от нуля в одну сторону, значительно больше нуля. Таким образом, коэффициент корреляции начинает нам показывать невалидную взаимосвязь между двумя процессами, которой на самом деле нет.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Каким же образом нам посчитать взаимосвязь между двумя процессами?&lt;/b&gt; Для начала дадим простой ответ на этот вопрос. В общем случае, коэффициент корреляции валиден, если два числовых ряда, для которых он расчитывается, являются независимо распределенными случайными переменными (белым шумом, который мы рассматривали в начале статьи), или по крайней мере стационарными процессами. Таким образом, оба числовых ряда должны быть нулевого порядка интеграции (I(0) - белый шум/стационарный процесс). То есть чтобы, к примеру, посчитать взаимосвязь между двумя акциями(I(1) процессами), необходимо взять разность (Close - Open) и рассчитать корреляцию между ними. Если мы рассматриваем денежную массу/GDP или другие процессы, близкие к I(2), конечную разность необходимо брать два раза, чтобы привести их общему знаменателю I(0) процесса.&lt;br /&gt;&lt;br /&gt;Минусы данного подхода заключаются в том, что для коротких числовых рядов расчет корреляции после взятия конечных разностей может не давать достаточной статистической значимости, а так же в том, что сама выявляемая взаимосвязь между двумя процесса достаточно примитивна.&lt;br /&gt;&lt;br /&gt;Более сложный ответ на вопрос &amp;quot;&lt;b&gt;Как посчитать взаимосвязь между двумя процессами?&lt;/b&gt;&amp;quot;, привел Клайв Грэнджер и сотоварищи, который к Нобелевской премии революционизировал статистический анализ/эконометрику, и название этому - коинтеграция. &lt;br /&gt;&lt;br /&gt;Рассмотрим все те же два случайных блуждания Y1 и Y2 (I(1) процесса). Теперь подумаем над тем, как будет вести себя разность между ними S = Y1 - b*Y2 (где b - некий коэффициент; для простоты возьмем 1). Если процессы не взаимосвязаны, то эта разность S так же должна быть случайным блужданием, то есть I(1) процессом. Если же взаимосвязь есть, то S должна быть &amp;quot;чем-то меньшим&amp;quot; в статистическом смысле, чем случайное блуждание. К примеру, если мы представим два числовых ряда, которые недалеко отходят друг от друга, то разница между ними будет белым шумом. В этом и заключается смысл коинтеграции: если для какого-то коэффициента b спред S = Y1 - b*Y2 будет иметь меньший порядок интеграции, чем исходные процессы, то такие процессы коинтегрированы. В рассмотренном выше случае это будет обозначать, что для двух I(1) процессов, порядок интеграции спреда S должен быть I(0) (то есть белым шумом/стационарным) для какого-то значения коэффициента b. &lt;br /&gt;&lt;br /&gt;Рассмотрим также для примера разность двух случайных блужданий, для которых мы ранее насчитали корреляцию, равную 0.35. Получим такое же случайное блуждание:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101887/5.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101887/5.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Теперь рассмотрим два случайных блуждания, но на этот раз взаимосвязанные, и разницу между ними, которая в данном случае, очевидно, является стационарным I(0) процессом (сверху - первое случайное блуждание, посередине - второе, снизу - разница/спред между ними):&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.ru/file/101888/6.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.ru/file/101888/6.png?size=800x800" alt=""/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;То есть &lt;b&gt;логика коинтеграции&lt;/b&gt; сводится к тому, что необходимо найти какой-то коэффициент b и построить спред S = Y1 - b*Y2 такой, что порядок интеграции спреда меньше, чем у исходных процессов. Если мы рассматриваем два I(1) процесса, то спред должен быть стационарен.&lt;br /&gt;&lt;br /&gt;Также в качестве примера коинтеграции часто приводят такой жизненный пример: представим пьяницу (случайное блуждание) и собаку, которую он ведет по улице на поводке. Теперь представим их позицию как два числовых ряда. Получаем следующее: один процесс движется случайно (пьяница), а другой (собака), хотя и может убегать от него в ту или иную сторону, не может убегать от него далеко и всегда возвращается. Соответственно, если мы построим разницу между ними, она будет иметь меньший порядок интеграции, чем два совершенно несвязанных случайных блуждания (пьяницы, блуждающие независимо по городу).&lt;br /&gt;&lt;br /&gt;Хорошо. &lt;b&gt;Предположим, мы знаем, что два процесса коинтегрированы. Но что нам это дает, какую математическую модель можно использовать, чтобы отразить их динамику?&lt;/b&gt; Существует теорема о репрезентации коинтеграции, которая говорит нам, что для двух коинтегрированных числовых рядов существует ECM-модель (error correction model), а так же наоборот - если для двух рядов существует ECM-модель, то они коинтегрированы. Проще говоря, коинтеграция &amp;lt;-&amp;gt; ECM-модель, то есть существование коинтеграции влечет наличие ECM-модели, и наоборот. В простейшем случае, она описывает следующие соотношения: предположим, что мы построили спред S между двумя рядами. Тогда каждый процесс будет стараться вернуть спред к нулю, то есть приращения процессов должны быть скоррелированы с положением спреда. Таким образом, мы приходим к модели: для двух рядов Y1 и Y2 мы строим спред S = Y1 - b*Y2 и разности каждого из них - dY1, dY2. Чтобы спрэд не &amp;quot;уходил далеко&amp;quot;, разности процессов должны быть с ним скоррелированы. Необходимо постоянно подстраиваться, как в примере с пьяницей и собакой - там действует по сути один процесс - &amp;quot;пьяница&amp;quot;, а собака к нему привязана. В общем случае, мы рассматриваем двух пьяниц, но связанных резинкой. Когда спред расходится, начинают действовать силы, возвращающие его к равновесию. Таким образом, мы приходим к следующей модели корректирвки ошибок (ECM-модели):&lt;br /&gt;dY1 = -a1*S + lagged(dY1, dY2)&lt;br /&gt;dY2 = -a2*S + lagged(dY1, dY2)&lt;br /&gt;То есть наличие коинтеграции одназначно обозначает скоррелированность приращений процессов и спреда. Если спред расходится (например, становится положительным), то приращения одного процесса, обратно скоррелированного с ним, возвращают его к нулю, так же как и приращения другого. В этом заключается смысл ECM-модели и коинтеграции, поскольку наличие ECM-модели эквивалентно коинтеграции и наоборот. Коинтеграция показывает, что какая-то зависимость между числовыми рядами есть; ECМ-модель дает конкретное выражение этой зависимости в виде их динамики. &lt;br /&gt;&lt;br /&gt;В общем случае, коинтеграционной зависимостью могут быть связаны более двух переменных, при чем таких зависемостей между ними может быть несколько, что приводит нас к VECM-модели (vector error correction model) - тягловой лошадке современной эконометрики.&lt;br /&gt;&lt;br /&gt;Единственный вопрос, который мы пока не затронули, это - &lt;b&gt;каким образом строить спрэд (то есть числовой ряд S)?&lt;/b&gt; Если нам дан набор числовых рядов Y1..Yn, между которыми присутствует единственная коинтеграционая зависимость, то для оценки параметров b1-bn спреда вида S = Y1 - b1*Y1 - b2*Y2.. - bn*Yn достаточно построить линейную регрессию между Y1 ~ Y2..Yn, коэффициенты которой (как доказывается в мат. статистике) дадут консистентную оценку параметров b1..bn. Если процессов всего лишь два, необходимо той же простейшей линейной регрессией Y1 ~ b*Y2 определить значение коэффициента.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Почему коинтеграция так важна?&lt;/b&gt; Потому что подавляющее большинство макроэкономических переменных/индикаторов нестационарны и, следовательно, трудно поддаются анализу классическими статистическими методами, но в тоже время имеют очевидную схожесть между собой (не разбегаются далеко, как в примере с пьяницей и собакой) и поэтому могут быть валидно описаны при помощи коинтеграции и соответствующих моделей (VECM и т.п.). &lt;br /&gt;&lt;br /&gt;Но, применительно к рынку, наличие настоящей коинтеграции означает наличие абитража, что противоречит базовому постулату эффективных рынков - no arbitrage. Настоящий спред для коинтегрированных процессов всегда (!) сходится, так как является стационарным I(0) процессом. Также для двух коинтегрированных процессов всегда должна существовать ECM-модель(то есть приращения активов должны быть обратно скоррелированны со спредом, возвращая его к нулю). Для рыночных спредов не наблюдается ни того ни другого, поэтому, хотя они и ограничены и могут проходить тесты на коинтеграцию, у них есть главное отличие - рыночные спреды не стационарны.</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/234/</id>
    <title type="text">Наши люди на радио! Александр Муханчиков в программе &amp;quot;Охота на Герчика&amp;quot;</title>
    <published>2012-10-22T02:06:20Z</published>
    <updated>2012-12-17T14:26:25Z</updated>
    <author>
      <name>StockSharp</name>
      <uri>https://stocksharp.ru/users/341/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">Тонкости алготрейдинга&lt;br /&gt;В гостях: Александр Муханчиков, частный трейдер&lt;br /&gt;&lt;br /&gt;&lt;iframe width="640" height="390" src="//www.youtube.com/embed/-javZS-2Hu8" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/238/</id>
    <title type="text">Как бесплатно пойти на курсы программирования StockSharp</title>
    <published>2012-12-11T17:56:02Z</published>
    <updated>2012-12-17T14:17:43Z</updated>
    <author>
      <name>StockSharp</name>
      <uri>https://stocksharp.ru/users/341/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Обучение" />
    <category term="Брокеры" />
    <content type="html">С 11 декабря 2012 года по 28 февраля 2013 года при открытии брокерского счета через StockSharp вы сможете получить &lt;span style="color:green"&gt;&lt;b&gt;скидку от 10 до 100%&lt;/b&gt;&lt;/span&gt; на обучение, платную техподдержку и другие услуги.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Порядок получения скидки:&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://stocksharp.com/broker/" title="http://stocksharp.com/broker/"&gt;Открыть счет через StockSharp.&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Совершать сделки на созданном брокерском счете.  20% от комиссии, которую вы уплачиваете брокеру*, возвращается вам на счет в StockSharp. Эти деньги вы можете потратить на наши услуги.&lt;/ol&gt;&lt;em&gt;Брокерский счет мы открываем для вас в ИК &amp;quot;Церих&amp;quot;. Условия открытия счета напрямую в Церих и через нас не отличаются.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;* комиссия за маржинальное кредитование не учитывается</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3251/</id>
    <title type="text">GetCandles() возвращает не все свечки.</title>
    <published>2012-12-17T11:35:47Z</published>
    <updated>2012-12-17T11:35:47Z</updated>
    <author>
      <name>Azat</name>
      <uri>https://stocksharp.ru/users/6131/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">Добрый день!&lt;br /&gt;&lt;br /&gt;1. Подключил файлы гидры в качестве источника&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

var storageRegistry = new StorageRegistry();
((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = @&amp;quot;C:\Hydra\&amp;quot;;
var cbs = new TradeStorageCandleBuilderSource { StorageRegistry = storageRegistry };
_candleManager.Sources.OfType&amp;lt;TimeFrameCandleBuilder&amp;gt;().Single().Sources.Add(cbs);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;2. Создал series и запустил candleManager&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

var series = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame);
_candleManager.Start(series, DateTime.Now - new TimeSpan(10,0,0,0), DateTime.MaxValue);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Если смотреть на событие Processing, то видно, что все свечки приходят нормально.&lt;br /&gt;&lt;br /&gt;Но, если вызвать series.GetCandles&amp;lt;TimeFrameCandle&amp;gt;(), то возвращает свечки только за текущую неделю.&lt;br /&gt;Пробовал и диапазон дат указывать, и количество свечек передавать, все равно, только за эту неделю возвращает, не больше.&lt;br /&gt;&lt;br /&gt;В чем может быть проблема? </content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3250/</id>
    <title type="text">Тестирование ContinuousSecurity</title>
    <published>2012-12-17T11:34:41Z</published>
    <updated>2012-12-17T11:34:41Z</updated>
    <author>
      <name>vk37</name>
      <uri>https://stocksharp.ru/users/6296/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="тестирование" />
    <content type="html">Версия 4.1.6. В связи с экспирацией фьючерса RIZ2 стал использовать ContinuousSecurity. Пользуюсь BasketTrader. После перехода с Security на ContinuousSecurity корректно тестирует только один Trader из всей коллекции InnerTraders. Остальные останавливают работу где-то в начале тестирования. В debug режиме получаю ошибку:&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;Новое событие Canceling,T=19:29:41.797,54986739/47 Покупка Цена=147410 Объем=20 Сост=Active Бал=20 имеет дату более раннюю, чем текущее время эмулятора 12.09.2012 19:29:42.&lt;/div&gt;&lt;/div&gt;Подскажите, кто сталкивался, в чем может быть проблема?</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3249/</id>
    <title type="text">Сборка стакана при помощи API</title>
    <published>2012-12-17T10:12:51Z</published>
    <updated>2012-12-17T10:12:51Z</updated>
    <author>
      <name>abubakirov</name>
      <uri>https://stocksharp.ru/users/28714/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Hydra" />
    <content type="html">Извиняюсь, если написал не в ту тему.&lt;br /&gt;&lt;br /&gt;Я пытаюсь собрать стакан из ордерлога при помощи API, отсюда возник ряд вопросов.&lt;br /&gt;&lt;br /&gt;Во-первых, можно ли узнать время, когда была отменена заявка? Если мы этого не знаем, то я не могу включить в стакан заявки, которые были отменены после того момента, на который я собираю стакан.&lt;br /&gt;&lt;br /&gt;Во-вторых, пусть мы рассматриваем только исполненные заявки:&lt;br /&gt;&lt;br /&gt;foreach (OrderLogItem OLItem in reader)&lt;br /&gt;{&lt;br /&gt;    if (!OLItem.IsMatched()) { continue; }&lt;br /&gt;    Order order = OLItem.Order;&lt;br /&gt;    if (order.Time &amp;gt;= t) { break; } //t - момент времени, на который собирается стакан&lt;br /&gt;    var tmp_trades = order.GetTrades(); //На этом моменте выскакивает ошибка ArgumentException: Заявка №№№ не имеет информацию о шлюзе. Parameter name: order&lt;br /&gt;&lt;br /&gt;Как справиться с этой ошибкой, и какого типа можно делать объект tmp_trades?&lt;br /&gt;&lt;br /&gt;Пытался так же сделать и по-другому:&lt;br /&gt;&lt;br /&gt;if (!OLItem.IsMatched()) { continue; }&lt;br /&gt;Trade trade = OLItem.Trade;&lt;br /&gt;if (trade.Time &amp;lt;= t) { continue; }&lt;br /&gt;decimal price = order.Price;&lt;br /&gt;//Далее идет запись данных в массив, он не так и важна.&lt;br /&gt;&lt;br /&gt;Но в этом случае возвращаются пустые массивы, то есть ни одна итерация не прошла условие цикла trade.Time &amp;gt; t&lt;br /&gt;&lt;br /&gt;Как мне решить мои проблемы? Возможно, сборка стаканов из ОЛ уже реализована в API, тогда подскажите, в какую часть мануала смотреть.&lt;br /&gt;&lt;br /&gt;Заранее благодарен</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3248/</id>
    <title type="text">Код ошибки DllConnected Сообщение Терминал не подключен к серверу</title>
    <published>2012-12-17T03:15:44Z</published>
    <updated>2012-12-17T03:15:44Z</updated>
    <author>
      <name>Геннадий Ванин (Gennady Vanin)</name>
      <uri>https://stocksharp.ru/users/6413/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <content type="html">ПоПереподключался своим кодом и решил попробовать &lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

this.Trader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(60);
this.Trader.ReConnectionSettings.WorkingTime = Exchange.Micex.WorkingTime;

//ошибка с этой и без этой линии
//this.Trader.ReConnectionSettings.WorkingTime = Exchange.Micex.WorkingTime;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;После добавления этих линий, при попытке подключения при отсутствии соединения с сервером по причине ночи, выскакивает окошко с:&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;StockSharp.Quik.ApiException: Код ошибки DllConnected Сообщение Терминал не подключен к серверу&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Зачем оно?&lt;br /&gt;Как от него избавиться?&lt;br /&gt;&lt;br /&gt;Это информационное сообшение или ошибка?&lt;br /&gt;И, чем она чревата? &lt;br /&gt;</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3247/</id>
    <title type="text">Соединение разорвано по причине неудачи проверки лицензии</title>
    <published>2012-12-17T02:49:30Z</published>
    <updated>2012-12-17T02:49:30Z</updated>
    <author>
      <name>Геннадий Ванин (Gennady Vanin)</name>
      <uri>https://stocksharp.ru/users/6413/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="тестирование" />
    <content type="html">Довольно редко, но наблюдаю:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;System.InvalidOperationException: Соединение разорвано по причине неудачи проверки лицензии&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;В чём может быть причина?&lt;br /&gt;&lt;br /&gt;update:&lt;br /&gt;Проблема после перехода с 4.1.5 на 4.1.7 (21505 от 13 Декабря 2012 из codeplex trunk) на том же самом компе&lt;br /&gt;Пропала после возврата к версии StockSharp 4.1.5 и, при более позднем переходе на &lt;br /&gt;на версию StockSharp 21650 от 21 декабря 2012</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3246/</id>
    <title type="text">&amp;quot;Соединение не было разорвано в отведенный отрезок времени&amp;quot;</title>
    <published>2012-12-17T02:44:40Z</published>
    <updated>2012-12-17T02:44:40Z</updated>
    <author>
      <name>Геннадий Ванин (Gennady Vanin)</name>
      <uri>https://stocksharp.ru/users/6413/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="клуб алготрейдеров" />
    <content type="html">Только недавно начал тестировать программу в многодневном режиме. Т.е. ранее не работал с автоматическим переподключением&lt;br /&gt;&lt;br /&gt;И с утра после ночи, наблюдаю предупреждения в окошках:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;System.TimeoutException: Соединение не было разорвано в отведенный отрезок времени  &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;В чём может быть причина?&lt;br /&gt;&lt;br /&gt;И как с этим бороться?</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3245/</id>
    <title type="text">CandleSeries и WeightedIndexSecurity</title>
    <published>2012-12-16T20:19:45Z</published>
    <updated>2012-12-16T20:19:45Z</updated>
    <author>
      <name>Algonavt</name>
      <uri>https://stocksharp.ru/users/639/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">Умеет ли CandleSeries работать с BasketSecurity и его производными (например, WeightedIndexSecurity)? Теста ради написал простой обработчик свечек (см. ниже). Если в этом коде в строке &lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
_series = new CandleSeries(typeof(TimeFrameCandle), Security, TimeFrame)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; в качестве Security использовать WeightedIndexSecurity, то _series всегда будет пустым. При этом новые свечки в обработчик приходят исправно, и строка _message заполняется данными, которые выводятся в лог. SMA также рассчиывается (под отладчиком видно некоторые осмысленные значения), однако корректность расчета пока не проверял - для начала хочется уяснить про CandleSeries.&lt;br /&gt;&lt;br /&gt;Если в качестве Security указать обыкновенный инструмент (т.е. StockSharp.BusinessEntities.Security) - _candles заполняется отлично.&lt;br /&gt;&lt;br /&gt;Вопрос: умеет ли CandleSeries работать с WeightedIndexSecurity? Для чего это надо - например, к арбитражной стратегии прикрутить скользящую среднюю. Удобнее всего это делать через свечки, да и унификации хочется с кодом, который работает с единичными инструментами.&lt;br /&gt;&lt;br /&gt;Собственно, код:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
class WeightedSmaCandleStrategy : BasePortfolioStrategy
    {
        public TimeSpan TimeFrame { get; set; }
        public int Length;

        private CandleSeries _series;
        DateTime strategyStartTime;
        private SimpleMovingAverage Sma;

        protected override void OnStarted()
        {
            if (TimeFrame == null)
                throw new ApplicationException(&amp;quot;Не задан таймфрейм!&amp;quot;);
            if (Length &amp;lt;= 0)
                throw new ApplicationException(&amp;quot;Не задан период скользящей средней!&amp;quot;);

            strategyStartTime = DateTime.Now;

            base.OnStarted();

            Sma = new SimpleMovingAverage() { Length = Length };

            _series = new CandleSeries(typeof(TimeFrameCandle), Security, TimeFrame);  // Если Security - это WeightedIndexSecurity, то _series не заполняется
            _series.WorkingTime = WorkingTime;

            _series
                .WhenCandlesFinished()
                .Do(ProcessCandle)
                .Apply(this);

            TraderBuilder.CandleManager.Start(_series);
        }

        private void ProcessCandle(Candle candle)
        {
            // если наша стратегия в процессе остановки
            if (ProcessState == ProcessStates.Stopping)
            {
                // отменяем активные заявки
                CancelActiveOrders();

                return;
            }

            bool _canTrade = true;

            Sma.Process(candle);

            string _message;
            // Исторические свечки просто запоминаем
            if (candle.CloseTime &amp;lt; StartedTime)
            {
               _message = string.Format(&amp;quot;Историческая свечка: Time: {0} O:{1} H:{1} L:{2} C:{3}&amp;quot;, candle.OpenTime, candle.OpenPrice, candle.HighPrice, candle.LowPrice, candle.ClosePrice);
                _canTrade = false;
                //return;
            }
            else
                _message = string.Format(&amp;quot;Реальная свечка: Time: {0} O:{1} H:{1} L:{2} C:{3}&amp;quot;, candle.OpenTime, candle.OpenPrice, candle.HighPrice, candle.LowPrice, candle.ClosePrice);

            var _seriesCount = _series.GetCandleCount();  // В случае с WeightedIndexSecurity здесь всегда возвращается 0
            var _smaValue = Sma.GetCurrentValue();
            if (_seriesCount &amp;lt; Length)
            {
                //this.AddInfoLog(string.Format(&amp;quot;GetCandleCount &amp;lt; Length. GetCandleCount = {0} Length = {1}&amp;quot;, _seriesCount, Length));
                //return;
                _canTrade = false;
            }
            else
            {
                _message = string.Concat(_message, string.Format(&amp;quot; SMA={0}&amp;quot;, _smaValue));
            }

            this.AddInfoLog(_message);

            var _previousCandle = _series.GetCandle&amp;lt;TimeFrameCandle&amp;gt;(1);
            if (_previousCandle != null)
            {
                if (candle.ClosePrice &amp;gt; _smaValue &amp;amp;&amp;amp; _previousCandle.ClosePrice &amp;lt; _smaValue)
                {
                    this.AddInfoLog(&amp;quot;Пересечение снизу! CC={0} PC={1} SMA={2}&amp;quot;, candle.ClosePrice, _previousCandle.ClosePrice, _smaValue);
                    if (_canTrade)
                    {
                        var _buyOrder = new Order()
                        {
                            Type = OrderTypes.Market,
                            Direction = OrderDirections.Buy,
                            Volume = Position != 0 ? 2 : 1
                        };
                  
                        RegisterOrder(_buyOrder);
                    }
                }

                if (candle.ClosePrice &amp;lt; _smaValue &amp;amp;&amp;amp; _previousCandle.ClosePrice &amp;gt; _smaValue)
                {
                    this.AddInfoLog(&amp;quot;Пересечение сверху! CC={0} PC={1} SMA={2}&amp;quot;, candle.ClosePrice, _previousCandle.ClosePrice, _smaValue);
                    if (_canTrade)
                    {
                        var _sellOrder = new Order()
                        {
                            Type = OrderTypes.Market,
                            Direction = OrderDirections.Sell,
                            Volume = Position != 0 ? 2 : 1
                        };

                        RegisterOrder(_sellOrder);
                    }
                }
            }
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3244/</id>
    <title type="text">Можно ли изменять масштаб оси с ценой на свечном графике?</title>
    <published>2012-12-16T11:06:21Z</published>
    <updated>2012-12-16T11:06:21Z</updated>
    <author>
      <name>Algonavt</name>
      <uri>https://stocksharp.ru/users/639/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Алготрейдинг" />
    <content type="html">Реализована ли сейчас в библиотеке такая возможность? По умолчанию шкала на графике размечена целочисленными значениями, что создает неудобства при работе с графиком. В случае с инструментом, у которого дробная часть имеет большое значение (например, HYDR, Ed) график вытягивается в череду одинаковых полосок (см. прицепленные скрины).</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3243/</id>
    <title type="text">У кого-нить работает новая гидра с Плазой?</title>
    <published>2012-12-15T15:02:13Z</published>
    <updated>2012-12-15T15:02:13Z</updated>
    <author>
      <name>anothar</name>
      <uri>https://stocksharp.ru/users/6089/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Hydra" />
    <content type="html">Странные вещи с новой Гидрой и обновленным Плаза роутером. Гидра не может соединиться с ним совсем. Удалось только один раз, в то время как пример постоянно соединяется.&lt;br /&gt;Но на примере не тикает совсем лог ордеров и в тот раз когда Гидра соединилась-тоже не тикал.&lt;br /&gt;У кого работает или нет-отпишитесь. Может косяк компа? &lt;br /&gt;Писал РТС-те пишут что на их стороне все нормально. </content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3242/</id>
    <title type="text">IsTradeDate</title>
    <published>2012-12-15T10:54:57Z</published>
    <updated>2012-12-15T10:54:57Z</updated>
    <author>
      <name>vk37</name>
      <uri>https://stocksharp.ru/users/6296/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">Ожидал, что такой код:&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
Exchange.Rts.WorkingTime.IsTradeDate(DateTime.Today)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;на сегодняшней дате (15.12.12 сб) выдаст false. Метод возвращает, что сегодня торговый день. Так и должно быть?&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3241/</id>
    <title type="text">Проверка на админа</title>
    <published>2012-12-14T19:33:56Z</published>
    <updated>2012-12-14T19:33:56Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <content type="html">Наверное все знают, что в новых Windows тыкать палочкой одно приложение из другого можно только с правами мегаадминистратора.&lt;br /&gt;Чтобы снизить количество мата в окружающей среде, лучше изначально добавить в своего робота такой простой метод проверки&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
 
private void CheckAdministrator()
	{
		var identity = WindowsIdentity.GetCurrent();
		if (identity == null) throw new InvalidOperationException(&amp;quot;Couldn&amp;#39;t get the current user identity&amp;quot;);
		var principal = new WindowsPrincipal(identity);

		// Check if this user has the Administrator role. If they do, return immediately.
		// If UAC is on, and the process is not elevated, then this will actually return false.
		var isBuiltInAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);

		if (!isBuiltInAdmin)
		{
			var exMessage = &amp;quot;Робот запущен не под Администратором&amp;quot;;
			WriteLog(LogLevels.Error, exMessage);
			MessageBox.Show(
				exMessage, &amp;quot;Ошибка&amp;quot;,
				MessageBoxButton.OK, MessageBoxImage.Error);
			Shutdown();
		}
	}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;По последней строчке видно, что метод вызывается из App.xaml.cs,&lt;br /&gt;который в свою очередь стоит сделать наследником ILogSource и добавить в источники логирования,&lt;br /&gt;в том числе и для того, чтобы надёжно логировать все возможные исключения, но это уже другая песня.&lt;br /&gt;&lt;br /&gt;Англоязычные комментарии остались от &lt;a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAADaUgqeUiMvqHjAqLN3xr_c7yQrNXHQrzjvyiLQi2lwtw" title="http://stackoverflow.com"&gt;http://stackoverflow.com&lt;/a&gt;, откуда собственно код и позаимствован. Там ещё была проверка на UAC, но он у вас выключен.</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3240/</id>
    <title type="text">Terminal.IsConnected - брехня</title>
    <published>2012-12-14T18:10:48Z</published>
    <updated>2012-12-14T18:10:48Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <content type="html">Если дожидаться статуса Terminal.IsConnected и сразу после этого подключать шлюз, то он подключается, но кидает ошибку соединения о том, что не найдена библиотека.&lt;br /&gt;Помогает небольшой Sleep.</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/3239/</id>
    <title type="text">RSI.IsFormed команда IsFormed не работает в индикаторе RSI== помогите</title>
    <published>2012-12-14T14:31:31Z</published>
    <updated>2012-12-14T14:31:31Z</updated>
    <author>
      <name>kapustin-vladimir</name>
      <uri>https://stocksharp.ru/users/227/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">RSI.IsFormed команда IsFormed не работает в индикаторе RSI== помогите.. показывает все время false</content>
  </entry>
</feed>