Реализация простейшей стратегии инвестирования на базе API MOEX (Московской биржи)

    Введение


    В это горячее время криптовалют стоит помнить не только о высоких мгновенных спекулятивных доходах, но и о том, что ваши деньги могут работать и зарабатывать всю вашу жизнь. Являясь приверженцем фундаментального анализа при выборе объектов инвестирования я уже несколько лет предпочитаю хранить деньги в ценных бумагах. Я прошел через несколько этапов формирования инвестиционного портфеля, подходящего моей психологической устойчивости, несколько раз пересматривал состав портфеля, и постепенно пришел к тому, что имею сейчас.



    Сущность стратегии: с помощью простейшего технического анализа в виде слежения за простыми скользящими средними вы находите точку смены тренда и продаете или покупаете актив. Я ни в коем случае не агитирую за то, чтобы вы сразу бросались и начинали торговать на бирже, потому что это 100% работает. Это работает только(!) в комплексе с пониманием фундаментальных процессов происходящих в компании.

    Два варианта применения стратегии


    Первый вариант

    Не буду вдаваться сейчас в интереснейшие дебри теории формирования правильного инвестиционного портфеля, расскажу лишь о такой вещи, как ребалансировка. Ребалансировка — периодическое выравнивание пропорций активов в портфеле с помощью продажи подорожавших и покупки подешевевших активов. Есть некоторые споры насчет эффективности этого действия, но я придерживаюсь позиции, что это хорошая практика. Остается вопрос — как проводить и в какое время.



    Некоторые считают, что ребалансировать нужно в определенный месяц и весь портфель, другие считают, что надо ловить удобные моменты (к сожалению это не всегда удается). Поэтому я стараюсь комбинировать эти два подхода при реализации ребалансировки.

    Второй вариант

    Также, у каждого инвестора есть подавленный спекулянт, и эта спекулятивная жилка периодически просыпается в каждом из нас. Конечно, лучше всего, если она просыпается в спокойное время, а не во время коррекции, когда мозг упорно убеждает «Продавай-продавай-продавай». Чтобы накормить нашего внутреннего спекулянта, мы можем пользоваться простейшей стратегией, которой пользуются очень многие трейдеры и в то же время она является достаточно простой и надежной. Стратегия «следования тренду» (описание). Может быть вы встречались ранее с этими терминами, например на рынке форекс или на других около рыночных ресурсах, но с точки зрения комбинации спекуляции + инвестирование есть существенное отличие, которое заставляет посмотреть на эту стратегию с другой стороны.

    Приведу в пример парочку компаний за которыми я слежу и считаю их достаточно хорошими в фундаментальном смысле (хороший бизнес, отчетность, наличие дивидендов):

    Пример 1: Enel



    Пример 2: Аэрофлот



    Красными кружками отмечены точки пересечения двух скользящих средних с разными периодами, что является сигналом к тому, что тренд достаточно крепкий и можно принимать решение о действии(покупки\продажи), в соответствии с фундаментальной обстановкой. Например, аэрофлот можно было бы продать на квартал, именно из за его последнего квартального отчета. Многим спекулянтам достаточно этого фактора, чтобы начать продажу. Для долгосрочного же инвестора это является сигналом к тому, что можно хорошо усреднить среднюю стоимость покупки(докупить бумагу по меньшей цене) или сделать ребалансировку.

    Техническая часть


    Так как я не любитель просиживать штаны за терминалом, а мой брокер не предоставляет функций слежения за трендами, то я решил изучить доступное описание API Московской биржи, справочник запросов и написать скрипт, который будет информировать меня о смене тренда для интересующих меня инструментов(читать «всех ценных бумаг из которых состоит портфель») по почте.

    Для начала был написан небольшой класс:

    Код класса
    class emitent {
        public $name;
        public $cost; //текущая цена
        public $trand; //направление тренда
        public $closeCost; //цена закрытия
        public $average50; //значение скользящей средней 50 дней
        public $average15; //значение скользящей средней 15 дней
        
        public function getPrice($emitent,$format){
            $uri = 'https://iss.moex.com/iss/engines/stock/markets/shares/securities/'.$emitent.$format;
            $result = file_get_contents($uri);
            $resultObject = json_decode($result,true);
            /* @var $resultObject type */
            $this->cost = $resultObject['marketdata']['data'][2][12];
            return $this->cost;
        }
     public function getAverage50($emitent,$format){
            $historyPrice = [];
            $historydata = [];
            $date1 = date("y-m-d",strtotime("-1 days"));
            $date2 = date("y-m-d",strtotime("-100 days"));
            $uri = 'https://iss.moex.com/iss/history/engines/stock/markets/shares/boards/TQBR/securities/'.$emitent.$format.'?from='.$date2.'&till='.$date1;
            $result = file_get_contents($uri);
            $resultObject = json_decode($result,true);
            $historydata = $resultObject['history']['data'];
            $historydata_reverse = array_reverse($historydata);
            for ($i=0;$i<50;$i++){
                    array_push($historyPrice,$historydata_reverse[$i][11]);
            }
            $average50 = array_sum($historyPrice)/count($historyPrice);
            return $average50;
        }
        public function getAverage15($emitent,$format){
            $historyPrice = [];
            $historydata = [];
            $date1 = date("y-m-d",strtotime("-1 days"));
            $date2 = date("y-m-d",strtotime("-50 days"));
            $uri = 'https://iss.moex.com/iss/history/engines/stock/markets/shares/boards/TQBR/securities/'.$emitent.$format.'?from='.$date2.'&till='.$date1;
            $result = file_get_contents($uri);
            $resultObject = json_decode($result,true);
            $historydata = $resultObject['history']['data'];
            $historydata_reverse = array_reverse($historydata);
            for ($i=0;$i<15;$i++){
                    array_push($historyPrice,$historydata_reverse[$i][11]);
            }
            $average15 = array_sum($historyPrice)/count($historyPrice);
            return $average15;  
        }
     }
    


    Из тонких моментов, которые я взял из справочника:

    https://iss.moex.com/iss/history/engines/stock/markets/shares/boards/TQBR/securities/

    History — запрос цен из нужного периода времени
    Stock — торговая система(engines) «Фондовый рынок и рынок депозитов»
    Shares — конкретный рынок(markets) «Рынок акций»
    TQBR — конкретный режим торгов(boards) «Т+ Акции и ДР»

    Ответ сервера или json или xml. Вы получаете массив с данными. Данные в массиве могут варьироваться в зависимости от запроса, который вы посылаете. Описание полей массивов хранятся в тех же данных в блоке «COLUMNS». Значения — в блоке «DATA».

    Полное описание всех полей, относящимся, например, к рынку акций, можно посмотреть на этой странице.(Кстати, нашел я это описание только при подготовке статьи).
    Замечание. Если вы берете промежуток больше 100 дней, то там надо делать несколько запросов, перемещая указатель массива. Ситуация описана на последней странице Руководства Moex API

    После этого был написан сам скрипт (за качество кода палками прошу не бить):

    Код скрипта
    require_once ($_SERVER["DOCUMENT_ROOT"].'/classes.php');
    $file = 'portfolio.json'; //Сохраненные данные по прошлым трендам
    $portfolio = json_decode(file_get_contents($file), true);
    foreach ($portfolio as &$emitent) {
        $sending_mail = false;
        $emitentMoex = new emitent();
        $emitentMoex->name = $emitent[0];
        $emitentMoex->trand = $emitent[1];
        $format = '.json';
        $price     = $emitentMoex ->getPrice($emitentMoex->name, $format);
        $history15 = $emitentMoex ->getAverage15($emitentMoex->name, $format);
        $history50 = $emitentMoex ->getAverage50($emitentMoex->name, $format);
            if ($history15<$history50){
                $trend_course = "Тренд вниз";
                $trand_course_bool = false;
            } else {
                $trend_course = "Тренд вверх";
                $trand_course_bool = true;
            }
            if ($trand_course_bool != $emitentMoex->trand){
                $sending_mail = true;
                $trend_course .='. Тренд изменился';
                (boolean)$emitent[1] = $trand_course_bool; 
            }
    
            if ($sending_mail){
                $date = date("y-m-d");
                $headers  = "Content-type: text/html; charset=UTF-8 \r\n"; 
                $headers .= "From: Change trands alert <yourmail@box.com>\r\n"; 
                $message = "Эмитент: ".$emitentMoex->name."<br>"."Цена сейчас: ".$price. "<br>"."Средняя на 15: ".$history15."<br>"."Средняя на 50: ".$history50."<br>".$trend_course;
                mail("yourmail@box.com", 'test'.$date , $message,$headers);
                }
    }
    file_put_contents($file, json_encode($portfolio,true));
    ?>
    


    Он получает из массива json, лежащим в той же папке список тикеров и метку направления тренда. Запрашивает цены за указанные промежутки времени и высчитывает значения простых скользящих средних по формуле:

    $\frac{\sum\limits_{i=1}^n P_i}{n}$


    Где P — цена закрытия, а n — количество промежутков времени, за которые берутся значения цен.

    пример массива
    [
        ["GAZP",true],
        ["MTSS",true],
        ["FEES",false],
        ["ENRU",true],
        ["IRAO",0],
        .
        .
        .
        ["AFLT",0],
        ["LKOH",true],
        ["GMKN",true]
    ]


    Далее определяет текущее направление в зависимости больше или меньше значение меньшей средней(15-тидневной) чем значение большой(50-тидневной). Сравнивает текущее направление с сохраненным и при изменении значения присылает оповещение на почтовый ящик.
    Далее я открываю новости по тикеру и анализирую ситуацию.

    Итог


    Биржа предоставляет доступ к информации бесплатно, с условием задержки в 20 минут. Для спекуляций внутри дня данные не подходят, но вот написать какие-либо инструменты, которые помогут принимать решения в среднесрочном периоде времени очень даже подойдут. С ходу, например, индикатор достижения целевой цены. Многие брокеры и консультанты выкладывают рекомендации по целевым ценам в открытый доступ и вы спокойно можете написать скрипт, который будет отслеживать цену. У yahoo.finance, например, этот инструмент сначала сломался, а потом его и вовсе убрали. Также, публичные зарубежные сервисы криво получают информацию о ценах наших эмитентов.

    Надеюсь, эта информация поможет вам в дальнейшем удобнее контролировать свой портфель, как она помогла мне.

    Полезные ссылки для долгосрочных инвесторов:

    ВокругДаОколо
    Записки инвестора
    Путь к богатству

    P.S. Хочу отметить, что наблюдения за трендами относится к техническому анализу акций. Многие фундаментальные инвесторы отрицательно относятся к ТА, считая его гаданием, предсказанием и т.д. Но моя точка зрения такова, что ТА — скорее помощник инвестора в принятии решений, только подтверждающий какую-либо гипотезу. Но ни в коем случае не инструмент для безапелляционного утверждения. Как любят повторять в среде непрофессиональных фин.консультантов, все написанное выше не является руководством к действию и рекомендацией к совершению сделок.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 32

      0
      кстати да… а про квартальный отчет аэрофлота… не знаю что там…
      если он в цифрах, где-то выкладывается, то его же тоже можно будет анализировать автоматически и на результатах анализа делать выводы.
      и к чему тогда это будет относиться? к техническому или фундаментальному анализу? :)
      мне просто всё больше кажется, что фундаментального анализа нет. есть просто недостаток данных/автоматизированного алгоритма анализа, которые заставляют человека участвовать в процессе…
        0
        Могу вам привести пример новости, которую не предскажет никогда никакая автоматизированная система. Фундаментальные же факторы позволяют крупному инвестору не обращать внимания на такие новости вовсе, смотря на горизонт событий от 5 лет.
        Конечно, все выкладывается в цифрах и есть системы помощи принятия решений, есть консультанты и информационные порталы. В сфере финансовых рынков это все стоит бешеных денег и, конечно, вам решать платить их или нет(можете обратить внимание на стоимость подписок bloomberg или reuters).
        Жмут руки в кабинетах не компьютеры:)
          0
          а где я говорил про предсказание? :-)
          я про анализ именно таких новостей и после него соответствующие автоматически корректировки в поведении алгоритма
            0

            К сожалению, такие системы придется достаточно часто корректировать, потому что анализ фин.отчетности проводится в соответствии с уставом компании, в котором прописаны все нюансы интерпритации тех или иных статей. И меняться это может достаточно динамически. Конкретно в моем примере система должна была знать, что бумажная прибыль влияет на размер дивидендов. Да, как инвестор, вы можете нанять команду программистов и платить ей(причем система будет давать ошибки, а ошибка ценой в миллионы никому не нужна), но вам проще хорошо понимать финансы и просто ориентироваться в ситуации.

          0
          Обычно отчетность выкладывается в файлах pdf, которые трудновато парсить автоматизированно. Есть сервисы, где уже все скомпоновано, но даже там я не нашел требуемой функции. А у меня лишь один из тех примеров, которые хоть чуть-чуть помогают.
            0
            я просто вспомнил что-то пример один… там на американской площадке какой-то выкладывали отчеты… и соответственно советник (программа/робот/эксперт — как хотите — так и называйте) не только смотрел и анализировал изменение цены (ну как в этой статье скользящие средние) но так же и эти данные подтягивал при их выходе и уже на совокупности всех данных…
          0
          Какой у вас получился доход по счёту (в процентах годовых), если не секрет?
            0
            Средний больше банковского депозита в 1,5 раза. В 2014 было совсем красиво, но сейчас эффект размазался.
              0
              Неплохо)
                0
                А, прошу прощения. Хочу уточнить, что я не торгую на основе этой стратегии. Я принимаю решения о покупке только из фундаментальных факторов. А вот продать часть позиции могу, чтобы переложить в другой актив. А то вы можете подумать, что настроив алерты я только по ним и совершаю покупки.
                  +1
                  Да, понятно, вы же это указали в статье. Меня результаты в целом интересовали.)
                0
                Это ведь не очень много. Около 10% сейчас?
                В то время как готовые инвест продукты(ПИФы облигаций например) дают около 13%, не взирая на все кризисы.
                И после 2008 и после 2014 очень быстро возвращаются на прежний тренд.
                  0
                  Спасибо! Ваш вопрос можно разбить на два. В чем преимущество и недостатки ПИФа? И доходность различных инвестиционных инструментов.
                  1. Преимущества: Если(!) вы его правильно выберете, то доходность может быть большой, но зависеть она будет не всегда от состава ПИФа, но и от действий управляющего.
                  2. Недостатки: Вы не контролируете свои деньги, вы принимаете на себя риски организации, эмитирующей ПИФ и полностью полагаетесь на человека, которого им управляет. Вы не получаете дивы напрямую, вы получаете прирост стоимости пая.

                  Правильно составленный портфель должен всегда включать в себя разные типы активов, которые по минимуму коррелируют между собой. Там могут быть акции, облигации, пифы, кэш, желательно в правильных пропорциях.
              +1
              image
              Собственно, вот как выглядит сегодняшний алерт.
                0
                Не стоит полагаться на просто пересечение скользящих средних. Все это будет работать только там где есть сезонность или какие-то периоды. На хаотичном рынке (например бирже криптовалют) это не работает: ложные сигналы, запаздывание. Попробуйте в сторону MACD индикатора посмотреть.
                  0
                  Если вы прочтете Wiki про MACD, то увидите, что принципы анализа те же самые:) Еще раз повторюсь, что это не торговая стратегия, а один из факторов принятия решения, который я для себя реализовал.
                  В торговые стратегии, основанные полностью на ТА, я не верю.
                  0
                  Не хочу что бы показалось рекламой, но, как мне кажется, все то же самое (накладывать инструменты на график котировок) можно на ресурсе ru.investing.com или я упустил какую-то важную составляющую?

                  image
                    0
                    Да я уже приводил ссылку на этот ресурс вот в этом комментарии. Важная составляющая — сообщение на почту при пересечении графиков. А так, для визуального анализа там конечно все есть.
                      0
                      Да, спасибо, не кликнул по ссылке из того комментария )))
                    0
                    Отличная статья, спасибо!
                      0
                      но и о том, что ваши деньги могут работать и зарабатывать всю вашу жизнь.
                      Очень дешевый рекламный ход. Скользящие средние ни что иное как обычный фльтр, значение которого базируется на N предыдущих значениях. Будущий курс, от прошлых значений никак не зависит. Слепая торговля по такому алгоритму «сожрет» весь ваш счет.
                        0
                        Полностью согласен. Именно поэтому я уже трижды написал, что для этого надо понимать фундаментальные предпосылки к колебаниям и что это не торговый алгоритм. Серьезно, перечитайте статью и комментарии.
                        Насчет «рекламного хода» — просто фраза, я же ничего не продаю.
                          0
                          Например, самый простой сценарий, который можно реализовать. Есть два актива с обратной корреляцией между собой. Один из них сменил тренд на негативный, вы его продали, а потом, дождавшись позитивного тренда другого актива — купили. Так можно брать из индекса Московской биржи, кто торгуется большими объемами.
                            0
                            Роботы вас сожрут :)
                            Не знаю людей которые бы спекулируя на торговле стали богатыми. Зарабатывать на спекуляции — миф. Да во время высокой волатильности можно «пошакалить», но все сильно зависит.
                              0
                              Дорогой друг, какие роботы? При чем тут вообще роботы?
                              Богатство — понятие относительное. То, что вы не знаете таких людей, еще не значит, что их нет. Вот вам для примера пост в фб на достаточно успешного трейдера, который и несколько кризисов пережил, и торговать умеет чем угодно.
                              А мой пост не про спекуляции, а про удобный инструмент для помощи в принятии определенного решения. Я уже задумался о посте, в котором пошагово расскажу основы расчетов для инвестора. Может вам будет интересно.
                                0
                                Дорогой друг, какие роботы? При чем тут вообще роботы?
                                Вы видимо очень далеко от трейдинга, раз говорите, какие роботы :) на площадках существует дефицит «живых людей», т.к. роботам против них торговать легко, по этому для успешной торговли необходимо как можно больше хомячья в торговле.
                                То, что вы не знаете таких людей, еще не значит, что их нет.
                                В моем случае значит :)
                                Первое правило трейдинга знаете? Не торговать на свои :)
                                  0
                                  Я говорю «Какие роботы» потому, что никто не торгует роботами на тех временных промежутках, про которые я пишу в статье:) Была бы статья про скальпинг — тогда другое дело.
                                  Да и вообще, я тут трейдинг не защищаю, о чем мы вообще спорим?)
                                  Вот если бы вы сказали «Портфельное инвестирование» никого не сделало богатым, тогда можно было бы обсудить. Или там «ребалансировка не работает» тоже вариант для дискуссии.
                                    0
                                    Я говорю «Какие роботы» потому, что никто не торгует роботами на тех временных промежутках
                                    Это вы почему так считаете?
                                      0
                                      А смысл?
                                        0
                                        А смысл?
                                        Точно такой же как и увас :) купить подешевле, продать подороже — продать подороже, купить подешевле :)
                                        Прежде чем лезть в торговлю на свои, очень рекомендую поработать где-нить трейдером на деске, чтобы не было иллюзий :)
                                          0
                                          У меня смысл поймать нужную точку входа, а покупку я совершаю по другим параметрам. Дорого или дешево это — оцениваю я лично, исходя из фундаментальных факторов. Наверно, у кого-то есть программа, оценивающая фундаментальные факторы и фин.отчетность, но точно нет программы, которая следит за рыночной коньюктурой.
                                          Роботы, торгующие по фундаментальному анализу — не слышал.
                                            0
                                            На все это есть и люди и инструменты. За что-то новое уникальное в фин сфере платят хорошие деньги ) Сможете позволить домик в принципе в любой точке мира.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое