Построение цифровой модели удачной стратегии торговли ценными бумагами. Описание. Доказательство

    Как вы догадались по заголовку, мое хобби — алготрейдинг. Решил поделится результатами, чтобы продемонстрировать Вам как многокритериальный анализ и подбор коэффициентов (продажи, покупки) индивидуально для каждого инструмента (акции) может отражаться на результате. Для того, чтобы поразить Ваше воображение, продемонстрирую пример с 500% годовых (на самом деле нет). Анализ на исторических данных я буду проводить с помощью торгового терминала «Альфа-директ», но представленный здесь опыт особо не ограничивает Вас в выборе инструмента.



    Суть, философия и детальное описание стратегии


    Суть банальна и проста: «Покупаем дешевле продаем дороже». Для упрощения, торговля будет проводится без учета сигналов индикаторов, фундаментального анализа, рекомендаций аналитиков, инсайдов, теорий заговора. Задумка создать простой инструмент, а как/когда/где его использовать — решает пользователь.

    Философия: считаю что каждая акция индивидуальна и зависит от стоимости лота, ликвидности, волатильности. Задача скрипта — за счет подстройки коэффициентов — максимально эффективно зарабатывать на любых движениях акции.

    Описание стратегии


    Шаг 1.

    • В зависимости от значения коэффициента (у меня он называется first_buy_ratio) покупаем заданное количество акции. Коэффициент указывается в процентах. Если коэффициент равен 100 — то покупаем по текущей цене, если 101, то покупаем по цене на 1% выше текущей, если, например first_buy_ratio=99, то покупаем по цене на 1% ниже текущей.
    • Запоминаем текущую цену и теперь считаем ее в качестве «цены покупки».
    • Переходим на шаг 2.

    Шаг 2.

    Здесь используется несколько коэффициентов, сразу опишу их:

    first_sell_ratio — насколько дороже продавать акции после первой покупки. Указывается в процентах от цены покупки. Например, если вам хватит 1% прибыли, то ставим 101, если 100.1, то — одна десятая процента.

    buy_in_ratio — когда усредняемся? Указываем в процентах от цены покупки. Например, если Вы хотите дозакупать акции после падения цены на 5%, то ставим 95

    sec_sell_ratio — насколько дороже продавать акции после падения цены И дозакупки? Этот процент добавляется к first_sell_ratio. Например после первой покупки, Вам хватало 1% прибыли, но цена пошла вниз, вы купили вдвое больше акций и возможно хотите продать весь объем акций уже не на 1% дороже ОТ ЦЕНЫ ДОЗАКУПКИ, а к примеру на 1.5% Тогда ставим sec_sell_ratio = 0.5

    Итак, шаг 2:

    Если текущая цена стала выше цены покупки на значение first_sell_ratio, то:

    • продаем
    • радостно возвращаемся к шагу 1.

    Если текушая цена акции стала ниже цены покупки на значение коэффициента buy_in_ratio, то:

    • Покупаем вдвое больше акций
    • Цена покупки = Цена дозакупки
    • Увеличиваем % продажи всего объема купленных акций на значение коэффициента sec_sell_ratio
    • Остаемся на шаге 2.

    Если ни одно из условий шага 2 не случилось, то скрипт продолжает оставаться на данном шаге, проверяя значение цены с заданной частотой (рекомендую с частотой 1 сек)

    Вот такая простая стратегия, философия которой реализована в коэффициентах. Ну а теперь, перейдем к волшебству и попытаемся математически разрешить борьбу «жадности со страхом», которые постоянно преследуют трейдера. Говоря проще — просчитаем ответ на вопросы «Когда продавать? Когда дозакупать?»

    Доказательство, оно же «тестирование на исторических данных», оно же «построение модели»


    Как доказать, в первую очередь самому себе, что твоя стратегия — прибыльная? Правильно, погонять ее на исторических данных. Но не только… помните, как раньше в школе, делали домашку по математике и если не получалось решить задачку, смотрели правильный ответ в конце учебника и подгоняли решение под ответ? :) Оказывается, это называлось не хитростью, а математической дедукцией :) Мы хотим получить максимальную прибыль, а значит можно «подогнать» ну или подобрать значение коэффициентов стратегии которое на выходе даст максимально ожидаемый результат.

    Попробуем на примере. Наиболее показательны акции Полиметалла.

    Я использую торговый терминал Альфа-директ, там эта функция реализована. Запускаем тестирование.

    Устанавливаем скромные коэффициенты. Обратите внимание, на то, что чем меньше таймфрейм, тем больше результат. Есть очень большая разница между тестированием на «дневках» или на «минутках», это вполне очевидно, т.к. порой сильные движения «туда-обратно» происходят в небольшие промежутки времени (привет, HFT). Но, таймфреймы меньше «минутки» Альфа-директ отдает очень долго и неохотно. Поэтому я в тестировании использую «минутки».





    Что мы сделали? Мы запустили процесс тестирования стратегии, указав параметры, которые можно расшифровать так:

    «Торгуем акциями Полиметалла на минутных таймфреймах. Первая покупка осуществляется от количества в одну акцию, от текущей цены. Продаем первую покупку при росте цены на 0.3%. Докупаемся при падении цены на 2%, причем при докупке увеличиваем процент продажи на 0.5%. Тестируем данную стратегию на исторических данных в период с 16.01.2019 по 02.06.2020. Максимальная просадка в 10000 акций»

    Вот что получилось.



    Прибыль 17,38% за 505 дней, всего было совершено 1298 сделок, из них 1030 успешные.

    Скромненько, но со вкусом. Давайте попробуем поэкспериментировать? Снова запускаем процесс тестирования, и увеличиваем коэффициент sec_sell_ratio до значения sec_sell_ratio=1

    Вот что получили:



    Прибыль 47.88%. Офигенно? На самом деле не очень, объясню чуть позже. А сейчас постараюсь возбудить Вашу фантазию, снова запускаем процесс тестирования, ставим sec_sell_ratio=5,5



    518% за 505 дней, Карл!!! Вау. И это «Вы еще в ракету на заглядывали», не увеличивали число акций для первой покупки. Увеличьте Qty до 10 акций и получите отличную картинку для презентации какого-нить авантюриста. Но, пожалуйста, не занимайтесь самообманом! Посмотрите, на последних двух тестах, график доходности не пологий, а просто в какой-то момент произошел скачок цен на 50% и робот этим воспользовался. Все остальное время робот вел себя достаточно вяло.

    Есть один важный нюанс, который необходимо учитывать всегда при использовании данной стратегии: надо очень внимательно относится к коэффициенту buy_in_ratio, т.е. проценту просадки цены для дозакупки. Если Вы выставите его очень большим, например 99.99, то при падении цены акции на 5%, робот очень быстро лишит невинности любой самый большой депозит (читать про притчу о зернах на шахматной доске). Поэтому, настоятельно рекомендую, очень прям прошу: в качестве коэффициента просадки не ставьте число больше 98, а объем акций для первой покупки не должен превышать 1/20 части Вашего депозита.

    Полагаю, у Вас сразу возникает резонный вопрос: ну и как торговать с учетом техники безопасности?

    Для себя определил следующий подход:

    1. Обсчитываем акции первого эшелона, подбираем самые безопасные и выгодные цифровые модели.
    2. На каждую акцию запускаем робота с соблюдением всех мер предосторожности (минимальное число акций, минимальный процент просадки ну и так далее)
    3. Контролируем свою ферму роботов, чтобы кто-то из них не «выжрал» весь общий депозит
    4. Если Вам этого мало, например сделки проходят успешно, но их частота не высока, тогда «смотрим за границу», например считаем модели по иностранным рынкам.

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

    Дополнительные материалы


    Вот ссылка на инструкцию на GitHub.

    Выбираем и качаем файлик Greedy.docx

    Также свои мысли я опубликовал на форуме, вот здесь.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

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

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

      +2
      > Правильно, погонять ее на исторических данных.
      Неправильно, поторговать на реальных деньгах. См: грааль.
        0
        я не опираюсь на чужие грабли или достижения, если честно, только на математику. Но, вы отчасти правы, т.к. именно «реальные деньги» — это не просто цифры на мониторе, а катализатор эмоции в человеке, в следствии чего растет вероятность возникновения ошибки :)
        0
        А подскажите, в тестировании например ваш алгоритм выдал «купить Х акций по цене Y», откуда берётся цена сделки? Вы уверены что вам по этой цене нальют?
          0
          В статье упомянул, что я бы обсчитывал акции «первого эшелона», т.е. самые ликвидные на нашем рынке. Ну и конечно, не стоит строить иллюзии, заниматься самообманом. Т.е. если Вы закладываете в Ваши расчеты продажу после роста в 30% — просто посмотрите как часто происходит такое движение цены в течение года по конкретному инструменту? Если 1-2 раза в год — не обманывайте себя. Я обычно ориентируюсь на частоту 1 событие в день, не меньше. Да, прибыль будет в долях процентА, но никто не отменял капитализацию депозита это надежнее, «лучше меньше но чаще» вообщем.
            0
            Я к тому, что наоборот, те кто тестирует на «таймфреймах» себя обманвают. Вам дают OHLC от чужих сделок, а по такой цене может и не быть ликвидности на самом деле. Всё это игрушки и ерунда, до реальной торговли этому как раком до пекина.
          0
          1) не видно число сделок покупки и продажи. А без этого, возможно, стратегия только в одном направлении умеет работать.
          2) Не видно исходных графиков цены, поэтому не очень понятно, где там тренды, в какую сторону и т.д.
          3) Надо проверять на особенности эмуляции движения цены в тестере. (Например, некоторые тестеры внутри минутного графика эмулируют движение цены по 4 точкам: открытие-максимальная-минимальная-закрытие. И поэтому очень легко сделать грааль, ловящий это движение. Но в реальном рынке его нет).
          4) Спреды, проскальзывания и комиссии надо считать всегда. Вручную задавая эти параметры в тестере. Т.к. они могут убить и всю прибыль.
          5) Низкое число проигрышных сделок в данной стратегии является не совсем честным показателем, т.к. используется усреднение позиции (ака мартингейл). Оно с одной стороны переводит массу проигрышных сделок в выигрышные, а с другой очень быстро увеличивает просадку при движении рынка против вашей позиции.
          6) Не вижу вообще управления рисками и хоть какого-то ограничения лота сделки в макс сторону. А без этого рискуем всем капиталом на счете.
            0

            А чего можно требовать от теста на минутках? Только по типовым данным

              0
              1) Альфа-директ показывает все проведенные сделки. Я просто не отобразил это на картинках в статье, но это есть.
              2) Вы правы, стратегия работает только в одном направлении, я так написал «купить дешевле продать дороже». Ну или если на слэнге трейдеров — моя стратегия играет только в лонг. При падении цены — усреднение.
              3) Да, можно уходить на более мелкие таймфреймы и это даст более высокий результат. Но это уже уход в сторону высокочастотной торговли, со своими особенностями.
              4) Согласен про учет спредов, проскальзываний и комисии. Думал об этом, решил это переложить на пользователя, т.к.: а) это есть в настройках стратегии в «альфа-директе» б) это должно быть заложено в риск-менеджмент пользователя.
              5) Является ли «усреднение» лукавством — сложный, порой философский вопрос, т.к. он опять же граничит с упомянутым самообманом. Но если опираться на математику, можно взять акцию цена которой снижается длительное время и потестировать ее. Я так делал, агрессивное усреднение помогает.
              6) Верно, управления рисками нет, и я не ставил такой задачи перед собой, т.к. считаю, что управление рисками должно быть в голове пользователя. Если его там нет — никакой софт ему не поможет.
                0
                > и комисии.
                > «альфа-директе»

                Ха-ха. Ахахахахаха. Ну вы и выбрали брокера, уж во всякое можно было вляпаться, но не сюда же…
                  0
                  Кстати, да.
                  Посмотрите на ВТБ, например.
                    0
                    я не согласен с Вами. замечу, я лишь их клиент. Отвечу конструктивно:
                    а) банк вместе со сбером и ВТБ входит в первую тройку самых крупных банков страны, куда уж надежнее?
                    б) в отличие от сберброкера — в марте «в тот самый противоречивый день», они не выпадали из жизни на сутки, а продолжали надежно работать
                    в) вам их софт не нравится? во-первых это дело вкуса, а во-вторых не обязательно пользоватся директом, можно использовать квик.
                      +1
                      Так я же не про сбер-брокера говорил )
                      Про него, да, отзывы так себе

                      Скажите, можете ли реализовать ваш алгоритм для QUIK?
                        0
                        Да, могу. Если желающих будет много.
                          0
                          Я единственный?
              0
              Мы хотим получить максимальную прибыль, а значит можно «подогнать» ну или подобрать значение коэффициентов стратегии которое на выходе даст максимально ожидаемый результат.

              Тогда еще не забывать о разделение выборки на обучающую и контрольную. Иначе получится робот, идеально торгующий на том промежутке, но абсолютно бесполезный в реальной ситуации.
                0
                Все верно. Но, к сожалению и это не даст 100% результата. Взамен контрольной выборки запускаю робота «в бой» на минимальном лоте и с «зажатой» максимальной позицией в лонг, с таймфреймом в 1 секунду.
                +1
                Как доказать, в первую очередь самому себе, что твоя стратегия — прибыльная? Правильно, погонять ее на исторических данных.
                Неправильно. Показанный результат на подогнанном к историческим данным алгоритме говорит только о том, что алгоритм можно подогнать к каким-то данным с каким-то результатом. И больше ни о чем. Вы допускаете стандартную ошибку 99.999% алгоритмо-торго-строителей — у вас нет ни каких данных или даже предположений при попытке ответить на вопрос, как долго и почему подогнанная модель будет давать результаты в будущем. То есть вы совсем не понимаете почему алгоритм работатет. И даже теоретически не можете предположить как долго алгоритм будет работать и с какой точностью. Надо не параметры алгоритмов подгонять, а строить настоящую математическую модель предметной области, т.е. торгового временного ряда. Именно такая модель и должна дать ответы на все эти вопросы.
                  +1
                  Очарование:
                  Возьмем случайное блуждание: каждую секунду плюс или минус цент с акции. Если купить хоть сколько нибудь акций, то с вероятностью 1 они когда нибудь станут на цент дороже прежнего, причем с большой вероятностью уже через секунду. Вау, да у нас есть 100% прибыльная стратегия: покупаем пакет акций, когда их цена станет на цент дороже цены покупки — продаем.

                  Разочарование:
                  К сожалению среднее время ожидания события возврата в процессе случайных блужданий равно бесконечности. Это означает, что несмотря на быстрое завершение большинства сделок у вас периодически будут возникать очень долгие периоды ожидания. Чем дольши вы будите придерживаться описанной стратегии, тем лучше будет работать закон больших чисел и тем ближе к нулю будет ее средняя прибыльность. Увы, но попытка интересная.
                    0
                    Вау. Признаюсь искренне, мне очень понравился Ваш комментарий. Вы правы, я лишь добавлю как долгие периоды ожидания легко «скрасить», чтобы не наступило разочарование: а) работать по нескольким акциям одновременно б) Хорошо знать акцию(инструмент) с которой работаешь, т.е. не ждать от нее результатов выше среднестатистического.
                    0
                    Что-то мне подсказывает, что через очень малое количество «удвоений количества покупаемых акций» у Вас кончатся деньги ;)
                      0
                      Верно, я об этом явно написал в статье. Но: 1) В торговой системе при запуске робота есть возможность ставить «предельное количество в лонг» — ну т.е. предельное число акций, которые робот в принципе может купить. 2) Именно поэтому и нужно тестирование — тесты можно прогнать в периоды, когда было сильное падение цен акций, например 2008 год или март 2020 — и оценить, какими должны быть проценты падения для «дозакупки», чтобы робот «не выел» весь Ваш депозит.

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

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