Избранное трейдера Андрей
Приветствую!
В предыдущей статье писал, о целях поиска локального боковика с помощью алгоритма. Расскажу с какими сложностями при этом приходится сталкиваться.
1 Что есть боковик? почему в одном случае мы считаем что это боковик, а в другом похожем случае это не является боковиком?
2 Размер боковика! Локальный боковик может быть как 0.1% от цены так и несколько процентов от цены.
Так же можно описать множество пунктов, но они все смежные будут с выделенными двумя пунктами.
Как определить, что рынок возле той или иной цены остановится и пойдет обратно? только не постфактум, а именно онлайн. Да, мы рисуем уровни руками, или же смотрим на объемы и тд, но изначально никто не знает где и почему цена остановилась. Мы всегда наблюдаем уже постфактум, либо это синусоида цены, либо накопление объемов на уровне и тд. А значит мы с определением боковика всегда будем опаздывать от реального рынка.
Второй же пункт, это границы бокового движения. Пример сбера, последние две три недели он гулял в большом диапазоне от 20300 до 21000 грубо говоря, но при этом были и локальные уровни остановки цены в пределах 100-200р канала. В таком ракурсе получается, что при движении от нижнего канала к верхнему с учетом остановок, можно получать 300-400р с движения если отталкиваться от того, что цена вышла из маленького боковика и движется к большому.
Именно эти сложности приходится преодолевать при алгоритмизации. Ведь алгоритм должен сам определить боковое это движение или вялотекущее направленное.
Пока что не придумал ничего толкового. Есть идея, которую наполовину реализовал
1 проверяю выше закрытие предыдущего или нет, и строю верхний канал по большему значению
2 аналогично для нижнего канала, проверяю ниже мы предыдущего закрытия или нет.
3 слежу за ситуациями при которых верхнее значение канала как и нижнее значение не менялось более 60минут (это уже параметр, можно и без него конечно, через счетчик получив просто силу канала, например что мы 5 часов не вышли за границы, или же например сколько раз «кололи» канал но вернулись в его границы и тд)
4 канал считается не действительным при резком закреплении цены выше его границ, допустим большой минутной свечой закрылись выше/ниже границ
5 границы канала должны меняться после направленного движения и новой остановки
6 размах от верхнего к нижнему значению, не должен превышать Х% от цены
Какие минусы
1 Процент размаха дает возможность смотреть маленький ли канал в данный момент или большой, но это является параметром, а значит может привести к «лудоманству». Каких либо других возможностей поиска локального боковика пока что, не видится возможным, потому остановился на этом
2 Я всегда опаздываю за ценой. Если действовать сразу и брать с первых же баров определение боковика, то будет очень большое количество ложных определений, и соответственно, множество не правильных входов
3 Любые остановы движения цены, ломают логику и идет поиск очередного боковика, обычно это преждевременно получается.
4 Ложное расширение боковика, которое можно определить только постфактумом и нужно перерисовывать границы.
Ниже примеры в картинках
Ложный выход из боковика
Всех приветствую!
Первый год публичной алго торговли закончился с результатом +100%.
Первый пост о моем пути к алготрейдингу тут
В этом посте подробно разберу результаты за прошлый год, а также попытаюсь ответить на вопрос – одурачен ли я случайностью?
На рисунке изменение депозита и фьючерса долл./руб.
Все системы торговали на фьючерсе долл./руб. Примерно 75% систем работают на волатильности, остальные пытаются поймать тренд. В начале года затишье, которое к концу марта привело к просадке в 30%. Ну а дальше роботы оседлали взрыв рынка. 8 августа вывел 10% от первоначального депо, в этот же период был удержан НДФЛ на всю сумму накопившегося дохода.
Красным цветом выделил зоны, где алгоритмы не смогли заработать на волатильности. То есть движения были, но они были «плохими». В эти периоды дневные свечи имели большие тени как с верху, так и снизу. Поэтому, не смотря на хорошую волатильность их возило по стопам. Зеленые зоны – экстремально низкая волатильность и сильные просадки.
С 4 по 15 марта прошел «Полигон для новичка» №15. Победителем в нем стала ТС «Орленок» с результатом +9.47%.
В данном видео на примере ТС «Орленок» я рассказываю о том, как можно в алгоритме ТС последовательно использовать разные сигналы для открытия позиции.
Что такое «Полезные мелочи» можно посмотреть здесь https://smart-lab.ru/blog/473161.php
Названия строк | Колич | Profit % | ± |
>0.3 | 359 | 0,95 | 0,61 |
<0,3 |
Приветствую!
В частном примере тухлость рынка имею ввиду последние недели две на фьюче сбера.
Так вот, пока изучаю C# и мозг сильно плавится от кода. Мысль о наставнике, который бы давал ответы на примитивные вопросы, уже не кажется для меня пугающей. Понимаю, что с одной стороны ничего вроде бы сложного нет, но не зная простых законов, можно очень долго блуждать в неведении. Но, при этом есть желание разобраться самому, в общем сложная философская дилема.
Отвлекаюсь от процесса изучения C#? попыткой создать алгоритм по «вертикальному об]ему». Везде это по разному называется, я привык называть кластером, в ТСЛаб это называют торговая статистика, на просторах интернета же, все по разному. Чтобы все понимали про что речь вот картинка.
Картинка с ртс, но она была под рукой просто))
Так вот, как и все в трейдинге, про подобный анализ часто записывая видео, люди рассказывают о постфактумах. Типа вот здесь был крупный обьем потому мы пошли вниз или вверх. Вот здесь сильный уровень проторговки видим, потому стоило шортить (а этот уровень сильным стал намного позже на самом деле, так как его не раз еще после этого «проторговали»)
--Массив с Тикерами, добавьте нужные тикеры aTickerList = {"MSNG", "GAZP", "LKOH", "SIBN", "GMKN","ROSN", "SBER", "TATN", "NVTK", "IRAO", "RSTI", "SBERP", "PHOR", "SNGS", "TRNFP", "VTBR", "FEES", "MVID", "RASP", "MFON", "AFLT", "MAGN", "ALRS", "MTSS", "MOEX", "RTKM", "MGNT", "NLMK", "SNGSP", "CHMF", "MTLR", "HYDR", "MFON", "RSTI", "PLZL", "BANEP", "POLY" }; --Функция поиска цены function fGetPrice(sTickerName, sNum) --Подключаемся к источнику данных local ds=CreateDataSource("TQBR", sTickerName, INTERVAL_D1); while (Error=="" or Error == nil) and ds:Size() ==0 do sleep(10) end; if Error ~="" and Error ~=nil then message("Error: "..Error, 1) end; local sSize=ds:Size(); local sCurrentPrice=ds:O(sSize); local sLastWeekPrice7=0; local sLastWeekPrice14=0; --Берем цену закрытия свечи неделю назад sLastWeekPrice7=ds:C(sSize-4); --Берем цену закрытия свечи 2 недели назад sLastWeekPrice14=ds:C(sSize-8); --Вычисляем проценты local sPrc7=math.floor((100-((sLastWeekPrice7*100)/sCurrentPrice))*100)/100; local sPrc14=math.floor((100-((sLastWeekPrice14*100)/sCurrentPrice))*100)/100; --Заполняем таблицу значениями SetCell(t_id, sNum, 0, tostring(sTickerName)); SetCell(t_id, sNum, 1, tostring(sCurrentPrice),sCurrentPrice); SetCell(t_id, sNum, 2, tostring(sLastWeekPrice7),sLastWeekPrice7); SetCell(t_id, sNum, 3, tostring(sLastWeekPrice14),sLastWeekPrice14); SetCell(t_id, sNum, 4, tostring(sPrc7),sPrc7); SetCell(t_id, sNum, 5, tostring(sPrc14),sPrc14); --Текущая цена больше цены прошлой недели - раскрашиваем зеленым if sCurrentPrice>sLastWeekPrice7 then fGreen(sNum); end; --Текущая цена меньше цены прошлой недели - раскрашиваем красным if sCurrentPrice<sLastWeekPrice7 then fRed(sNum); end; --Текущая цена больше цены прошлой недели и цена прошлой недели больше цены позапрошлой недели --раскрашиваем желтым if sCurrentPrice>sLastWeekPrice7 and sLastWeekPrice7>sLastWeekPrice14 then fYellow(sNum); end; end; --- Функция создает таблицу function CreateTable() -- Получает доступный id для создания t_id = AllocTable(); -- Добавляет 6 колонок AddColumn(t_id, 0, "Тикер", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 1, "Сегодня", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 2, "Неделя", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 3, "2 Недели", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 4, "Неделя (%)", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 5, "2 Недели (%)", true, QTABLE_INT_TYPE, 15); -- Создаем t = CreateWindow(t_id); -- Даем заголовок SetWindowCaption(t_id, "7 Days"); -- Добавляем строки for k,v in pairs(aTickerList) do InsertRow(t_id, k); end; end; --- Функции раскрашивают ячейки таблицы function fRed(col) SetColor(t_id, col, -1, RGB(255,168,164), RGB(0,0,0), RGB(255,168,164), RGB(0,0,0)); end; function fGreen(col) SetColor(t_id, col, -1, RGB(157,241,163), RGB(0,0,0), RGB(157,241,163), RGB(0,0,0)); end; function fYellow(col) SetColor(t_id, col, -1, RGB(249,247,172), RGB(0,0,0), RGB(249,247,172), RGB(0,0,0)); end; --Основная функция function main() -- Создаем таблицу CreateTable(); --Пробегаемся по массиву тикеров for k,v in pairs(aTickerList) do fGetPrice(v, k); end; end;как выглядит в квике: