Всем привет. Увлекаюсь алготрейдингом, иногда пишу сюда. Придумал, реализовал и протестировал простую стратегию. Решил поделится своим личным достижением, чтобы продемонстрировать Вам как многокритериальный анализ и подбор коэффициентов индивидуально для каждого инструмента (акции) может отражаться на результате.
Суть, философия и детальное описание стратегии
Суть банальна и проста «Покупаем дешевле продаем дороже». Да, только лонг с усреднением при падении, у меня аллергия на шорты. Без учета сигналов индикаторов, фундаменталки, бреда нейронных сетей и прочего. Задумка создать простой инструмент, а как/когда/где его использовать — решает пользователь.
Философия: считаю что каждая акция индивидуальна и зависит от стоимости лота, ликвидности, волатильности. Задача скрипта — за счет подстройки коэффициентов — максимально эффективно зарабатывать на любых движениях акции.
Описание стратегии:
Приближается дата заседания OPEC+ и нет ничего удивительного, что, как всегда, прямо перед встречей начинает появляться много противоречивых сообщений и сомнений. СА и Россия недовольны тем как Нигерия и Ирак выполняют сделку. Можно подумать будто кто-то всерьез рассчитывал, что эти страны полностью выполнят сделку; Россия ее тоже не выполняет. Выглядит так будто СА и Россия просто еще не приняли решение. При этом, СА, Кувейт и ОАЭ уже заявили, что добровольные сокращения продлевать не будут. Кстати, вот утром появидись сообщения, что Aramco откладывает прайсинг своей нефти минимум до воскресенья. Вчера вышли запасы по EIA, как и писал раньше, все внимание было к запасам нефтепродуктов. Спрос на дизель и бензин падает, запасы этих двух видов топлива продолжают расти, и на данный момент — это главный показатель восстановления после пандемии. К сожалению, не очень понятно, на сколько сейчас можно верить запасам EIA. Многие аналитики
Привет, выражение «чем выше риск, тем выше доходность» внешне выглядит логично, но не находит подтверждения на практике. По акциям США и Европы на длинных горизонтах уже доказано, что акции с наименьшим риском приносят больше доходности, чем высокорискованные даже без поправки на риск. В качестве меры риска принято использовать рыночную бету, но сегодня мы будем тестировать волатильность (стандартное отклонение) дневной доходности, а бету оставим для будущих экспериментов.
За основу мы возьмем работу Нэда Бейкера и Роберта Хогена «Low Risk Stocks Outperform within All Observable Markets of the World» (2012). Авторы просто посчитали волатильность для каждой акции за последние 24 месяца, сформировали по 2 портфеля из 10% акций с наибольшей и наименьшей волой и повторяли это каждый месяц. Да, это академическая работа, но она написана не теоретиками и носит важные практические выводы. Очень рекомендую почитать в оригинале. Вот, что получили авторы по рынкам развитых стран:
Продолжаю экспериментировать с распределением ценовых приращений. Задался вопросом, насколько быстро меняется распределение в зависимости от:
1) размера выборки
2) соотношения «размер тестовой выборки / (размер основной + тестовой выборки)»
Техника простая — разбиваем серию минуток на перекрывающиеся интервалы, каждый интервал разбиваем на две части — основную выборку и тестовую, проверяем, отличается ли первая от второй. И так для каждой акции, размера целой выборки, размера тестовой выборки.
Перед отображением на графике результаты усредняем.
Факт изменения распределения определялся тестом Колмогорова-Смирнова.
Ниже — графики зависимости изменчивости распределения от размеров выборки (тестовой и совокупной)
Замечу, что при небольших размерах выборки результаты на левой части графика становятся недостоверными (минимальный набор для теста Колмогорова-Смирнова ~ 30).
Не смотря на слухи о переносе даты встречи OPEC+ на 4.06, на сайте OPEC появились две другие даты, которые были оговорены ранее: девятое и десятое июня. Bloomberg продолжает настаивать, что на встрече будет решение о коротком продолжении сделки, однако, переговоры могут стать непростыми так как ранее Россия сообщала о желании увеличить квоты добычи. За последние 24 часа вышло очень много новостей, которые должны поддерживать цену на нефть. Главными являются новости о росте спроса в Китае, у берегов этой страны выстроилась очередь из танкеров, а переработка на НПЗ восстанавливается V образным способом. Более того, Китай вынужден покупать российскую нефть марки URALS с премией к саудовским сортам, просто потому что им не хватает объема из СА. На этом фоне, королевство сигнализирует о возможном поднятии цен в Июле. Если это произойдет, то нефти не составит труда закрепиться выше 40$ за баррель. Стоимость доставки танкерами
Всех приветствую!
Пост – призыв задуматься и может быть пересмотреть свои риски в сторону уменьшения. Волатильность возросла – это хорошо, но и риски повысились. К оценке рисков стараюсь подходить серьезно. Поэтому решил описать подход, которым руководствуюсь при управлении соотношением размера гарантийного обеспечения к депозиту.
В чем собственно проблема? Грузим депозит под завязку. Плечо 1 к 8. Оставляем чуток под просадку и в бой! Повезет если счет начнет расти, сформируется некий запас. А если события будут складываться не так удачно: просадка 40%, а следом огромный гэп. Что останется от депозита? Выход из ямы займет очень много времени.
Решение проблемы – создание резерва. Использую следующую пропорцию:
50% – это максимальное расчетное ГО, сумма максимальных лимитов по всем ботам. Оно может меняться от 0 до 50% в зависимости от: направления позиции (кто в лонг, кто в шорт, кто вне позиции), ММ алгоритма (фиксированный объем, плавающий), волатильности на рынке.
В общем, угрохав на исследования 2-3 года (не ну конечно за 2-3 года я еще успел сделать несколько безуспешных проектов инвесторов) я таки запустил наконец-то реальную торговлю сразу на двух брокерах бинарок.
Поковырявшись в 264 стратегиях я выяснил, что хорошо себя ведут стратегии, которые были изобретены еще 2 года назад. Ну то есть сильные закономерности существуют до сих пор и уверенно себя чувствуют. С тех пор конечно что-то было улучшено, но сами закономерности остались те же. Даже обидно, мог бы раньше запуститься.
В итоге решил убрать стратегии, которые работают сейчас не очень, и картина не сильно поменялась в плане прибыли. Зато повысилась стабильность и повысился винрейт.
Если торговать с коэффициентом ослабления критерия Келли 0.2 и процентами выплат 82% у одного брокера и 80% у другого, получается неплохой результат. Винрейт у сигналов разный, но в среднем он 59%. Вот результат теста с начала 2020 года по 26.05.2020. Т.е. этот период вообще никак не участвовал в настройке стратегий.
Очень простая, многопоточная серверная и клиентская библиотека Named Pipe, реализованная с использованием C++11. Проект был проверен на компиляторе mingw 7.3.0 x64. Папка code_blocks содержит примеры для IDE Code::Blocks. Не забудьте в проектах указать свой компилятор, иначе проект не соберется. Сделал либу только сегодня, так что в ней могут быть ошибочки.
#include <iostream> #include "named-pipe-server.hpp" int main() { /* в конструкторе сервера можно также задать размер буфера */ SimpleNamedPipe::NamedPipeServer server("my_server"); /* обработчики событий */ server.on_open = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection) { std::cout << "open, handle: " << connection->get_handle() << std::endl; }; server.on_message = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection, const std::string &in_message) { /* обрабатываем входящие сообщения */ std::cout << "message " << in_message << ", handle: " << connection->get_handle() << std::endl; connection->send("ok"); }; server.on_close = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection) { std::cout << "close, handle: " << connection->get_handle() << std::endl; }; server.on_error = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection, const std::error_code &ec) { std::cout << "error, handle: " << connection->get_handle() << ", what " << ec.value() << std::endl; }; /* запускаем сервер */ server.start(); std::system("pause"); /* останавливаем сервер * (деструктор класса сам выполнит остановку, вызывать не обязательно) */ server.stop(); std::cout << "close program" << std::endl; return EXIT_SUCCESS; }