*Джон Голт*, в целом для автоматизации торговли не требуется знания языков программирования. ПО представленное на рынке позволяет писать внутредневные стратегии с использованием скриптовых языков (в Tradingview это PineScript, в TSLAB-встроенный визуальный редактор).
Если же Вам интересен HFT и прямой выход на биржу, то здесь однозначно имеет смысл учить c#. Так как все биржевые библиотеки преимущественно адаптированны под него. Да и без работы в дальнейшем не останетесь так как многим брокерам требуется именно спецы со знанием с#(так сложилось именно в российской брокерской индустрии).
Для максимальной экономии денежных средств советую обратить внимание на сайт там выкладывают крутые курсы по различным языкам программирования абсолютно бесплатно.
В целом вектор развития я вижу следующий:
1.Изучение синтаксиса С#
2.Основы ООП
3.Структуры данных (коллекции, массивы и т.п.) и многопоточность
4.Пилишь первое приложение:
Как вариант простой робот с использованием сторонних библиотек и
прямое подключение к серверу брокеру например через библиотеку Алор Atentis 5. Далее изучить GIT, но и какие-нибудь популярные фреймворки+работа хотя бы с одной базой данных (например MySQL), но это уже чисто для трудоустройства.
Советую почитать ещу мой пост:https://smart-lab.ru/blog/496838.php/
Андрей К, я имею ввиду внутренние библиотеки брокеров все на си шарп пишутся: Альфа Алор и т.о. Знаю не понаслышке. Что касается прямого выхода на биржу минуя брокера это уже отдельная тема. Но я считаю если чувак хочет создавать роботов и потом трудоустроится с# то, что надо.
Только в Алоре сейчас три вакансии весит на эти позиции.
Если интересно. Я за вакансиями в нашей сфере слежу с 2015 года. Распределение примерно такое по требуемым специалистам:
— если западная контора, то обязательно java
— если трудиться на РФ, то Cи
— если дата аналист, то питон/R.
Шарп требовался один раз БКС'у под статистический арбитраж. И постоянно требуется Банку Санкт Петербург в отдел алго.
*Джон Голт*, ещё спецы по датамайнингу и статистике говорят, что очень помогает R, но меня дико ломает в нём разбираться. Так что и советовать не могу. Но его так хвалят, так хвалят =/
_sg_, :) вся автопромышленность на С, медецинское оборудование… Системы управления чем не попадя… все на C. C++ если у вас там вдруг QNX или Linux запустился.
Denis,
сейчас для озвученных Вами сегментов ВЕЗДЕ используется КОДОГЕНЕРАЦИЯ.
И программы пишутся в лучшем случае на языках более высокого уровня с последующей выгрузкой исполняемого кода на ЛЮБОМ языке для ЛЮБОЙ платформы, в худшем используются кросс-средства.
Только очень «гордые птички» пишут все на С, не зная современных технологий программирования.
_sg_, кодогенерация это тоже самое что машинный перевод, безалкогольное пиво или резиновая женщина. Код должен быть ровно такой, какой он задумывался программистом.
Андрей К,
на треклятом Западе раньше (до 2008-10 гг.) Java + Oracle являлся корпоративным стандартом. Хотя там очень много профессиональных «Плюсовых» — «Крестовых» команд было. А где-то с 2005-7гг начали уже появляться серьезные проекты на .Net. Сейчас не знаю как там, не отслеживаю.
_sg_, затем, что многие вещи проще делать в процедурной парадигме и сегодня и завтра и всегда. Начинать осваивать программирование вообще целесообразно с ассемблера, не для того чтобы на нём писать программы, а для того чтобы понять природу абстрактных вещей в ЯВУ (ссылки, типы, ограничения и т.п.). Но я не предлагаю с асма начинать, просто потому что это довольно муторный и долгий путь получится, хотя сам именно так и двигался.
А если отвечать конкретно на ваш вопрос: например в MT5 можно кодить читая у Страуструпа только общее описание базовых конструкций языка. Совершенно не обязательно при этом очень уж глубоко изучать стандартную библиотеку, что по сути и есть самое сложное в освоении С++ и самое большое отличие от нейтив Си.
Иван Боженков, Ресурсов много. Я конкретно, с понедельника на платный 6ти месячный курс записался от Skillfactory. Это не реклама, сам не знаю насколько хороший курс, но программа курса понравилась. А так есть курсы на Coursera бесплатные (если сертификат не получать), есть еще сайт для программистов proglib.io там много хорошей информации.
Расскажу чисто на отвлечься. У меня дочь растет, мы ее развиваем по методе раннего развития. Сейчас у нее очень сильно развито мышление, логика и все сопутствующее.
Начинаю подумывать, что если собеседование с психологом подтвердит, то начну ее готовить к программированию. Но не классическому, а уже к робототехнике, уверен за этим будущее. Поэтому выберу простой Си для начала.
Михаил Prozz, да у меня жена подсела еще до рождения. На канал психолога. Я относился скептически, только отстегивал на соответствующие игры для развития (ну что то типа кубики Никитина и тд)… а сейчас пару лет прошло и я понял, что все эти вложения окупили себя более чем. Ребенок развит на голову сильнее сверстников. Поэтому я морально уже созрел заплатить пятнашку на собеседование, чтобы выявить направление развитие ребенка
я на себе понял, что человек должен заниматься любимым делом. Так пусть он занимается этим с детства уже.
Андрей К, Направления развития будут определяться к 8-10 годам, а у девочек направление развития к 14-15 годам сведется сами знаете к чему. Знакомые репетиторы по физике и математике удивляются — гениальные девочки после летних каникул 9 класса кроме ногтей ресниц и платьев ни чем думать не могут. Это жизнь и это нормально.
На каких биржах торговать собрались? У криптовалютных обычно RESTful и/или WebSocket API — тут разумно начать с Python, т.к. в языке много «батареек», в том числе (особенно) и для анализа данных.
У более стандартных бирж обычно более изощрённые протоколы передачи информации.
Если через Quik, то можно начать с Lua (QLua), а потом попробовать C# — на C# написана неплохая обёртка QuikSharp.
Дроч на перформанс оставьте задротам. Иначе быстро выгорите, занимаясь не пойми чем, вместо апробации разных торговых гипотез.
Выскажусь по поводу языка программирования :). В современном мире я бы сказал, что си знать полезно что бы понимать базовые принципы работы и конечно же если профессионально работаете с любыми электродевайсами на низком уровне. А вот для роботов я бы взял c# или python. С питоном все куда проще, очень востребован в ML и дадасайнс.
В противовес любому из классических языков, можно параллельно смотреть на функциональные языки, так как там все иначе :).
Java тоже не плохо, и с ним же яваскрипт фреймворки для веба..
p.s. ежели взращивать программиста с молоду и не для роботов… то понимание как работает железо, память и т.д. на низком уровне просто необходимо в независимости от языка :).
Denis, Точно, а то я там не искал. Там же только введешь. Изучить язык… и сразу же для чайников ссылка. На держи, учись, дескать. )) Благодарю за дельную мысль.
Иван Боженков, ну стоит понимать, что у всех разный уровен подготовки. Если мне надо что то реализовать на том языке котрый я не знаю, я просто ищу как это сделать.
попробуйте курсеру или датакэмп…
Андрей К, питон сейчас очень популярен во многих областях, но тут как говориться вам шашечки или ехать :). Роботов на питоне писать удобно, он прям очень подходит для анализа данных, там миллион пакетов, можно сосредоточится на реализации идеи, исследованиях, не заморачиваясь о какой то мелкой реализации какой нить функции. Поэтому я его и посоветовал.
Все остально, сказанное о более грубоком понимании работы процессора, памяти, шин передачи данных, вам может и не надо ), время сейчас очень дорого, и сосредоточится именно на вашей цели куда более важно, нежели пространно изучать программирование.
Роботов на питоне писать удобно, он прям очень подходит для анализа данных, там миллион пакетов, можно сосредоточится на реализации идеи, исследованиях, не заморачиваясь о какой то мелкой реализации какой нить функции
вот я теперь опять питонистам начал завидовать =))
Denis, Ассембре очень помогает понимать как работают указатели и как работает память. Мне очень помог изучить С++ но дальше дело встало т.к. нет знания англ., а библиотеки и мануалы к функция С++ требуют англ. + непонимание зачем мне это надо.
Зря смеётесь. Это как раз самый правильный подход. Сначала Асм, а потом С/С++. Когда понимаешь, что там происходит под капотом, вообще никаких проблем не испытываешь с пониманием нюансов языка. А вот те, кто не знает асма очень часто попадают в разные проблемы на этих языках.
Андрей К, и это тоже, но в первую очередь — собственно асм. Потому что именно посредством асма и ничего иного и осуществляется взаимодействие с архитектурой, процессором и всем остальным. Грубо говоря, Асм — это окно туда. И в конечном итоге именно асм исполняется процессором, а не С/С++/Java/Python и т.д.
johnsson08, да но асм это все равно удобочитаемый для человека язык где все равно есть абстракция понятная человеку.
Вы ошиблись:
И в конечном итоге именно асм исполняется процессором, а не С/С++/Java/Python и т.д.
Исполняется машинный код на процессоре, а не «асм исполняется процессором» (хотя может понятия асм у нас разные), откомпилированный код будет хоть на С/С++/Java/Python одинаковый в «теории», сам не проверял.
> Исполняется машинный код на процессоре, а не «асм исполняется процессором»
Нет никакой ошибки. Отображение между асмом и машинным кодом практически биективное. Т.е. говоря проще Асм этот тот же машинный код, просто в более простом для понимания человеку виде. Когда я активно занимался реверсингом, в ряде случаев мне даже дизассмеблера не было нужно, чтобы понять, что делает программа))
«Практически» было написано потому, что интел по какой-то причине сделала возможность разного кодирования одинаковых инструкций, плюс некоторые битовые поля были описаны как неиспользуемые, игнорируемые или зарезервированные. В принципе, если не быть дотошным или не лезть в конспирологию зачем это было сделано, то можно считать биекцию точной.
Андрей К, я так понимаю логику работы программы Высокого уровня на языке Низкого уровня, т.е. один и тот же машинный код можно написать этими разными языками, но на языке низ. уровня можно отследить ошибки не видные на Высоком уровне. Встраивания в код высокого уровня, код на асб, отлаженный можно оптимизировать софт. + знание работы с памятью и т.д.
1. Начинайте с простых вещей. Python — отличный выбор, не прогадаете точно.
2. По мере необходимости добавляем постепенно С# для Windows Приложений, и Java для Linux. Они похожи, так как С# изначально содран с Java
3. Предыдущих 2-х пунктов вполне достаточно.
Но если хочется «погорячее» изучите еще С++.
Здесь Вы с лихвой получите большой опыт и огромное удовольствие от борьбы с Memory Leak, а все Ваше время будет тратится на «поиск пропавших указателей». Но зато Вы будете себя чувствовать крутым специалистом.
4. Но языки это всего лишь пол-дела. Изучайте технологии программирования, фрейморки, платформы, паттерны проектирования. Одного языка недостаточно.
5. Желаю успеха.
_sg_, если утечки памяти вы называете проблемой, то вы не знаете С++))
Но вы однозначны правы, что в С++ не надо лезть без чёткого понимания, зачем это надо. Язык действительно сложный.
johnsson08,
мягко скажем «неконкурентное» время разработки проектов,
и далее, maintance и support больших распределенных проектов сводят на нет все прелести этого языка.
_sg_, Да, это имеет место быть. Но вот только проблема в том, что если надо, чтобы работало очень быстро, в общем случае альтернатив плюсам просто нет.
Сейчас в погоне за скоростью разработки (что, кстати, часто сопровождается низким качеством даже не проработки — банального продумывания кода) дошли до того, что даже простой интерфейс (сраный интерфейс!!!) начинает заметно тормозить. Пример — качалка котировок Гидра из S#. Что уж говорить про тормознутость основной бизнес-логики...
В результате продукт собираем на коленке из говна и палок быстро, но вот только пользоваться им нельзя/проблемно. Ближайший исторический (и уже почти вымерший — вот странно?) аналог — дельфи, хоть там не столько с производительностью проблемы были, а с косячностью стандартных библиотек, но суть проблемы та же.
Андрей К, МС не причём. Дельфи был мертворожденный изначально… С таким качества стандартного кода и кодогенерации это вообще чудо, что он столько смог. Я не видел ни одного (ни одного!) продукта от простейших поделок до продуктов самого Борланда и смежных ему контор, которые бы не были бы тупо глючными…
С отличный язык, но если вы не знаете, зачем он вам нужен — выберите альтернативы, на которых получение результата быстрее.
Современный С++ — прекрасный язык (и всегда был им). Думаю, что самый мощный и эффективный из существующих; на нём можно делать вообще всё, что поддерживает процессорная архитектура. Но, во первых, правильный путь его изучения — с ассемблера, а, во вторых, — его гибкость и мощность имеет дорогую цену — он очень сложен и труден. Нет, если использовать «С с классами» это ещё куда ни шло, но это детский сад, пол процента силы плюсов.
Я так или иначе использую его уже больше 20 лет, но только сейчас начинаю понимать, почему Страуструпп (изобретатель и по прежнему активный развиватель С++) говорил: «я постоянно узнаю что-то новое об этом языке и его возможностях». Для новичка это означает нетленное «верёвка достаточной длинны, чтобы выстрелить себе в ногу».
Хотя, если понимать что там к чему, то можно, например, написать бэктестер, который будет работать на полтора десятичных порядка быстрее уже и так векторного (а значит очень быстрого) бэктестера AmiBroker ;)
зы: из перечисленных вариантов ещё не лезьте в паскаль/дельфи — мертворожденные изначально и, к счастью, уже почти вымершие языки.
Питон — самое то для новичка. Может ещё С#.
Java — только если очень надо безусловная кросплатформенность.
А вообще — решайте свою задачу. Язык — всего лишь инструмент, один из многих. Не надо на нём циклиться, решение задачи — первично.
johnsson08, Так раньше в школах к которых были х486 только Паскалю учили, в учебном заведении тоже с Паскаля потом дельфи типа для написания БД, ну и давали С посмотреть, в 2000-х годах учился не на программиста, а на технаря, пришлось ассемблер самостоятельно изучать, а потом С и С++ т.к. это была не исполненная студенческая мечта.
Да языка мало, главное научиться формулировать задачу и перенести на алгоритмы, которые уже реализовывать на конкретном языке прогр., можете посоветуйте книжки где учат задачу разбить на алгоритмы. Книжка про фундаментальные алгоритмы на С++ (Роберт Седжвик) есть с примерами сортировки, поиска, алгоритмы на графах.
Владимир Гончаров, да… считалось, что паскаль имеет какие-то волшебные качества, которые якобы помогают студенту что-то там лучше усвоить. Чушь это всё человеконенавистническая. От того, что студент вынужден писать begin вместо открывающейся скобки и end вместо закрывающей он лишь возненавидит идиотов-формализаторов, и только...
Я тоже, как и Вы в начале нулевых в ВУЗе учился, тоже не программер по основной специальности.
Про алгоритмы… Скажем так… Если интересует алгоритмика в своего рода классическом понимании (сферического коня в вакууме — моё оценочное суждение), то это наверное в сторону знаменитого трёхтомника «искусство программирования» Дональда нашего Кнута. Считается едва ли не классическим трудом, миллион переизданий и я не слышал ни одного плохого слова от тех, кто её таки осилил. Но… У меня, например, этот трёхтомник занимает уже лет 17 почётное место на полке, но за всё это время он мне так ни разу и не понадобился. Наверное зря, но как-то пока потребности не было.
Реально крайне помогло в практической работе две вещи — 1) желание и интерес докапывать до причин проблем и неэффективностией реализованных алгоритмов, и 2) изучение шаблонов проектирования и самое главное — причин, которые стояли за изобретением этих шаблонов. Потому что правильно применять можно только понимая, зачем оно нужно. Конкретных книг не подскажу. То, что я читал — уже давно не купить, да и описание с первого взгляда устарело, хотя суть не поменялась. За новыми книгами не слежу...
Вообще — начать можно и с википедии (скорее английской) и самое главное — practice-practice-practice.
Владимир Гончаров, ну, хорошей на то время была «Применение UML 2.0 и шаблонов проектирования / Введение в О-О анализ, проектирование и итеративную разработку» Крэг Ларман, 2007, ИД «Вильямс».
Ещё запомнилась «Принципы работы с требованиями к программному обеспечению. Унифицированный подход», Дин Леффингуэлл, Дон Уидриг, 2002, ИД «Вильямс» — это не про алгоритмы, но про то, как понять, какую систему вообще нужно создать. Тоже, собственно, важнейшая часть дела. Описанные методы сейчас уже в лоб могут считаться малость устаревшими, но суть 100% актуальна и применима. Сейчас стали чётче понимать, что ничего наперёд полностью и точно спроектировать невозможно, надо двигаться гораздо меньшими итерациями. Но в любом случае, нужно понимать/разработать генеральный план и внутри итераций — почти всё то же самое…
tranquility, да, согласен, чо уж. Но шаблоны — вот это реальный отрыв бошки. Там такие вещи можно делать, что просто ваще. Я иногда думаю, что не тот язык назвали BrainFuck))) Но когда понимаешь что там к чему — просто фантастика.
johnsson08, всё правильно пишешь. так и есть.
Автор, надо всё таки разделить: «для написания роботов» или для «пригодился по жизни»?
Если тебя интересует только алготорговля то бери специализированные среды типа TSLab. А если ты хочешь стать программёром и работать кодером на компашку, то это совсем другая тема.
дисклеймер: я очень давно в этой теме и могу ошибаться, выдавая то, что отлично работает для уже что-то знающего, за то, что сработает у новичка.
Я вообще сомневаюсь, что можно научиться делать что-то сложное, если только читать книги и смотреть, как это делают другие (даже если они при этом всё прекрасно объясняют).
Лучше берите новую задачу, или старую для нового решения, и ищите и пробуйте, как бы её наиболее правильно и эффективно решить на нужном языке. Разбирайтесь в деталях, пытайтесь использовать ранее неизвестные вещи, кажущиеся подходящими и полезными (сначала из хороших библиотек, типа STL, boost, ну и далее что найдёте). Смотрите, как другие люди решали похожие или другие задачи (есть куча хороших опен-сорсных проектов на любой вкус), попробуйте разобраться, почему они это делали именно так, а не иначе...
Собственно по нюансам языка есть отличные родные документации, ещё больше написанного энтузиастами. Просто гуглите...
Но сначала лучше подумайте, а точно ли вам С++ нужен)))
В любом случае, Learning by doing, — иначе, мне кажется, это не работает…
johnsson08, я бы не сказал, что С/C++ сложный. А вот громоздкий это да. И еще все сложней находить по нему готовый код(чтобы не изобретать велосипед), в основном весь гугл заполонили примеры на шарп, пайтон, джава.
Turbo Pascal, Delphi/Lazarus почему все убивают постоянно, как Кенни в Южном Парке. Но он все еще живой. Чем больше я изучаю других языков, например си++, с# тем больше нравится Delphi. Особенно это касается си и си++. Хотя Delphi есть свои проблемы, но возможности по связке различных технологий просто безграничны.
Александр, паскаль жесток и прямоуголен, как немецкий язык. Я не понимаю такие языки, как питон или пхп: вольная типизация и много двусмысленностей в коде. Паскаль этого не допустит.
Недаром многие научные проекты, начиная с 90-х годов, пишут на Паскале. Так что в своей нише он сидит, и что-то никак не сковырнут его.
Хотя, скажу честно, я уже все больше предпочитаю C#. Они чем то похожи.
johnsson08, В си++ придется все делать ручкам, ножками и головой. В общем не все прекрасно в си++. К слову говоря это фиерический язык, порядок include меняешь и начинает все компилировать. К тому же не удобно.
Если писать торговых роботов, то надо выбирать по следующим критериям:
— наличие доступа к рыночному окружению (у MQL5 огромная функциональность доступа к рыночному окружению и сделкам)
— полный контроль за позициями и историей сделок (в MQL5 есть полный контроль)
— подписная модель на рыночные события (у MQL5 множество OnXXXX событий)
— готовая библиотека индикаторов, включая кастомные (у MQL5 тысячи индикаторов)
— готовые опенсорсные библиотеки готового торгового кода (у MQL5 около 13 000 торговых програм лежат в кодобазе открыто)
— наличие мощного мультисимвольного потикового тестера торговых стратегий (у MQL5 такой, включая мультиядерность и удаленных агентов тестирования)
— наличие документации (у MQL5 на огромная документация на 10 языках)
— скорость вычислений (у MQL5 чуть отстает от C++, но часто обгоняет на чистой математике)
— защищенность языка, чтобы нельзя было написать трояна и можно было распространять защищенные скомпилированные файлы (только у MQL5)
— наличие большого сообщества разработчиков (у MQL5 есть)
Писать на языках общего применения торговых роботов неэффективно. 95% времени уйдет на построение инфраструктурных велосипедов. Причем получится реализовать самый мизер рыночного окружения.
А собственно на роботов не останется ресурсов. Это не говоря уже о тестере.
На MQL5 можно сконцентрироваться в 100% случаев на собственно алгоритмах роботов и не тратить ресурсы на велосипеды.
> скорость вычислений (у MQL5 чуть отстает от C++, но часто обгоняет на чистой математике)
Ахинея, а точнее осознанное введение в заблуждение. Потому что используйте в коде на С++ ту же оптимизированную математическую библиотеку, что использует mql и тогда сравнение будет корректным. И, конечно, не в пользу mql. Но тогда не получится красиво соврать, правда?
зы: вполне возможно, что с нормальным современным компилятором в каких-то случаях и этого не потребуется, т.к. нынешние оптимизаторы стали творить настоящие чудеса.
MQL5 — это оптимизирующий 64 битный С++ компилятор, который генерирует нативный код.
Вот пример доказательства обгона по сравнению с MSVC++ 2017: MQL5 смог вычисление двух корней из разных выражений свести в одну ассемблерную инструкцию.
По ссылке есть все технические выкладки. И код одинаковый с asm результатами.
MetaQuotes Software, один единственный пример доказывает лишь только то, что в этом одном случае это так. Но не более.
MSVC при всём моём огромном уважении к MS и любви к Visual Studio, как компилятор, к сожалению, никогда не был ни самым стандартным, ни самым эффективным. Те же с-lang, gcc или интелевый компилер в среднем куда как лучше по каждому из этих параметров.
Я готов поверить, что у вас отличные программисты. И даже готов поверить, что они всё пишут сами, а не берут из опенсорсных C-Lang/LLVM или gcc. Но ведь компилеры С++ делают тоже мягко говоря не глупые люди и числом их гораздо больше, чем ваших. И делают они это гораздо «давнее». Всё вместе это подсказывает, что всё таки сильно скорее всего в общем случае результат будет другой. Подчеркну — это не умаляет достоинств ваших разработчиков и mql как (быстрого) языка. Просто мне как человеку трилиарды раз видевшему и разбиравшему подробности булшитов вроде "<your-name-here> делает более быстрый код, чем С++!!!" и ваше утверждение кажется, мягко говоря, несколько сомнительным. Взять одного из самых слабых соперников, побить его в одном синтетическом тесте, и объявить это победой над всем родом — ну, как-то, глаз режет, согласитесь.
johnsson08, у вас позиция «просто не хочу верить».
Но реальность такова — внутри MQL5 находится С++ компилятор, который на равных и иногда чуть быстрее других С++ компиляторов (MSVC).
Я привел лишь один хорошо описанный факт. Потестируйте сами. Трейдеры давно все уже проверили и признали, что скорость у MQL5 потрясающая для торговых систем.
Но если вернуться к исходному вопросу, то там 10 важных пунктов. А вы среагировали лишь на один, да и то лишь представили свои теоретические ощущения, а не факты.
Мы свой первый язык MQL выпустили в 2001 году, потом потратили 18 лет на развитие компилятов MQL -> MQL2 -> MQL4 -> MQL5.
MQL4/MQL5 (под именем MQL4, так как составители считают его одиним языком) недавно входили в Top 50 самых известных языков программирования по TIOBE Index.
Сейчас ниже Top 50:
The Next 50 Programming Languages
The following list of languages denotes #51 to #100. Since the differences are relatively small, the programming languages are only listed (in alphabetical order).
MetaQuotes Software, у меня нет ни времени, ни желания с вами (или кем либо ещё) спорить или что-то доказывать. Я попробовал объяснить в чём проблема — вы (сделали вид что) не поняли. Это не моя проблема — это ваша проблема. Думаю, читатели при наличии желания без проблем разберутся далее сами.
Приёмы ведения вами дискуссии (ad hominem, ad populum, ad antiquitatem, ad ignorantiam, подмена тезиса и некоторые ещё) эффективно блокируют желание говорить что-то ещё.
зы: и кроме этого, кое-что существенное сказанное вами вызывает желание держаться от mql подальше.
Андрей К, лет 15 назад тестил, когда С++ занимался, на тот момент очень неплохо оптимизировал под новые камни, но имел некоторые проблемы с C++ templates.
MetaQuotes Software, Сделайте нормальные callback — вызов функций MQL5 из других языков и все ваше поделие просто не нужно будет.
Писать на языках общего применения торговых роботов неэффективно. 95% времени уйдет на построение инфраструктурных велосипедов. Причем получится реализовать самый мизер рыночного окружения.
Ваш язык ничем не ускоряет разработку роботов. От слова совсем. Нет ни одной команды, которая бы резко увеличила разработку. Ваш язык в общем-то очень мертво рожденный и применяется только в рамках mt.
К тому же приходится жить с вашей не удобной системой и кучей багов. К другому брокеру уже не уйдешь, особенно если у брокера нет вашего поделия.
А кто подскажет на чем можно сделать сборщик новостей с сайтов. :-)
Нужно подключаться к дисклозер, поиском искать новости по компаниям и в тексте (заголовке) новости ключевые слова. И мигать об этом в трее или там на почту слать. :-)
П.С. Писал на С++ в свое время — не хватило ума. :-) Три дня ушло на программу хелло ворлд. :-) Написал тогда с грехом пополам почтового клиента, ухайдокал месяца 2 в совокупности. Потом сборщик разной лажи с сайтов в базу данных делал (забыл сколько времени, но тоже не быстро). С++ он для профи. Маршаллинг все дела. :-)
Не знаю какие сейчас есть языки. Раньше мелкие поделки делал на паскале, дельфи, бейсике, ассемблере, shell, awk,php, sql, basic. Именно мелкие, т.е. бытовуху или что-то поправить.
В общем дайте, плиз, совет, под мою задачу в какую сторону лучше копать. :-)
Евгений Петров, в сторону того что знаешь, или можешь изучить за небольшой срок.
Java — не просто язык, это целый огромный конгламерат инструментов фреймвоков технологий и т.п. и т.д. куда порог вхождения очень и очень высокий и с бухты барахты не прокатит.
Евгений Петров, это называется парсер сайтов и работа с get/post запросами. На Си естественно это крайне тяжело. Парсить и делать запросы очень удобно на шарпе. Я смартлаб парщю через шарп под линуксом
А кто подскажет на чем можно сделать сборщик новостей с сайтов. :-)Нужно подключаться к дисклозер, поиском искать новости по компаниям и в тексте (заголовке) новости ключевые слова. И мигать об этом в трее или там на почту слать. :-)
В питоне всё это делается легко, парсить сайт, искать ключевики. Т.е. реально все ингредиенты есть, просто нужно их состыковать. Программка будет на страницу кода.
Язык учить для чего ?
Что то программировать ?
Наверно что то полезное или мозги размять ?
Если что то полезное то в одиночку или с кем-то ?
… и еще куча вопросов.
Вообще Scala рулит, потому что несмотря на некторые изъяны переходить на что то другое уже не хочется.
Наиболее универсальный язык в задачах работы с непотоковыми данными (обработка данных в таблицах) — Python, а точнее Python+pandas+numpy+scipy… сила питона в наборе библиотек для работы с данными. С ним уже никто не сравнится (в некоторых местах «ничья» только с R, мой прогноз — Python его съест со временем). Наборы библиотек для C++,Java, и тем более C# не сравнимы. Эта инфраструктура ближе всего к задачам поиска зависимостей и исследованию для трейдинга.
Python подходит для исполнения торговых роботов, но там уже последовательные потоки данных, с ними он справится — но не для HFT, только для данных относительно медленных. Для потоков используются быстрые языки C++,Java,C#.
Исследовать данные на C# или Java на порядок (порядки) сложнее чем на Python. Ещё сложнее на C++. Многословные языки с типизацией. В C# и Java легче чем на C++, так как компилятор берёт на себя некоторые заботы (типа проблем работы с памятью).
Если язык нужен абстрактно, для хорошей базы, C# первым языком не учите. Корни у него слишком проприетарные, это не универсально. Учите C++ (сложно) или Java (легче).
Начинать изучать программирование с относительно редких языков — не рекомендую. Обойдите стороной Golang,haskell,scala ,MQL и пр,
Ромирес, C# уже давно стал кроссплатформенным. Тем более теперь, когда коммьюнити добила майкрософт и «заставила» его начать активно работать в направлении ".NET для Linux". И мобильные платформы тоже насколько знаю уже давно поддерживаются.
Ромирес, всё верно, плюсую ко всему (увы, виртуально, реально не пущают)
Да, ну и ещё всё забываю приплюсоваться к главной мысли, которую тут высказали пока всего лишь пара человек
— если интересен трейдинг в первую очередь, то надо и вкладываться в исследования и поиск торговых идей в первую очередь. Это прежде всего понимание рынка. Навыки прогерства тут достаточны ровно в том объёме, чтобы понимать, можно л алгоритмизировать это понимание или нет. Для исследований — это питон или (хуже, местами сильно, но активно девелопится и местами имеет крутейшие пакеты) R. Я предпочитаю проприетарный Матлаб. Залез на него ещё до питона и уже не могу слезть, очень уж удобен и быстр)
— если первично прогерство, то начать можно с питона и дальше после минимального понимания процесса в тот язык, что рулит в целевой сфере.
Учить надо не отдельный язык, а стак: полный набор технологий для получения продукта/результата.
Например, я в основном пользуюсь таким набором: ASP.NET + C# + MSSQL + DevExpress + SSRS.
С#, Java использовать для большого кол-ва мелких объектов (типа сделок) довольно накладно выходит из-за сборщика мусора, т. к. получаем тормоза. А чтобы от них избавиться придется переписать сборщик мусора и rtl для того, чтобы не было постоянной работы сборщика.
Из того, что можно использовать более менее это Delphi в связке с си++ для прикручивания разных библиотек и часть кода можно вынести в си++. Но все писать на си++ затея не самая радужная, т. к. в си++ все приходится делать ручками. В си++ мало что есть из коробки в отличие от Delphi/Lazarus и важный код получается быстрым и эффективным.
Ко всему прочему возможности по бесшовному связыванию модулей из разных языков программирования просто огромные.
Александр, сделки можно хранить по-разному. И даже если их хранить как отдельные объекты, сборщик не причем. Сделки просто ложатся в память и накапливаются, чтобы быть доступными для основной логики. Сборщик не идиоты писали. Кроме исключительно редких специальных случаев Вы не почувствуете его присутствие.
ch5oh, Ага редких. Не надо ляля. Достаточно частых случаев и местами даже не приятных. Попробуй обойти 3 млн. объектов — какой бы ни крутой сборщик не был, но столько перелопатить незаметно/быстро будет проблематично. В любом случае придется с этим чудом что-то делать и на это уйдет основная часть работы.
Александр, в чем проблема "обойти 3 миллиона объектов"? Ни в чем. И при обходе коллекции сборщик мусора вообще никак не используется. Потому что объекты не создаются и не уничтожаются.
Нет, наверное, можно написать настолько криворуко, применить неадекватные типы данных и коллекций (то есть задаться целью написать говнокод) — тогда можно искуственно создать псевдопроблемную ситуацию.
Но тут как в анекдоте:
Подходит джуниор к сеньору и спрашивает: «Почему работает неправильно? Где ошибка?»
Александр, это Вам надо «писать тесты и смотреть». Про разные поколения объектов почитайте на досуге.
ПС А если Вам нужны микросекунды, тогда вообще другой разговор. И да, сишарп не подойдет. И даже асм не подойдет. Недавно был интересный пост как человек на FPGA торгует. Вот это — подойдет.
Dmitryy, Вот скажите мне у вас 3 млн. объектов, которые не будут удалены, нафига их обходить то? А чтобы сборщик мусора их не обходил, то необходимо использовать пулы объектов. А для этого нужно переписывать все коллекции. Я вот не знаю (хотя не изучал), коллекции, которые бы использовали пулы объектов. professorweb.ru/my/csharp/optimization/level3/3_9.php
My Shadow, в jvm такая же проблема, придется переписывать сборщик и коллекции. К слову говоря на лекториуме есть лекция на этот счет к слову очень познавательная.
В идеале все сводится к ручной сборке и большому кол-ву памяти.
My Shadow, Набрал и что? Первое решение платное, второе новое, т. к. я может быть и не в курсе. Если оно позволяет в ручную делать сборку мусора так я только за. Я не использую jvm. Мне больше нравятся нативные решения.
Александр, если вы хотите в ручную то используйте offheap. а эти решения делают реальный параллельный GC без задержек на кучах большого объема, ценой некоторого замедления работы с объектами.
Александр, я почему и спросил про какого рода объекты? Если каждый из них по 100Мб весит, тогда я могу понять, хотя это тоже вопрос решаемый, 32Гб оперативной памяти уже не роскошь. Лишняя или преждевременная чистка также приводит к потере производительности. Нужно правильно работать с коллекциями, использовать генерики, не плодить глобальные переменные. И всё-равно все эти меры, это куда проще и безопаснее чем с++.
Dmitryy, Нет это не проще и не безопасней чем с++. Работа со 100 тыс. сделок в стокшарпе уже давала просадки при сборке мусора (версия стокшарпа старая, как сейчас обстоят дела не знаю). Это даже более не безопасно, чем с++. В с# есть:
1. Есть 2 вида памяти: управляемая и не управляемая. Всегда надо знать, где лежит объект. Для неуправляемой памяти надо еще чистить в ручном режиме.
2. Есть маршалинг. Он свое тоже берет в виде копирования там, где его можно не делать.
3. Не всегда заметны утечки памяти. Слабые ссылки ни кто не отменял. Но об этом тоже нужно помнить.
4. Есть сборщик мусора.
Со с# выстрелить себе в ногу можно очень легко, а вот заметить это бывает достаточно сложно. Для большинства задач с# хватает. Но есть задачи специфические и их лучше решать на си++ или Delphi.
В си++ конечно другие проблемы.
Александр, не спорю при разработке главно сделать работающий алгоритм, а производительность потом можно поправить перформанс тестингом. Современные тестеры на малекулы разбирают дотнет код, причем очень не плохо дают советы по оптимизации. Да, иногда не тривиально, но реально.
Dmitryy, Единственный плюс си# и java заключается в их рантайм оптимизациях, что существенно сложнее сделать на нативных языках, даже на си++. В остальном особых плюсов использования си# и java я не вижу. Местами сборщики мусора больше мешают, чем решают поставленных задач.
Чтобы в Delphi отследить утечку памяти нужно установить одну переменную и утечки будут всегда видны. А в других языках мне надо с другими инструментами просиживать, чтобы узнать, что я что-то не чищу.
Александр, стокшарп архитектурно неудачно сделан. О чем и писал ранее: можно написать говнокод и получить проседание производительности. Но причиной будет говнокод, а не GC.
Для трейдинга по сути не важно (HFT не берем, врядли тут кто-то в силах противостоять той же цитадели). В квике может очень понадобится LUA, но зная другие языки, вы его быстро освоите.
Работаю более 10 лет с C#, и когда мне понадобилось посчитать кое-какую статистику по российскому рынку, я его и ногой не тронул. Проще было взять JavaScript, через REST вытащить с API мос. биржи данные и сделать несколько циклов. Ни тебе парсеров, ни приведение данных, зачем C#?
Вообще NodeJS крайне удобная штука, потому-что очень мощное сообщество и всё делается на коленке из консоли.
Кстати, ребята, хочу сказать спасибо за тему. :-)
Родил сейчас код на VBA под excel (собирался года 3), получил удовольствие. Давно код не писал. Страшно вспомнить сколько лет. :-)
Роботов обычно пишут под определённый торговый терминал. Для Quik'а самый естественный выбор — QLua. Это «нечто» по мотивам JavaScript.
Но для для тестирования стратегий с большим числом параметров и на длинных историях котировок незаменим C++AMP в Microsoft Visual Studio. Он использует графический процессор видеокарты ПК. На моём десктопе от 2012 г ускорение в 33 раза. Правда, каждый уровень ветвления if замедляет в 1.7 раза. Но это самый удобный способ получить супер-компьютер у себя дома.
Rostislav Kudryashov, зачем вводите в заблуждение? Язык Lua, и выросшая из него Quik обёртка QLua ни малейшего отношения к JavaScript не имеют. От слова вообще. Это самостоятельный, довольно старый, типа легковесный язык, который весьма легко эмбеддить в свои проекты (чем часто пользуются в геймдев индустрии, например). Его «нечтовость» в квике в большинстве наследуется от самой «нечтовости» квика…
johnsson08, javascript и lua весьма похожи — динамическая типизация + прототипное программирование, только в одном {/}, в другом do/end наверно это имелось в виду.
Через год будет запущен газопровод Северный поток - Вучич в интервью Handelsblatt – Lenta Через год будет запущен газопровод «Северный поток», газ будет поступать из России в Европу. Такое заявление с...
Отзыв лицензии у банка «Гарант-инвест» не повлияет на основной бизнес — коммерческую недвижимость в Москве 26 декабря Банк России отозвал лицензию у коммерческого банка «Гарант-Инвест». Руководство Фи...
7 самых перспективных акций на 2025 год от БКС Эксперты «БКС Мир инвестиций» ждут роста акций в наступающем 2025 году — и для этого есть основания, т.к. еще ни разу в истории российский рынок не падал...
7 самых перспективных акций на 2025 год от БКС Эксперты «БКС Мир инвестиций» ждут роста акций в наступающем 2025 году — и для этого есть основания, т.к. еще ни разу в истории российский рынок не падал...
🐳Лучше, чем LQDT Зумеры изобрели велосипед 😉🤝Присоединяйся к сообществу Кот.Финанс: мы делаем обзоры компаний, рынков, недвижимости --Мы восхищаемся поступательным ростом цен на пай LQDT! Единственное...
Доллар выручил искусственный интеллект Пока рынки рассуждают, что из предвыборных обещаний сможет реализовать Дональд Трамп, я бы поставил вопрос иначе. Способна ли экономика США поддержать высокий те...
Создаю себе новогоднее настроение Продолжаю тянуть шорты сишки и юаня.Начало сделки по сишке: https://t.me/madeyourtrade/4952Начало сделки по юаню: https://t.me/madeyourtrade/4945Добавил шортов по юан...
*Джон Голт*, не язык нужно учить, а рабочие стратегии искать.
Программируют пусть программисты.
Вам нужен минимум языка и максимум математики.
Если же Вам интересен HFT и прямой выход на биржу, то здесь однозначно имеет смысл учить c#. Так как все биржевые библиотеки преимущественно адаптированны под него. Да и без работы в дальнейшем не останетесь так как многим брокерам требуется именно спецы со знанием с#(так сложилось именно в российской брокерской индустрии).
Для максимальной экономии денежных средств советую обратить внимание на сайт там выкладывают крутые курсы по различным языкам программирования абсолютно бесплатно.
В целом вектор развития я вижу следующий:
1.Изучение синтаксиса С#
2.Основы ООП
3.Структуры данных (коллекции, массивы и т.п.) и многопоточность
4.Пилишь первое приложение:
Как вариант простой робот с использованием сторонних библиотек и
прямое подключение к серверу брокеру например через библиотеку Алор Atentis
5. Далее изучить GIT, но и какие-нибудь популярные фреймворки+работа хотя бы с одной базой данных (например MySQL), но это уже чисто для трудоустройства.
Советую почитать ещу мой пост:https://smart-lab.ru/blog/496838.php/
Только в Алоре сейчас три вакансии весит на эти позиции.
Если интересно. Я за вакансиями в нашей сфере слежу с 2015 года. Распределение примерно такое по требуемым специалистам:
— если западная контора, то обязательно java
— если трудиться на РФ, то Cи
— если дата аналист, то питон/R.
Шарп требовался один раз БКС'у под статистический арбитраж. И постоянно требуется Банку Санкт Петербург в отдел алго.
А Алору шарп нужен для околобиржевых целей.
C++
C#
Где его можно использовать сейчас?
сейчас для озвученных Вами сегментов ВЕЗДЕ используется КОДОГЕНЕРАЦИЯ.
И программы пишутся в лучшем случае на языках более высокого уровня с последующей выгрузкой исполняемого кода на ЛЮБОМ языке для ЛЮБОЙ платформы, в худшем используются кросс-средства.
Только очень «гордые птички» пишут все на С, не зная современных технологий программирования.
для Linuх лучше использовать Java.
Для использования С++ необходим достаточный опыт программирования.
на треклятом Западе раньше (до 2008-10 гг.) Java + Oracle являлся корпоративным стандартом. Хотя там очень много профессиональных «Плюсовых» — «Крестовых» команд было. А где-то с 2005-7гг начали уже появляться серьезные проекты на .Net. Сейчас не знаю как там, не отслеживаю.
А если отвечать конкретно на ваш вопрос: например в MT5 можно кодить читая у Страуструпа только общее описание базовых конструкций языка. Совершенно не обязательно при этом очень уж глубоко изучать стандартную библиотеку, что по сути и есть самое сложное в освоении С++ и самое большое отличие от нейтив Си.
надо брать и начинать программировать
на чем угодно
хоть на php для начала
Изучить азы? Так они хорошо изучаются на любом языке.
Dmitryy, =) недавно делал отдельный пост. Как раз про расчет дельты.
"Куда в опционах пропадают деньги?"
А декомпилляция библиотек — это уже знаете как называется? =) Ну, Вы поняли.
Расскажу чисто на отвлечься. У меня дочь растет, мы ее развиваем по методе раннего развития. Сейчас у нее очень сильно развито мышление, логика и все сопутствующее.
Начинаю подумывать, что если собеседование с психологом подтвердит, то начну ее готовить к программированию. Но не классическому, а уже к робототехнике, уверен за этим будущее. Поэтому выберу простой Си для начала.
я на себе понял, что человек должен заниматься любимым делом. Так пусть он занимается этим с детства уже.
Андрей К, C — не простой.
Вот «простой» код на C:
И что он делает?
Что это вообще такое?
Ну, ведь, просто же должно быть ответить на этот вопрос, C же простой.
Ну, хорошо, добавим ещё одну функцию, которая пользуется первой:
Что тут происходит?
А, ведь, всё тот же «простой Си».
Вот тут «простенькая» программка, которая компилируется и запускается online, выводит результаты. Можно поредактировать и поэкспериментировать.
Программка на «простом Си»...
Питон не понимаю — я программист старой школы (очень старой).
Андрей К, лет 30 назад ещё можно было знать «всё» программирование. Сейчас — жёсткая специализация.
В робототехнике также специализироваться нужно уже сейчас, не говоря о том, что будет через 20 лет.
У более стандартных бирж обычно более изощрённые протоколы передачи информации.
Если через Quik, то можно начать с Lua (QLua), а потом попробовать C# — на C# написана неплохая обёртка QuikSharp.
Дроч на перформанс оставьте задротам. Иначе быстро выгорите, занимаясь не пойми чем, вместо апробации разных торговых гипотез.
В противовес любому из классических языков, можно параллельно смотреть на функциональные языки, так как там все иначе :).
Java тоже не плохо, и с ним же яваскрипт фреймворки для веба..
p.s. ежели взращивать программиста с молоду и не для роботов… то понимание как работает железо, память и т.д. на низком уровне просто необходимо в независимости от языка :).
попробуйте курсеру или датакэмп…
Все остально, сказанное о более грубоком понимании работы процессора, памяти, шин передачи данных, вам может и не надо ), время сейчас очень дорого, и сосредоточится именно на вашей цели куда более важно, нежели пространно изучать программирование.
> плюсы вы изучили через асм?
Зря смеётесь. Это как раз самый правильный подход. Сначала Асм, а потом С/С++. Когда понимаешь, что там происходит под капотом, вообще никаких проблем не испытываешь с пониманием нюансов языка. А вот те, кто не знает асма очень часто попадают в разные проблемы на этих языках.
Вы ошиблись: Исполняется машинный код на процессоре, а не «асм исполняется процессором» (хотя может понятия асм у нас разные), откомпилированный код будет хоть на С/С++/Java/Python одинаковый в «теории», сам не проверял.
> Исполняется машинный код на процессоре, а не «асм исполняется процессором»
Нет никакой ошибки. Отображение между асмом и машинным кодом практически биективное. Т.е. говоря проще Асм этот тот же машинный код, просто в более простом для понимания человеку виде. Когда я активно занимался реверсингом, в ряде случаев мне даже дизассмеблера не было нужно, чтобы понять, что делает программа))
«Практически» было написано потому, что интел по какой-то причине сделала возможность разного кодирования одинаковых инструкций, плюс некоторые битовые поля были описаны как неиспользуемые, игнорируемые или зарезервированные. В принципе, если не быть дотошным или не лезть в конспирологию зачем это было сделано, то можно считать биекцию точной.
2. По мере необходимости добавляем постепенно С# для Windows Приложений, и Java для Linux. Они похожи, так как С# изначально содран с Java
3. Предыдущих 2-х пунктов вполне достаточно.
Но если хочется «погорячее» изучите еще С++.
Здесь Вы с лихвой получите большой опыт и огромное удовольствие от борьбы с Memory Leak, а все Ваше время будет тратится на «поиск пропавших указателей». Но зато Вы будете себя чувствовать крутым специалистом.
4. Но языки это всего лишь пол-дела. Изучайте технологии программирования, фрейморки, платформы, паттерны проектирования. Одного языка недостаточно.
5. Желаю успеха.
Но вы однозначны правы, что в С++ не надо лезть без чёткого понимания, зачем это надо. Язык действительно сложный.
мягко скажем «неконкурентное» время разработки проектов,
и далее, maintance и support больших распределенных проектов сводят на нет все прелести этого языка.
Сейчас в погоне за скоростью разработки (что, кстати, часто сопровождается низким качеством даже не проработки — банального продумывания кода) дошли до того, что даже простой интерфейс (сраный интерфейс!!!) начинает заметно тормозить. Пример — качалка котировок Гидра из S#. Что уж говорить про тормознутость основной бизнес-логики...
В результате продукт собираем на коленке из говна и палок быстро, но вот только пользоваться им нельзя/проблемно. Ближайший исторический (и уже почти вымерший — вот странно?) аналог — дельфи, хоть там не столько с производительностью проблемы были, а с косячностью стандартных библиотек, но суть проблемы та же.
Делфи умер после покупки его Майкрософтом. Майкрософт его купил как конкурента и похоронил после шестой версии. Отличная среда, прижившаяся в СНГ.
qbasic & excel
причём excel развитие basic
а вообще я запатентовал алгоритм
позволяющий быстро изучать 20 разделов
любого языка программирования и изучил цэ-диез
С отличный язык, но если вы не знаете, зачем он вам нужен — выберите альтернативы, на которых получение результата быстрее.
Современный С++ — прекрасный язык (и всегда был им). Думаю, что самый мощный и эффективный из существующих; на нём можно делать вообще всё, что поддерживает процессорная архитектура. Но, во первых, правильный путь его изучения — с ассемблера, а, во вторых, — его гибкость и мощность имеет дорогую цену — он очень сложен и труден. Нет, если использовать «С с классами» это ещё куда ни шло, но это детский сад, пол процента силы плюсов.
Я так или иначе использую его уже больше 20 лет, но только сейчас начинаю понимать, почему Страуструпп (изобретатель и по прежнему активный развиватель С++) говорил: «я постоянно узнаю что-то новое об этом языке и его возможностях». Для новичка это означает нетленное «верёвка достаточной длинны, чтобы выстрелить себе в ногу».
Хотя, если понимать что там к чему, то можно, например, написать бэктестер, который будет работать на полтора десятичных порядка быстрее уже и так векторного (а значит очень быстрого) бэктестера AmiBroker ;)
зы: из перечисленных вариантов ещё не лезьте в паскаль/дельфи — мертворожденные изначально и, к счастью, уже почти вымершие языки.
Питон — самое то для новичка. Может ещё С#.
Java — только если очень надо безусловная кросплатформенность.
А вообще — решайте свою задачу. Язык — всего лишь инструмент, один из многих. Не надо на нём циклиться, решение задачи — первично.
Да языка мало, главное научиться формулировать задачу и перенести на алгоритмы, которые уже реализовывать на конкретном языке прогр., можете посоветуйте книжки где учат задачу разбить на алгоритмы. Книжка про фундаментальные алгоритмы на С++ (Роберт Седжвик) есть с примерами сортировки, поиска, алгоритмы на графах.
Я тоже, как и Вы в начале нулевых в ВУЗе учился, тоже не программер по основной специальности.
Про алгоритмы… Скажем так… Если интересует алгоритмика в своего рода классическом понимании (сферического коня в вакууме — моё оценочное суждение), то это наверное в сторону знаменитого трёхтомника «искусство программирования» Дональда нашего Кнута. Считается едва ли не классическим трудом, миллион переизданий и я не слышал ни одного плохого слова от тех, кто её таки осилил. Но… У меня, например, этот трёхтомник занимает уже лет 17 почётное место на полке, но за всё это время он мне так ни разу и не понадобился. Наверное зря, но как-то пока потребности не было.
Реально крайне помогло в практической работе две вещи — 1) желание и интерес докапывать до причин проблем и неэффективностией реализованных алгоритмов, и 2) изучение шаблонов проектирования и самое главное — причин, которые стояли за изобретением этих шаблонов. Потому что правильно применять можно только понимая, зачем оно нужно. Конкретных книг не подскажу. То, что я читал — уже давно не купить, да и описание с первого взгляда устарело, хотя суть не поменялась. За новыми книгами не слежу...
Вообще — начать можно и с википедии (скорее английской) и самое главное — practice-practice-practice.
Ещё запомнилась «Принципы работы с требованиями к программному обеспечению. Унифицированный подход», Дин Леффингуэлл, Дон Уидриг, 2002, ИД «Вильямс» — это не про алгоритмы, но про то, как понять, какую систему вообще нужно создать. Тоже, собственно, важнейшая часть дела. Описанные методы сейчас уже в лоб могут считаться малость устаревшими, но суть 100% актуальна и применима. Сейчас стали чётче понимать, что ничего наперёд полностью и точно спроектировать невозможно, надо двигаться гораздо меньшими итерациями. Но в любом случае, нужно понимать/разработать генеральный план и внутри итераций — почти всё то же самое…
Автор, надо всё таки разделить: «для написания роботов» или для «пригодился по жизни»?
Если тебя интересует только алготорговля то бери специализированные среды типа TSLab. А если ты хочешь стать программёром и работать кодером на компашку, то это совсем другая тема.
дисклеймер: я очень давно в этой теме и могу ошибаться, выдавая то, что отлично работает для уже что-то знающего, за то, что сработает у новичка.
Я вообще сомневаюсь, что можно научиться делать что-то сложное, если только читать книги и смотреть, как это делают другие (даже если они при этом всё прекрасно объясняют).
Лучше берите новую задачу, или старую для нового решения, и ищите и пробуйте, как бы её наиболее правильно и эффективно решить на нужном языке. Разбирайтесь в деталях, пытайтесь использовать ранее неизвестные вещи, кажущиеся подходящими и полезными (сначала из хороших библиотек, типа STL, boost, ну и далее что найдёте). Смотрите, как другие люди решали похожие или другие задачи (есть куча хороших опен-сорсных проектов на любой вкус), попробуйте разобраться, почему они это делали именно так, а не иначе...
Собственно по нюансам языка есть отличные родные документации, ещё больше написанного энтузиастами. Просто гуглите...
Но сначала лучше подумайте, а точно ли вам С++ нужен)))
В любом случае, Learning by doing, — иначе, мне кажется, это не работает…
Хорошо, что делает следующая программа?
Ну, ведь, C++ же несложный?
То, что она что-то делает, убедиться, а также поэкспериментировать можно здесь.
johnsson08,
Не понял, чо за наезд :)
Недаром многие научные проекты, начиная с 90-х годов, пишут на Паскале. Так что в своей нише он сидит, и что-то никак не сковырнут его.
Хотя, скажу честно, я уже все больше предпочитаю C#. Они чем то похожи.
Если писать торговых роботов, то надо выбирать по следующим критериям:
— наличие доступа к рыночному окружению (у MQL5 огромная функциональность доступа к рыночному окружению и сделкам)
— полный контроль за позициями и историей сделок (в MQL5 есть полный контроль)
— подписная модель на рыночные события (у MQL5 множество OnXXXX событий)
— готовая библиотека индикаторов, включая кастомные (у MQL5 тысячи индикаторов)
— готовые опенсорсные библиотеки готового торгового кода (у MQL5 около 13 000 торговых програм лежат в кодобазе открыто)
— наличие мощного мультисимвольного потикового тестера торговых стратегий (у MQL5 такой, включая мультиядерность и удаленных агентов тестирования)
— наличие документации (у MQL5 на огромная документация на 10 языках)
— скорость вычислений (у MQL5 чуть отстает от C++, но часто обгоняет на чистой математике)
— защищенность языка, чтобы нельзя было написать трояна и можно было распространять защищенные скомпилированные файлы (только у MQL5)
— наличие большого сообщества разработчиков (у MQL5 есть)
Писать на языках общего применения торговых роботов неэффективно. 95% времени уйдет на построение инфраструктурных велосипедов. Причем получится реализовать самый мизер рыночного окружения.
А собственно на роботов не останется ресурсов. Это не говоря уже о тестере.
На MQL5 можно сконцентрироваться в 100% случаев на собственно алгоритмах роботов и не тратить ресурсы на велосипеды.
> скорость вычислений (у MQL5 чуть отстает от C++, но часто обгоняет на чистой математике)
Ахинея, а точнее осознанное введение в заблуждение. Потому что используйте в коде на С++ ту же оптимизированную математическую библиотеку, что использует mql и тогда сравнение будет корректным. И, конечно, не в пользу mql. Но тогда не получится красиво соврать, правда?
зы: вполне возможно, что с нормальным современным компилятором в каких-то случаях и этого не потребуется, т.к. нынешние оптимизаторы стали творить настоящие чудеса.
MQL5 — это оптимизирующий 64 битный С++ компилятор, который генерирует нативный код.
Вот пример доказательства обгона по сравнению с MSVC++ 2017: MQL5 смог вычисление двух корней из разных выражений свести в одну ассемблерную инструкцию.
По ссылке есть все технические выкладки. И код одинаковый с asm результатами.
MSVC при всём моём огромном уважении к MS и любви к Visual Studio, как компилятор, к сожалению, никогда не был ни самым стандартным, ни самым эффективным. Те же с-lang, gcc или интелевый компилер в среднем куда как лучше по каждому из этих параметров.
Я готов поверить, что у вас отличные программисты. И даже готов поверить, что они всё пишут сами, а не берут из опенсорсных C-Lang/LLVM или gcc. Но ведь компилеры С++ делают тоже мягко говоря не глупые люди и числом их гораздо больше, чем ваших. И делают они это гораздо «давнее». Всё вместе это подсказывает, что всё таки сильно скорее всего в общем случае результат будет другой. Подчеркну — это не умаляет достоинств ваших разработчиков и mql как (быстрого) языка. Просто мне как человеку трилиарды раз видевшему и разбиравшему подробности булшитов вроде "<your-name-here> делает более быстрый код, чем С++!!!" и ваше утверждение кажется, мягко говоря, несколько сомнительным. Взять одного из самых слабых соперников, побить его в одном синтетическом тесте, и объявить это победой над всем родом — ну, как-то, глаз режет, согласитесь.
Но реальность такова — внутри MQL5 находится С++ компилятор, который на равных и иногда чуть быстрее других С++ компиляторов (MSVC).
Я привел лишь один хорошо описанный факт. Потестируйте сами. Трейдеры давно все уже проверили и признали, что скорость у MQL5 потрясающая для торговых систем.
Но если вернуться к исходному вопросу, то там 10 важных пунктов. А вы среагировали лишь на один, да и то лишь представили свои теоретические ощущения, а не факты.
Мы свой первый язык MQL выпустили в 2001 году, потом потратили 18 лет на развитие компилятов MQL -> MQL2 -> MQL4 -> MQL5.
MQL4/MQL5 (под именем MQL4, так как составители считают его одиним языком) недавно входили в Top 50 самых известных языков программирования по TIOBE Index.
Сейчас ниже Top 50:
Приёмы ведения вами дискуссии (ad hominem, ad populum, ad antiquitatem, ad ignorantiam, подмена тезиса и некоторые ещё) эффективно блокируют желание говорить что-то ещё.
зы: и кроме этого, кое-что существенное сказанное вами вызывает желание держаться от mql подальше.
К тому же приходится жить с вашей не удобной системой и кучей багов. К другому брокеру уже не уйдешь, особенно если у брокера нет вашего поделия.
Если не в жизни, то после неё точно пригодится…
Нужно подключаться к дисклозер, поиском искать новости по компаниям и в тексте (заголовке) новости ключевые слова. И мигать об этом в трее или там на почту слать. :-)
П.С. Писал на С++ в свое время — не хватило ума. :-) Три дня ушло на программу хелло ворлд. :-) Написал тогда с грехом пополам почтового клиента, ухайдокал месяца 2 в совокупности. Потом сборщик разной лажи с сайтов в базу данных делал (забыл сколько времени, но тоже не быстро). С++ он для профи. Маршаллинг все дела. :-)
Не знаю какие сейчас есть языки. Раньше мелкие поделки делал на паскале, дельфи, бейсике, ассемблере, shell, awk,php, sql, basic. Именно мелкие, т.е. бытовуху или что-то поправить.
В общем дайте, плиз, совет, под мою задачу в какую сторону лучше копать. :-)
Java — не просто язык, это целый огромный конгламерат инструментов фреймвоков технологий и т.п. и т.д. куда порог вхождения очень и очень высокий и с бухты барахты не прокатит.
Есть шикарный курс на эту тему всего лишь 14 часов. Бесплатно.
https://coursehunters.net/course/selenium-webdriver-java-dlya-nachinayushchih
ruby.bastardsbook.com/chapters/html-parsing/
В питоне всё это делается легко, парсить сайт, искать ключевики. Т.е. реально все ингредиенты есть, просто нужно их состыковать. Программка будет на страницу кода.
CalendarCountryById
Получает описание страны по её идентификатору
CalendarEventById
Получает описание события по его идентификатору
CalendarValueById
Получает описание значения события по его идентификатору
CalendarCountries
Получает массив описаний стран, доступных в Календаре
CalendarEventByCountry
Получает массив описаний всех событий, доступных в Календаре, по указанному коду страны
CalendarEventByCurrency
Получает массив описаний всех событий, доступных в Календаре, по указанной валюте
CalendarValueHistoryByEvent
Получает массив значений по всем событиям на заданном диапазоне времени по идентификатору события
CalendarValueHistory
Получает массив значений по всем событиям на заданном диапазоне времени с фильтром по стране и/или валюте
CalendarValueLastByEvent
Получает массив значений события по его ID c момента состояния базы Календаря с заданным change_id
CalendarValueLast
Получает массив значений по всем событиям с фильтрацией по стране и/или валюте с момента состояния базы Календаря с заданным change_id
Календарь является штатным фидом в любом MetaTrader 5:
Scala (!)
Что то программировать ?
Наверно что то полезное или мозги размять ?
Если что то полезное то в одиночку или с кем-то ?
… и еще куча вопросов.
Вообще Scala рулит, потому что несмотря на некторые изъяны переходить на что то другое уже не хочется.
Наиболее универсальный язык в задачах работы с непотоковыми данными (обработка данных в таблицах) — Python, а точнее Python+pandas+numpy+scipy… сила питона в наборе библиотек для работы с данными. С ним уже никто не сравнится (в некоторых местах «ничья» только с R, мой прогноз — Python его съест со временем). Наборы библиотек для C++,Java, и тем более C# не сравнимы. Эта инфраструктура ближе всего к задачам поиска зависимостей и исследованию для трейдинга.
Python подходит для исполнения торговых роботов, но там уже последовательные потоки данных, с ними он справится — но не для HFT, только для данных относительно медленных. Для потоков используются быстрые языки C++,Java,C#.
Исследовать данные на C# или Java на порядок (порядки) сложнее чем на Python. Ещё сложнее на C++. Многословные языки с типизацией. В C# и Java легче чем на C++, так как компилятор берёт на себя некоторые заботы (типа проблем работы с памятью).
Если язык нужен абстрактно, для хорошей базы, C# первым языком не учите. Корни у него слишком проприетарные, это не универсально. Учите C++ (сложно) или Java (легче).
Начинать изучать программирование с относительно редких языков — не рекомендую. Обойдите стороной Golang,haskell,scala ,MQL и пр,
Да, ну и ещё всё забываю приплюсоваться к главной мысли, которую тут высказали пока всего лишь пара человек
— если интересен трейдинг в первую очередь, то надо и вкладываться в исследования и поиск торговых идей в первую очередь. Это прежде всего понимание рынка. Навыки прогерства тут достаточны ровно в том объёме, чтобы понимать, можно л алгоритмизировать это понимание или нет. Для исследований — это питон или (хуже, местами сильно, но активно девелопится и местами имеет крутейшие пакеты) R. Я предпочитаю проприетарный Матлаб. Залез на него ещё до питона и уже не могу слезть, очень уж удобен и быстр)
— если первично прогерство, то начать можно с питона и дальше после минимального понимания процесса в тот язык, что рулит в целевой сфере.
Например, я в основном пользуюсь таким набором: ASP.NET + C# + MSSQL + DevExpress + SSRS.
Из того, что можно использовать более менее это Delphi в связке с си++ для прикручивания разных библиотек и часть кода можно вынести в си++. Но все писать на си++ затея не самая радужная, т. к. в си++ все приходится делать ручками. В си++ мало что есть из коробки в отличие от Delphi/Lazarus и важный код получается быстрым и эффективным.
Ко всему прочему возможности по бесшовному связыванию модулей из разных языков программирования просто огромные.
Александр, в чем проблема "обойти 3 миллиона объектов"? Ни в чем. И при обходе коллекции сборщик мусора вообще никак не используется. Потому что объекты не создаются и не уничтожаются.
Нет, наверное, можно написать настолько криворуко, применить неадекватные типы данных и коллекций (то есть задаться целью написать говнокод) — тогда можно искуственно создать псевдопроблемную ситуацию.
Но тут как в анекдоте:
Подходит джуниор к сеньору и спрашивает: «Почему работает неправильно? Где ошибка?»
Сеньор посмотрел и отвечает: «Ошибка в ДНК».
Александр, это Вам надо «писать тесты и смотреть». Про разные поколения объектов почитайте на досуге.
ПС А если Вам нужны микросекунды, тогда вообще другой разговор. И да, сишарп не подойдет. И даже асм не подойдет. Недавно был интересный пост как человек на FPGA торгует. Вот это — подойдет.
А по с++ погуглите перформанс тесты, их уже больше множество
florent.clairambault.fr/stupid-cpp-vs-charp-performance-comparison/
professorweb.ru/my/csharp/optimization/level3/3_9.php
В идеале все сводится к ручной сборке и большому кол-ву памяти.
Александр, если вы хотите в ручную то используйте offheap. а эти решения делают реальный параллельный GC без задержек на кучах большого объема, ценой некоторого замедления работы с объектами.
1. Есть 2 вида памяти: управляемая и не управляемая. Всегда надо знать, где лежит объект. Для неуправляемой памяти надо еще чистить в ручном режиме.
2. Есть маршалинг. Он свое тоже берет в виде копирования там, где его можно не делать.
3. Не всегда заметны утечки памяти. Слабые ссылки ни кто не отменял. Но об этом тоже нужно помнить.
4. Есть сборщик мусора.
Со с# выстрелить себе в ногу можно очень легко, а вот заметить это бывает достаточно сложно. Для большинства задач с# хватает. Но есть задачи специфические и их лучше решать на си++ или Delphi.
В си++ конечно другие проблемы.
Чтобы в Delphi отследить утечку памяти нужно установить одну переменную и утечки будут всегда видны. А в других языках мне надо с другими инструментами просиживать, чтобы узнать, что я что-то не чищу.
Работаю более 10 лет с C#, и когда мне понадобилось посчитать кое-какую статистику по российскому рынку, я его и ногой не тронул. Проще было взять JavaScript, через REST вытащить с API мос. биржи данные и сделать несколько циклов. Ни тебе парсеров, ни приведение данных, зачем C#?
Вообще NodeJS крайне удобная штука, потому-что очень мощное сообщество и всё делается на коленке из консоли.
Родил сейчас код на VBA под excel (собирался года 3), получил удовольствие. Давно код не писал. Страшно вспомнить сколько лет. :-)
Но для для тестирования стратегий с большим числом параметров и на длинных историях котировок незаменим C++AMP в Microsoft Visual Studio. Он использует графический процессор видеокарты ПК. На моём десктопе от 2012 г ускорение в 33 раза. Правда, каждый уровень ветвления if замедляет в 1.7 раза. Но это самый удобный способ получить супер-компьютер у себя дома.
johnsson08, javascript и lua весьма похожи — динамическая типизация + прототипное программирование, только в одном {/}, в другом do/end наверно это имелось в виду.