Доработал робота Богатыря, описанного в этом посте:
https://smart-lab.ru/blog/458269.php
Описание.
Робот анализирует ленту всех сделок, ищет в ней крупные сделки и накладывает их на график. Он рисует метки двух видов.
1. Обычные одинарные крупные сделки.
Зелёные метки — покупки, красные — продажи. Если навести на птичку курсор, то всплывёт надпись как на скриншоте с указанием цены и объёма, в данном случае по 202 рубля было куплено 8000 лотов Сбера.
Метка рисуется СПРАВА от свечи, на которой была обнаружена большая сделка. Я выбрал в качестве метки знак <. Он похож на указатель направления куда смотреть.
2. Горсти. Горсть — это когда крупный игрок ударяет большим объёмом по стакану. В результате одна его заявка исполняется через множество мелких сделок. Признак горсти — у всех маленьких сделок будет одинаковое время в микросекундах как на скриншоте. По этому критерию робот определяет «горсть».
Горсти отмечаются крестиками. Робот показывает, сколько лотов было в горсти, сколькими сделками она исполнилась и на сколько пипсов горсть сдвинула рынок.
Пример бычьей горсти: по СБЕРУ куплено 55 000 лотов, крупная заявка исполнена 40 мелкими сделками, от этого рынок сдвинулся на 4 копейки вверх.
Сегодняшние горсти по Сберу говорят, что его остервенело покупают крупные игроки: в плюсиках слева 55 000 и 59 797 лотов (исполнены одним ударом, то есть горстью), а в плюсике на постмаркете кто-то одним махом заграбастал 174 788 лота.
Пример медвежьей горсти. Одним махом проданы 4000 лотов Алросы. Исполнилось 13-ю сделками, рынок сдвинулся на 6 пипсов вниз.
В роботе можно легко выключить горсти, если они вам не нужны. Вверху файла Bogatyr 2.0.lua есть строчка:
gorst=false --если горсти не нужны, поставьте false
Но мне кажется, что именно горсти самая перспективная часть скрипта. Они показывают активность кукла против мелких трейдеров. А одинарные бегемоты — это кукл купил у кукла, а кукл продал куклу. Анализировать их бессмысленно (ИМХО).
Непоправимый недостаток робота — он работает только со сделками текущего дня. Бегемотов за прошлые дни он не показывает.
Как пользоваться скриптом.
1. Скачиваете скрипт по ссылке
https://yadi.sk/d/oimgbkDjMVwtcQ
2. Сохраняете в любую папку.
3. В шапке выставляете нужные параметры.
Что считать бегемотом? Это можно задать напрямую в переменной
big_deal. Например 1000 лотов. А можно через долю от среднего оборота за день
big_porog. Например средний оборот по акции за день 1 000 000 лотов.
big_porog ставлю 0.005. Значит робот будет считать бегемотом 5000 лотов.
4. ВАЖНО! На графике нужно выставить идентификатор
Big. Без этого робот не найдёт куда ему ставить метки.
4. Запускаете скрипт через Сервисы=>Lua-скрипты.
5. Получаете результат. На график наносятся метки по уже полученным сделкам. По мере дальнейших торгов робот ловит новые сделки и добавляет их на график. Напомню: крестики — это горсти большого объёма, птички — одинарные бегемоты.
Открывать таблицу обезличенных сделок (то есть «таблицу всех сделок») не нужно, робот сам заказывает сделки с сервера. НО! Всё равно надо убедиться, что вы подписаны на эту услугу. У моего брокера Открытие трансляция ленты всех сделок по умолчанию выключена. Включить её можно в личном кабинете:
Чтобы проверить, работает трансляция всех сделок или не работает, попытайтесь открыть тиковый график:
Или откройте в КВИКе меню
Создать окно => Таблица обезличенных сделок
Важно! После запуска скрипта может пройти несколько десятков секунд прежде чем робот закажет все сделки с сервера и начнёт рисовать. Особенно это актуально в конце дня, когда надо стянуть все сделки за день.
Если вы запустили робота и ничего не происходит, то возможны следующие варианты:
1. Сейчас утро. Старые сделки брокер уже стёр, а новые ещё не приходят. Подождите начала торгов. (Ночью всё должно работать, потому что сделки за истекший день ещё доступны в терминале).
2. Вы не поставили идентификатор на графике или поставили его криво.
3. У вас слабый интернет и КВИК по приказу робота ещё не стянул сделки с сервера. Особенно это актуально для супер-ликвидов типа Si.
4. Вам брокер не транслирует ленту всех сделок. Значит надо подключить эту услугу.
5. Вы выставили слишком большой порог. Ну например вы поставили признак бегемота 5000 лотов, но на рынке ещё не было такой сделки/горсти, поэтому скрипт ничего не рисует.
Весь код робота я снабдил комментариями, чтобы желающим было легче разобраться что происходит в каждой строчке. Приветствуются советы по улучшению кода.
П.С. В конце отмечу, что пост является теоретическим. Ни одного рубля с помощью этого анализа я ещё не заработал (и пока не пытался). Поэтому буду рад любым подсказкам, как на основе этого торговать. Находить телодвижения кукла и покупать если кукл покупает, продавать если продаёт? Неужели всё так просто? Напишите пожалуйста в комментариях.
Если уже есть и он не нулевой. то твое отступление о том, что с помощью этого робота ничего не заработал — не верно.
Как минимум 5 тимофейчиков ты честно заработал.
Офигенно! Увы, кроме Тимофейкоинов отблагодарить по другому не могу.
Буду тестить.
Albus (Игорь Китаев) молодец аккуратно пишешь, возми на заметку:
function get_data_time(mydata)
return os.date("%Y%m%d",os.time(mydata)) ,
os.date("%H%M%S",os.time(mydata))
end
Теоретически, Вы можете наладить экспорт обнаруженных «богатырей» во внешний CSV файл и при старте проверять его содержимое и дополнять список. Так сказать, «версия 2.1».
Это позволит рисовать маркеры для «вчера-позавчера-давно». Наверное, самое сложное будет обработать ошибочные ситуации когда файл заблокирован и устранить потенциальное дублирование (имхо, лучше это делать на этапе чтения из файла во внутреннюю коллекцию). Впрочем, по большому счету это вопрос желания и аккуратности.
Успехов!
Albus (Игорь Китаев), можно качать. Это, наверное, одна из главных фишек Финама. Но это Вы к чему сказали?
Сохранять все сделки в файл не нужно. Нужно чтобы Ваш скрипт, обнаружив «богатыря», скинул инфу о нем во внешний файл и потом на старте подхватывал свою историю из этого файлика.
С Финама тики качаются с оговорками. Во время торговой сессии их, емнип, нельзя запрашивать. И еще какие-то нюансы были. Не говоря уже о том, что на диске это все будет занимать нереально много места. Все имхо.
Отсюда выводы:
Если сделка прошла по цене покупателя, то это не значит, что была покупка.
Если сделка прошла по цене продавца, то это не значит, что была продажа.
Отсюда вопрос:
Зачем нужен робот Богатырь?
Сергей Симонов, классическая теория утверждает, что рост цены происходит благодаря тому, что покупателей становится больше, чем продавцов. Но если смотреть ленту сделок, то чаще рост происходит от того, что участников становится меньше и уходят продавцы. Иными словами на ценах, через которое проходит движение, сделок мало.
Отсюда второе наблюдение: цена перестает двигаться, когда появляется много участников. Т.е. в тех местах, где происходит рост объемов, часто бывает остановка движения или разворот.
Chalyj7, рост, по классике, происходит, если покупатель соглашается на цену продавца. Для этого он должен быть больше мотивирован.
Принцип остановки роста при появлении множества продавцов тоже не срабатывает, так как именно появление продавцов, бывает, является тригером покупок для крупных игроков, ищущих ликвидность. В некоторых случаях такую ликвидность они же сами себе и создают, имитируя сделки с крупным объемом (о чем коммент ниже).
Сергей Симонов, флаг направления сделки транслируется биржей. Его смысл следующий: стоял в стакане лимитный офер. Уже стоял в стакане. В него ударила другая заявка — происходит сделка. Эта сделка получает благ BUY. Смысл именно в том, чтобы показать «активную сторону сделки».
Все же если Вы ставите в рынок 5000 лотов в одной заявке, это может иметь некий предсказательный смысл. Теоретически.
ch5oh,
в направлениии сделки мало предсказательного смысла, как и писали выше.
Вот пример графика ОФЗ 26207. Дельта супер отрицательная, цена растет. Там огромный покупатель ставит бид, ему наливают. Потом он двигает бид выше, собирая маленьких продавцов и дальше стоит бидом, рисуя отрицательную дельту
обоснуйте, коллега!
Никакие объемы не обладают прогностической силой. Совсем. Любой вывод, на основе объемов, можно сделать, подогнав его под желаемую ситуацию.
Сами же объемы могут нарисоваться в любом количестве и в любой расфасовке — хоть единичные, хоть гроздевые, хоть гигантские, хоть средние. Манипулятор, если он присутствует, этим аккурат и занимается. Я уже ранее упоминал на СЛ, что мне мой брокер каждый год присылает напоминалочку «Этика биржевой торговли». В ней, в частности, говорится, что не хорошо заниматься тем, что называется «раскрашивание ленты» (о чем и речь) — формирование фейковых объемов — любого размера и любой расфасовки.
А раз это делать нехорошо, значит это стопудово делается))). Испокон веков, и по наши дни.
Можно поподробнее? Лента — это уже произошедшие сделки. Как можно фейковые объемы там рисовать?
Мы же сейчас не про фейковые объемы в стакане говорим, которые снимаются, когда цена к ним идёт, а про реально прошедшие сделки.
Megasum, ну, это уже, как бы, классика)))
Сделки с повышенным объемом с разных счетов, принадлежащих одному лицу/группе лиц для создания ложного впечатления о:
— движении на объеме
— объеме, вставшем не пути движения
для генерации необходимого манипуляторам сентимента
что же тогда обладает, на что опираться дейтрейдеру/краткосрочнику?
AlexGood, обладает то, что всякий трейдер держит в большом секрете от массы других трейдеров)))
Есть два принципиально разных подхода: один — на основе гипотезы случайных блужданий рыночных цен. Сторонники такого подхода развивают статистические методы торговли. Другой (включая мой) — на основе гипотезы детерминированности процессов. На его основе я построил модель рынка, в которой сами объемы являются следствием, а не причиной.
AlexGood, о, вот это правильно; а там и до книги не далеко)))
Это превратит строку в комментарий и она не будет выполняться.
Если микросекунды совпадают то
мы считаем объем в горсти
1й блок Если горсть отключена
Ищем одиночные бегемоты в горсти
Выводим метку
Иначе (!!! т.е. если микросекунды не совпадают!!!)
2й блок Если горсть вкл
Мы начинаем считать горсть
Выводим метку
3й блок Мы ищем одинарные бегемоты
Выводим метку
Как мы начинаем считать Горсти во втором блоке, если у нас микросекунды не равны? Логичнее поставить else перед третьим блоком, а первый со вторым поменять местами.
if (cumul_vol or 0)>big_deal and count>1
Так что всё верно. Это надо делать, когда изменились микросекунды, чтобы проверить не было ли горсти ДО этого момента.
Устанавливаем скрипт, нажимаем запустить, фиксируем время запуска. Пока работает загрузка ТВС и обработка в мэйне до old_done, проходит определенное время( а у меня это минуты полторы) Квик задумывается, но работает… Наступает old_done, фиксируем время и начинает работать функция OnAllTrade, обрабатывая первую поступившую к этому времени сделку. Так вот остаются не обработанными сделки как раз по времени между запуском скрипта и первой сделкой в OnAllTrade. В логе нет сделок за это время. Может нужно прикрутить проверку по времени последней обработанной сделки в мэйне?
По типу умной ленты агрегированной по сделкам и фильтр на нее по объему.
Может оно даже наглядней будет. Тем более что галочки и плюсики в квике накладываются и при наведении сигналит комментом только один.
Или от и до(так даже правильнее).
http://www.invest74.ru/index.php?topic=8553
http://www.invest74.ru/index.php?topic=8639