В этом году у меня своеобразный юбилей — 10 лет назад придумал и запустил первый портфель торговых роботов. Как вспомню те времена аж ностальгическая слеза наворачивается… Под роботов купил с рук отдельный компьютер, поставил в чулан, установил на него teamviewer для контроля с работы. Тогда в ЖЖ можно было почерпнуть много информации по алготрейдингу, тема была «на волне», много энтузиастов любителей писали интересные статьи с идеями и практически готовыми стратегиями. Что-то с тех времен даже до сих пор работает.. На моем веку с 2010 было как минимум 4 года, когда можно было удвоить депозит (2011, 2014, 2015, 2018) и это не считая текущего. Были и неудачные года с серьезной просадкой, сильно давившие на психику. Отключал торговлю я только раз на месяц в марте 2013, так сказать на пике своего эмоционального разочарования в алготрейдинге (хорошо потом переработав портфель и поразмыслив, перезапустил все обратно, следующий год «девальвации» и «Крыма» с лихвой отбил все предыдущие потери). Но не об этом. Решил я кратко и тезисно изложить проблемы, с которыми пришлось мне столкнуться за годы активного алготрейдинга.
Всем привет! Много писать не буду, просто выкидываю статы роботов за 5 месяцев этого года, всё как всегда.
Si:
Всех приветствую!
Пост – призыв задуматься и может быть пересмотреть свои риски в сторону уменьшения. Волатильность возросла – это хорошо, но и риски повысились. К оценке рисков стараюсь подходить серьезно. Поэтому решил описать подход, которым руководствуюсь при управлении соотношением размера гарантийного обеспечения к депозиту.
В чем собственно проблема? Грузим депозит под завязку. Плечо 1 к 8. Оставляем чуток под просадку и в бой! Повезет если счет начнет расти, сформируется некий запас. А если события будут складываться не так удачно: просадка 40%, а следом огромный гэп. Что останется от депозита? Выход из ямы займет очень много времени.
Решение проблемы – создание резерва. Использую следующую пропорцию:
50% – это максимальное расчетное ГО, сумма максимальных лимитов по всем ботам. Оно может меняться от 0 до 50% в зависимости от: направления позиции (кто в лонг, кто в шорт, кто вне позиции), ММ алгоритма (фиксированный объем, плавающий), волатильности на рынке.
Все понимают, что у профессионального трейдера есть своя торговая стратегия. Вход в сделку, управление позицией и выход осуществляются исходя из четких правил. Такой подход позволяет контролировать свои риски и эмоции чтобы оставаться стабильным на протяжении долгого времени. Определение своей системы торгов может занимать очень много времени, требовать огромного опыта, но если вы в конечном итоге к ней не приходите, то вам нечего делать на финансовом рынке. Тем не менее, трейдинг всегда на слуху так как является привлекательным способом заработать деньги. Несмотря на то, что порог входа низкий, должно быть понятно, что этот бизнес не для всех, большинство уйдут с рынка после череды хаотичных результатов и постоянных эмоциональных горок.
Физические лица, которые не знакомы с финансовым рынком, но имеют на руках свободные деньги, обращают свое внимание на инвестиционные продукты от банков, брокеров и иных финансовых институтов. Предложения, которые есть на свободном рынке не могут похвастаться высоким уровнем доходности. Более интересные продукты существуют у фондов, к которым большинство населения нашей страны не имеет доступа так как минимальная сумма инвестирования может пытается торговать самостоятельно и находится в поиске идеального индикатора, иные ищут роботов. Инвестиционные продукты от финансового института, индикаторы и алгоритм — глобально, все это одно и тоже, но обладает разным уровнем комфорта. Почему же тогда такая большая разница в степени доверия к каждому из этих инструментов.
-- -- Выполнение действий с массивами. -- local pairs = pairs local type = type module(...) --- Создать копию массива (таблицы) -- @return копию массива (таблицы) function copy(array) local copy_array = {} if type(array) ~= "table" then return array end for k, v in pairs(array) do if type(v) == "table" then copy_array[k] = copy(v) else copy_array[k] = v end end return copy_array end --- Узнать, начинается ли индексация в массиве с нуля или с единицы. -- @return 0 или 1 function base(array) if array[0] ~= nil then return 0 else return 1 end end --- Вычислить число элементов в массиве. -- @return число элементов в массиве function size(array) local n = 0 for _, _ in pairs(array) do n = n + 1 end return n end --- Проверить пустой или нет массив. -- @return true/false function isEmpty(array) for _, _ in pairs(array) do return false end return true end --- Получить первый индекс массива, где ничего не записано. Поиск начинается с 1. -- @return первый индекс массива, где ничего не записано function firstEmptyIndex(array) local i = 1 while array[i] ~= nil do i = i + 1 end return i end