Только сегодня и только для вас!: дочитай пост до конца — и ты услышишь увлекательную историю о рисовании графика ликвидного фьючерса.
Но по порядку. Вообще-то те, процессы, которыми я занимался для создания первой работающей схемы, я не очень люблю. Я больше люблю неторопливо исследовать, чем это. А собственно, что «это»?
Я как человек, любящий долго запрягать, когда речь зашла об алготрейдинге — долго запрягал)). Долго выбирал стек-технологий, тыкался-мыкался и остановился на некоторой связке, а именно Wealth-Lab (тестирование стратегий и всяческий рисёч) + Transaq connector (получение маркет данных, отправка ордеров) + готовый коннектор (для того, чтобы связать два предыдущих товарища между собой). Как я сказал, я долго выбирал, и когда выбрал подумал: ну всё, понеслась, запускаю и погнали алготрейдить)). Нифигаа..
Как оказалось парень, которого я назвал «готовый коннектор» не так прост. У меня нет его исходного кода (хотя кого я обманываю, даже если бы был, мой C# пока не так хорош, чтобы ломаться при слове delegate или чем-то подобном, что скорее всего я в коде встречу). А работать с чем-то, что не работает идеально, или вообще не очень хорошо (или даже вообще не работает), не имея возможности посмотреть внутрь, ну очень не комфортно. Развитые аналитические способности, конечно, в некоторой степени позволяют заглянуть внутрь сквозь черноту черного ящика, но это совсем не то же самое что реально видеть, как оно работает. Ну короче, коннектор не отправлял корректно заявки — часть отправлял, а часть упорно игнорил — мне такое не подходит)). Общался с разрабом — не помогло. Сам исследовал — не помогло (строил гипотезы, проверял, строил новые — проверял, конкретизировал гипотезы — проверял, факторный анализ проводил, чего только не делал, успехи были, но остались области полностью черные когда ты тупо не видишь никакой закономерности в том, почему оно вот сейчас работает, а вот сейчас не работает). После этих заглядываний через черноту черного ящика я собственно и решил форсировать апгрейдинг своего C# — никто тебе не помешает заглянуть внутрь того, что ты сам написал и сам понимаешь)).
Но, к слову сказать, маркет дату коннектор получал почте беспроблемно)). Посему основательно заколебавшись с ордерами… я решил реализовать эту часть самостоятельно через импорт файлов квиком (tri tro и прочие трехбуквенные обозначения) — спасибо, кстати, Sergey Pavlov, это его коммент где-то в глубинах Smart-Lab’а помог мне преодолеть предубеждения против этого способа взаимодействия. Реализовывал исполнение по-взрослому, не в смысле с серьёзной архитектурой, полным циклом разработки, серьёзным тестированием или типа того, а в смысле — полностью самостоятельно)). Скачал документацию к Квику и погнали. Покодил, поисследовал, поискал баги, попробовал руками создавать файл нужного формата. Всё, вроде должно работать. Дальше первое боевое испытани. И далее обещанная история про рисование графиков))) :
Ну наверно все испытывали некую приятную гордость от рисования графиков — и я конечно не о импортировании котировок и рисовании их в виде графика — я о рисовании графика своими деньгами — своими ударами в рынок, своими заявками — обновление хаёв, лоёв всё такое. Испытываешь при этом какую-то небольшую (иногда побольше) гордость за себя. Но это двоякая вещь, одновременно с гордостью испытываешь легкий холодок по коже)) — потому что рисование на графике часто бывает в случае когда что-то пошло не так))). Видили график инструментов, которые торговали роботы Knights Capital Group в свой самый грустный день?). Но ближе к делу. Запустил я Квик (счёт чисто под алго с 30 т.р. денег) — чтоб собственно он файлы импортировал и Велс, чтоб обрабатывал всё и генерил эти файлы. Ну и в Квике настроил заодно таблицы чтоб отслеживать заявки и состояние счета. «Поехали!» ©. Первое время думал, а куда смотреть? — поскольку я ордера отправлял не через механизмы велса или коннектора, там заявки не отображались. Но куда-то надо же было смотреть, после минут трех расхлябанного наблюдения (ну что может произойти за 3 минуты) моё внимание привлекло поле «Комиссия биржи» — а это нормально что там 650 р. Уже? Это за день то? Учитывая, я что я в заявке пуляю 1 контракт? Это с учетом, что сегодня я здесь ничего кроме этого теста не торговал? — Разум начал подсказывать, что видимо, что-то сильно пошло не так)))). Алго и системная торговля учит принимать взвешенные решения, а непропиваемый ручной опыт учит, что нехер долго думать, если видишь, что надо действовать — действуй. В общем выдернул абстрактную вилку из абстрактной розетки (ну а по факту разомкнул в связке ключевой узел, прерывающий процесс — ну короче остановил импорт файлов))) ). Что оказалось когда дым рассеялся: оказывается (и тут с одной стороны я тупо с горячей головой не всё учел, код сырой, а с другой не до конца знал, как работает коннектор (который для меня, напомню, черный ящик)) коннектор работает так: на каждой свече (а я чтоб долго не ждать тестил на минутках) прогоняет сначала всю(!) историю за некоторый период времени, а только потом анализирует от текущего бара. И делает так на каждом баре. Из общего вклада в этот маленький фэйл — вклад велса: я не знал, что велс пробегает всю историю на каждом баре, мой вклад: чёт у меня получилось что пробегая по истории у меня и сделки генерятся)). В общем за 3 минутных бара пока крутилась система стратегия пробежалась по всему графику и сгенерила 3 одинаковых пакета с таким кол-вом маркетовых ордеров, какое было кол-во сигналов на историческом графике этой стратегии)). Итого за 3 минуты Квик импортнул и исполнил 1600 трейдов по 1 контракту)), за 3 минуты). Сколько на спреде отдал — не знаю). Было это 14.07.2017, 22:53 SiU7 — по объёмам виден всплеск)) — это мои роботы спред расширяли)). Весело получилось в общем)). Такой опыт прикольно получать, именно на ранних этапах, на малых деньгах.
Ну потом, конечно, всё поправил и уже стратежка какое-то время торговала — всё норм.
Как-то так)
2. Если каждую плюху Вы станете описывать подробно, на смартике появится свой Жюль Верн.
делегат — это(утрированно) вроде просто ссылка на функцию?
Выбирайте языки, где функция является первоклассным объектом, и все ссылки на нее равноценны, то есть, где нет необходимости в лишней сущности для этого.