Блог им. DenisBazarnov

Как заработать на акциях Полиметалла 518% годовых(не совсем). Описание стратегии и доказательство.

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

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

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

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

   Описание стратегии:
   Шаг 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). Но, таймфреймы меньше «минутки» Альфа-директ отдает очень долго и неохотно. Поэтому я в тестировании использую «минутки».
Как заработать на акциях Полиметалла 518% годовых(не совсем). Описание стратегии и доказательство.

Как заработать на акциях Полиметалла 518% годовых(не совсем). Описание стратегии и доказательство.


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

Как заработать на акциях Полиметалла 518% годовых(не совсем). Описание стратегии и доказательство.


   Прибыль 17,38% за 505 дней, всего было совершено 1298 сделок, из них 1030 успешные.
   Скромненько, но со вкусом. Давайте попробуем поэкспериментировать? Снова запускаем процесс тестирования, и увеличиваем коэффициент sec_sell_ratio до значения sec_sell_ratio=1
Вот что получили:

Как заработать на акциях Полиметалла 518% годовых(не совсем). Описание стратегии и доказательство.

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

Как заработать на акциях Полиметалла 518% годовых(не совсем). Описание стратегии и доказательство.


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

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

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

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


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

   Вот ссылка на инструкцию: https://github.com/BazDen/Greedy
   Выбираем и качаем файлик Greedy.docx

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

 

★5
9 комментариев
ну с богом.
Жирный Тони целыми днями испытывал стратегии.
avatar
Сетки — это путь к катастрофе. Это если не очень беспокоится о рисках. А если о рисках беспокоится по настоящему — доходность будет ничтожной. Тема исследована в хвост и в гриву. Возможно, там и есть какие-то неочевидные решения, но я не знаю ни одного человека, который бы их нашел.
avatar
SergeyJu, согласен. Но лично мне данное решение подходит в том плане, что я могу с утра оставить стайку роботов попастись на лужайке (предварительно выставив строгие ограничения по риску), а вечером проверить результат. 
а 2008 год тестировали? интересно как в такой период покажет себя стратегия.
avatar
matroskin, нет, не смотрел, но стоит попробовать. Но, боюсь там клиент может не дожить до счастливого финала с таким большим число усреднений. 
matroskin, надо протестировать с 1877, тогда будет четкая картина.
avatar
Andrew Daviss, думаете написали что то остроумное или просто умное? Разочарую, ни первое, ни второе. А корректный тест позволяет избежать или сократить потерю реальных денег.Если конечно человек реально торгует, а не умничает на диване)))
avatar
Ну так а что будет при падении акции на 30%? А на 50%?
Депозит сольётся и всё? Что-то не нашёл в описании контроля рисков.
Так что такая стретегия будет хоть как-то в теории работать только при гипотетическом бесконечном депозите, а он всегда конечен.
В реальности — это маржин при первой существенной просадке рынка.
Павел Мамонтов, да, я в статье обозначал, что необходим контроль расходов бота, к примеру установка «предельной позиции лонг». В реальной жизни пользователь «вручную» балансирует расходы/доходы роботов по разным инструментам из разных секторов. 

теги блога Денис Базарнов

....все тэги



UPDONW
Новый дизайн