Блог им. Saro
Приветствую.
Последнее время редко пишу, ибо особо не о чем писать. Творческий кризис в поисках новых алгоритмов. и отсутствие сил на анализ кластеров рынка (хочется использовать в роботах, но нет столько времени чтоб сидеть следить за ними). Вялотекуще работают древние, занудные алгоритмы с долгими сделками. Краткосрочно в большинстве случаев не торгую (кучу сделок в день, но не скальпинг имеется ввиду). Связанно с тем, что лень прописывать все тонкости рынка (при каких обстоятельствах не торговать, например праздники, новости и тд) а когда это не прописываю, часто пожинаю убыточные плоды. Обычно если рядом с ноутом, то всегда слежу за рынком и алго, и в случае чего сбавляю роботу обороты, или отключаю если ожидается некий хаос, который не учитывается алгоритмом. Но частенько уезжаю куда-либо, или занят рутиной — забываю проверить ситуацию и получаю лосей. в основном это топтание на месте, потому пока торгуется то, что работает само.
Так вот, начал изучать С#. в целом мне математика обычно легко дается и ожидаю, что проблем с кодом не будет серьезных возникать. Но столкнулся с тем, что очень сложно изучать язык самостоятельно когда не понимаешь с чего начать и куда двигаться. Материалов в инете полно, как и обучений. НО это ж отдельная вселенная, и не туда повернув — заплутаешь надолго.
На какой я стадии? в самом начале пути. Учусь на простых примерах кодить. Обычно я в роли преподавателя и скажу честно, я всегда тараторю, и стараюсь максимально сжато мысли излагать — что часто еще сильнее запутывает. Так вот учусь я по видосам где скорость обучения на уровне улитки. 3 часа = 12 строкам кода. И такое размусоливание убивает желание учиться. Итак, ежики кололись, но лезли на кактус, это про меня.
Собственно к чему пост. хотелось бы советов, от опытных программистов (ибо пробовал гуглить и выдает тонны информации, и моя компетенция не позволяет определить значимость советов). Какие я преследую цели? Научившись кодить, хочется все же реализовать все свои математические фантазии в рынке, всякие интегральные, дифференциальные, матричные и тд схемы. (по правде, уже пробовал на матпрограммах это все просмотреть, и чисто теоретически нифига не работает на рынке это все, но хочется уж наверняка убедиться. (речь об именно моих фантазиях, они не работают, а не в целом математика)) Так же хочется научиться, писать доп софт/коннектор. К примеру софт который транслирует новости в тслаб, грубо говоря. Ну и мобильные приложения тоже. Губу конечно раскатал себе на десятилетия вперед.
Так вот, порекомендуйте пожалуйста литературу или ресурсы. Возможно обучатели на личном опыте имеются или некие полезные видео ресурсы, которые вам помогли.
Это книга не про синтаксис и условные конструкции, а о том, как из классов собирать работающие программы и управлять кодом.
Микаелян Саро, такое вам ещё рано.
Это архитектурные вещи.
Для начала следует освоить базис.
Доступно излагает Герберт Шилдт.
Правда новых книг по C# давно не выпускал.
Вполне неплох Эндрю Троелсен https://www.labirint.ru/books/550458/
По паттернам классикой считается https://www.ozon.ru/context/detail/id/2457392/
И побольше практики.
На первых этапах меньше глобальных задач, и больше мелких, быстро реализуемых.
Тарас Громницкий, Спасибо, я по названию предыдущей книги, понимаю что это на будущее. и теоретически к этому и стремлюсь на будущее.
Для текущего изучения так же благодарю за совет.
Микаелян Саро, не за что.
Обращайтесь в случае чего.
Чего хотите запрограммировать? Спрашивайте прямо здесь, я вам подскажу куда смотреть и что делать. Я это проходил все. Код для торговых роботов писал и для анализа стратегий писал и много всякого другого кода.
В этом случае сможете путем несложных изменений алгоритма заложить в него свою торговую систему, не отвлекаясь на такие сложные вещи, как разработка с нуля подключения к терминалу или работа с БД, настройками, работа с объектами.
Затем постепенно разберетесь со всеми аспектами автоматизации на С#
Андрейка, так я всю жизнь на тслаб работаю, там визуальный редактор. тут решился все же на новый уровень пойти. сделать свой труд более удобный.
Попытки кодить давно были, но всегда упирался в отсутствие времени.
Чужой, у меня алгоритмы однотипные, открыл лонг выставил стоп, рынок в твою сторону — радуется прибыли, как считает что рост остановился, двигает стоп, выбило стоп, перевернется в шорт и тот же принцип.
стопы или от рынка беру или по математике
PS: знакомая история и вопрос изложен точно как я его переживал.
Наверно у всех одно и то же. Надо искать обучающий курс.
Кстати, у меня есть ХОРОШИЙ (хоть и ворованный) для ТСЛаб.
Никому не даю, но если что… хорошему человеку не жалко.
https://smart-lab.ru/blog/496838.php. На много проще тслаб вплане внутредневного трейдинга. Проект в стадии развития. Но уже работает.
ANTI_Finsov, Вы предлагаете полагаться на ТВ как на поставщик рыночных данных и совершать по ним сделки? Забавно. А если у Вас на машине инет заглючил? Браузер затупил? Если в бесплатной версии ТВ Вам взяли и прислали радикально неверные рыночные данные? Или, может быть, как раз аккаунт в ТВ должен быть платный???
Или нет. Вы предлагаете другое! Я понял. Человек рисует алгоритм в виде блок схемы в ТСЛаб, оптимизирует и отлаживает его, используя исторические данные. Платит при этом 0 рублей. Затем идет в ТВ, берет платный аккаунт, долго возится, чтобы переписать уже оттестированного робота на скриптовом диалекте ТВ. Добивается идентичного исполнения. Ура! "Ура!" — говорят разработчики ТВ — "И вправду интересное эквити получается. Спасибо, дорогой клиент. Пиши еще!"
ПС Все совпадения имен и названий случайны. История представляет собой фантастический рассказ про жизнь трейдеров на Марсе.
ANTI_Finsov, лудоманить вообще не надо.
Торговля — это бизнес. У него есть вложения, есть операционные затраты, есть результат, соответствующий этим затратам.
Или более прямая аналогия с инструментами. Можно закручивать саморезы в стенку голыми руками. Это будет бесплатно. Но долго и утомительно. Почему-то если под руками есть шуруповерт все происходит значительно бодрее и руки потом не отваливаются.
Собственно, напишите пост про Вашу торговлю чудо-стратегиями из ТВ. Покажите реальное эквити — и все вопросы сами собой отпадут.
Серьезно. Мне кажется, там можно получить гораздо более интересный результат
Если работали с TSLAB — у них был курс по API (по сишарп).
А если с нуля — будете писать коннектор, графичекую оболочку, изучать ООП, придумывать классы, всё это криво писать, а потом переписывать, тестить и тд.
Можете попробовать StockSharp. У них многое уже написано.
Ну и Шилдт для начала почитайте.
Могу порекомендовать курс C# за час на youtube :) для затравки
www.youtube.com/watch?v=IF7YRBokJAw
ЗЫ: перечитал. Если хотите связку с тслаб, HFT — то сишарп. Если матмодели, новости, нейронные сети то питон.
Его, как раз сейчас и практикуют чаще всего в обучении.
Хотя, вообще учить надо не язык, а программирование.
И Вы заблуждаетесь, что математический бекграунд сможет Вам сильно помочь в программмировании. Часто наоборот бывает, математики совершенно не способны к программированию, и начинают прятаться в «математические» языки типа Хаскеля. Они хотят, чтобы у них все было «отображением»:)
В итоге они в своем дерьме так и ковыряются, факториалы там разными способами вычисляют, а ничего дельного родить не могут:)
sortarray sortarray, скриптовые языки не обладают производительностью от слова совсем. Например, простенькая симуляция траекторий на R работает примерно на 3-4 порядка медленней эквивалентной реализации на шарпе.
Что касается учиться. В старые времена хорошо было учиться на паскале или на чистом си. В современных условиях шарп также хорош для этой цели. Только не надо лезть в новомодные конструкции типа асинков и линка. Достаточно ограничиться относительно чистым синтаксисом. C# версии 3.5 имхо имеет оптимальное соотношение по (удобству использования и богатству возможностей) делить на (количество синтаксических граблей об которые можно легко убиться).
Ну и опять же процедурное программирование воспринимается (должно восприниматься) легче ООП.
К тому же, это утверждение сейчас уже не особо то и актально. Си конечно скриптове языки пока не сделали, но уже на подходе.
Языки типа решетки и жабы показывают скорость только на синтетике, в реальности же как правило, тормознейшее говно. Там где нужна скорость, действительно нужно брать низкоуровневые. Но для трейдерских роботов это все глупость, там издержки сети любую скорость сожрут. на таких вещах асинхронщина нужна а не скорость.
Вообще, все жалобы на тормоза в сетевых приложениях, в 99% обуславливаются блокирующим кодом и соответствующим простоем, на производительность там напрасно грешат
А R пример вообще ниачем, кстати, насколько я помню это макронадстройка над Scheme, это не язык, строго говоря, не язык с собственной полноценной реализацией
sortarray sortarray, в крайне специализированных синтетических случаях типа майнинга где компиллятор СИ может использовать специализированные процессорные инструкции — в этих и только в этих задачах СИ обыгрывает сишарп. Почему майкрософт занимается ерундой, а не пилит оптимизированный JIT с поддержкой новых процессорных инструкций — для меня загадка большая досада.
А при разработке математических алгоритмов общего вида (читай, торговые индикаторы) компиллятор на СИ получает преимущество перед JIT в среднем не более чем на 10%. Ассемблер обыграет шарп тоже только по причине доступа к современным инструкциям ЦПУ.
Сетевые задержки, естественно, выносим за скобки. Это отдельная песня.
С уважением.
Уже даже само наличие GC и JIT этому противоречит. Это все имеет свои издержки.
sortarray sortarray, JIT работает один раз как правило для одного фрагмента кода. GC на вычислительных алгоритмах тоже особенно не мешает. Суммарное воздействие этих двух факторов (на вычислительных алгоритмах общего вида) порядка 10% или меньше.
sortarray sortarray, можно и на асме писать и добиваться, чтобы вся прога помещалась в кеш проца L1.
Но в реальности надо соотносить затраты на разработку с ожидаемым выхлопом и со своим уровнем скила.
Саро сейчас эти тонкости просто не надо.
Андрей К, «какой интересный человек» © ДМБ.
А если бы JIT работал один раз, он не был бы JIT-ом, то бишь Just-In-Time
Один раз работают обычные компиляторы
sortarray sortarray, блин. Разговор потерял конструктив. Вы вообще в шарпе разбираетесь?
Когда JIT обнаруживает вызов функции, он компиллирует байт-код этой функции в нативные инструкции. И запоминает. При втором обращении к той же функции повторная компилляция не делается. Используется уже готовый нативный код.
Поэтому при выполнениии тестов сначала делают несколько «прогревающих» вызовов и только потом меряют скорость.
Засим откланиваюсь.
Про питон, может загоритесь :)
А ХФТ — он же не только от скорости исполнения проги зависит. Тут и колокация нужна и продвинутые протоколы получения данных без задержек и т.д. и т.п.
Сейчас много от скорости зависит. Песочница резко сузилась. Стаканы обмелели. Раньше, например, на одной и той же страте первым четверым хватало ликвидности в стакане, а теперь только первому и тд.
Вот уралпро зря именно сейчас публикуется подробно. Он показывает где еще деньги лежат и свои скорости. Если бы было не лень, я бы например пришел и забрал. Но пока оно того не стоит. А ведь найдутся те, кого уже совсем прижало, придут и заберут. Колокация то резко сокращается.
Неожиданно...
Попробую вспомнить по какой книге сам учил c#. Она состояла из примеров программ, описывающих различные конструкции языка. Клал перед собой книгу и набирал приведенный в ней пример кода. Добивался, чтобы работало. Затем вносил те изменения, которые мне приходили в голову. Если после моих изменений работало так, как задумал — ставил галочку "понял тему хотя бы поверхностно". Безрадостная для тебя новость: на проработку той книги у меня ушло примерно 6 месяцев.
В твоем случае параллельно можно пытаться делать вещи связанные с трейдингом непосредственно. Причем позволю себе крайне настоятельно предостеречь тебя от попытки написать полностью робота на сишарпе. Ни сейчас ни в каком-либо обозримом будущем. Самая правильная для тебя стратегия — писать отдельные кубики. Нужен тебе кубик для интеграции с языком R — пиши кубик для интеграции с R. Нужен кубик для поиска в интернете новостей — пиши кубик для выдергивания из интернета конкретных новостей. Нужен кубик, который засунет свежие котировки в уже готовую обученную нейронную сеть — пиши кубик-обертку вокруг нейронных сетей, который будет выдавать тебе на выходе прогноз цены для следующего бара.
Ну, или можем потрындеть в личку и что-то вместе замутить… ;-)
Svethen Nakov, 2013
Fundamentals of computer programming with c#
ISBN 798-954-400-773-7
Бесплатная кстати лицензия
переделать мою программу с бейсик на сишарп
и через день смог проверить результат
на доселе незнакомом мне языке
и думаю далее смогу программировать сам
причём чистовик программы только у меня
доделывал сам без помощника
Дмитрий Власов, программировать стратегии лучше на кубиках. Если какого-то кубика не хватает — дописываем на сишарпе конкретно его.
С уважением.
Дмитрий Власов, например, чтобы не морочить себе голову с переписыванием стратегии с кубиков на АПИ. Зачем? Если страта годная — ее надо брать и торговать. При этом при «переписывании» возникнут дополнительные риски. Там ошибся, тут в индексах запутался, здесь вместо больше поставил «больше или равно». Потом бац! в скрипте сделки одни, переписанные на АПИ — другие.
А мани менеджмент… а какое Вы управление капиталом хотите? Портфель роботов заработал в течение недели — сайз увеличиваем всем пропорционально. Портфель слил — снижаем. Также всем пропорционально. Вы же не будете гадать на кофейной гуще какая страта завтра заработает, а какая сольет, чтобы им каждой свой индивидуальный сайз поставить на каждый следующий день?
А потом возникнет проблема рефакторинга. Пришла Вам в голову еще одна мысль. Вы ее в скрипте за 5 секунд накидали, связи между кубиками перекинули, тут же оттестировали и сравнили. Удачное изменение? тогда Вам надо лезть в исходники и тоже самое изменение делать в исходниках страты. А там цепочки вызовов вовсе не так весело отслеживать, как когда они в блок-схеме нарисованы.
Дмитрий Власов, возможно, это Ваша личная особенность какая-то. Хорошо, что никто не будет заниматься такой проверкой.
Но смысла переписывать готовый алгоритм в виде блок-схемы на АПИ я так и не увидел. Либо в силу исторических причин Вы пишете сразу всю страту на шарпе, либо делаете блок-схему и с ней живете.
ПС И я, конечно, в курсе, что ТСЛаб и так генерит код стратегии на сишарп и его легко выдернуть при желании, если уже есть готовая блок-схема.
Дмитрий Власов, Вы просто храните сови личные кубики в виде фрагментов кода и потом компонуете. Только в Студии, а не через блок-схему.
Ладно, будем считать что мы обменялись мнениями и услышали друг друга. =)
Саро, специально для тебя откопал.
Джесс Либерти "Программирование на C#"
Скачать можно отсюда. Кстати, там же полно других книг по шарпу. Читай аннотацию, качай, смотри. Если «не заходит» — бери следующую.
1. Установить VisualStudio
2. Скачать какой нибудь пример скрипта отсюда http://forum.tslab.ru/ubb/ubbthreads.php?ubb=postlist&Board=25&page=1
3. Подключить к тслабу, поковырять и понять код.
Если надо писать что то сложнее, например подключаться к сторонним программам, парсить новостные данные, то надо уже поглубже покопать в C#.
Рекомендую: https://metanit.com/sharp/tutorial/
Консультирую по прикладным вопросам программирования на C#. Внятно, но дорого.
На простые вопросы отвечу бесплатно.
blogs.msdn.microsoft.com/dotnet/2019/02/07/announcing-ml-net-0-10-machine-learning-for-net/?utm_source=vs_developer_news&utm_medium=referral