Какой язык программирования учить?

★22
ВНИМАНИЕ! КОММЕНТАРИИ ПЕРВОГО УРОВНЯ В ВОПРОСАХ УПОРЯДОЧИВАЮТСЯ ПО ЧИСЛУ ПЛЮСИКОВ, А НЕ ПО ВРЕМЕНИ ПУБЛИКАЦИИ.
Господа, подскажите какой язык учить для написания роботов и чтобы еще пригодился по-жизни. Спасибо
avatar
*Джон Голт*, C# — не прогадаешь.
avatar

*Джон Голт*, не язык нужно учить, а рабочие стратегии искать.

Программируют пусть программисты.

Вам нужен минимум языка и максимум математики.

*Джон Голт*, в целом для автоматизации торговли не требуется знания  языков программирования. ПО представленное на рынке позволяет писать внутредневные стратегии с использованием скриптовых языков (в Tradingview это PineScript, в TSLAB-встроенный визуальный редактор).
Если же Вам интересен HFT  и прямой выход на биржу, то здесь однозначно имеет смысл учить c#. Так как все  биржевые библиотеки преимущественно адаптированны под него. Да и без работы в дальнейшем не останетесь так как многим брокерам требуется именно спецы со знанием с#(так сложилось именно в российской брокерской индустрии).
Для максимальной экономии денежных средств советую обратить внимание на  сайт там выкладывают крутые курсы по различным языкам программирования абсолютно бесплатно.
В целом вектор развития я вижу следующий:
1.Изучение синтаксиса С#
2.Основы ООП
3.Структуры данных (коллекции, массивы и т.п.) и многопоточность
4.Пилишь первое приложение: 
Как вариант простой робот с использованием сторонних библиотек и 
прямое подключение к серверу брокеру например через библиотеку Алор Atentis
5. Далее изучить GIT, но и какие-нибудь популярные фреймворки+работа хотя бы с одной базой данных (например MySQL), но это уже чисто для трудоустройства.
Советую почитать ещу мой пост:https://smart-lab.ru/blog/496838.php/
avatar
ANTI_Finsov, 
имеет смысл учить c#. Так как все  биржевые библиотеки преимущественно адаптированны под него.
на РФ ни одна библиотека, сделанной биржей, не адаптирована под c# =)
avatar
Андрей К, я имею ввиду внутренние библиотеки брокеров все на си шарп пишутся: Альфа Алор и т.о. Знаю не понаслышке. Что касается прямого выхода на биржу минуя брокера это уже отдельная тема. Но я считаю если чувак хочет создавать роботов и потом трудоустроится с#  то, что надо.
Только в Алоре сейчас три вакансии весит на эти позиции.
avatar
ANTI_Finsov, 
Только в Алоре сейчас три вакансии

Если интересно. Я за вакансиями в нашей сфере слежу с 2015 года. Распределение примерно такое по требуемым специалистам:
  — если западная контора, то обязательно java
  — если трудиться на РФ, то Cи
  — если дата аналист, то питон/R.

Шарп требовался один раз БКС'у под статистический арбитраж. И постоянно требуется Банку Санкт Петербург в отдел алго.

А Алору шарп нужен для околобиржевых целей.

avatar
английский
avatar
Alexander, опередил
avatar
Не слушайте тех, кто советует С и тем более С++.

С отличный язык, но если вы не знаете, зачем он вам нужен — выберите альтернативы, на которых получение результата быстрее.

Современный С++ — прекрасный язык (и всегда был им). Думаю, что самый мощный и эффективный из существующих; на нём можно делать вообще всё, что поддерживает процессорная архитектура. Но, во первых, правильный путь его изучения — с ассемблера, а, во вторых, — его гибкость и мощность имеет дорогую цену — он очень сложен и труден. Нет, если использовать «С с классами» это ещё куда ни шло, но это детский сад, пол процента силы плюсов.
Я так или иначе использую его уже больше 20 лет, но только сейчас начинаю понимать, почему Страуструпп (изобретатель и по прежнему активный развиватель С++) говорил: «я постоянно узнаю что-то новое об этом языке и его возможностях». Для новичка это означает нетленное «верёвка достаточной длинны, чтобы выстрелить себе в ногу».
Хотя, если понимать что там к чему, то можно, например, написать бэктестер, который будет работать на полтора десятичных порядка быстрее уже и так векторного (а значит очень быстрого) бэктестера AmiBroker ;)

зы: из перечисленных вариантов ещё не лезьте в паскаль/дельфи — мертворожденные изначально и, к счастью, уже почти вымершие языки.
Питон — самое то для новичка. Может ещё С#.
Java — только если очень надо безусловная кросплатформенность.

А вообще — решайте свою задачу. Язык — всего лишь инструмент, один из многих. Не надо на нём циклиться, решение задачи — первично.
avatar
johnsson08, Так раньше в школах к которых были х486 только Паскалю учили, в учебном заведении тоже с Паскаля потом дельфи типа для написания БД, ну и давали С посмотреть, в 2000-х годах учился не на программиста, а на технаря, пришлось ассемблер самостоятельно изучать, а потом С и С++ т.к. это была не исполненная студенческая мечта.

Да языка мало, главное научиться формулировать задачу и перенести на алгоритмы, которые уже реализовывать на конкретном языке прогр., можете посоветуйте книжки где учат задачу разбить на алгоритмы. Книжка про фундаментальные алгоритмы на С++ (Роберт Седжвик) есть с примерами сортировки, поиска, алгоритмы на графах. 
Владимир Гончаров, да… считалось, что паскаль имеет какие-то волшебные качества, которые якобы помогают студенту что-то там лучше усвоить. Чушь это всё человеконенавистническая. От того, что студент вынужден писать begin вместо открывающейся скобки и end вместо закрывающей он лишь возненавидит идиотов-формализаторов, и только...

Я тоже, как и Вы в начале нулевых в ВУЗе учился, тоже не программер по основной специальности.

Про алгоритмы… Скажем так… Если интересует алгоритмика в своего рода классическом понимании (сферического коня в вакууме — моё оценочное суждение), то это наверное в сторону знаменитого трёхтомника «искусство программирования» Дональда нашего Кнута. Считается едва ли не классическим трудом, миллион переизданий и я не слышал ни одного плохого слова от тех, кто её таки осилил. Но… У меня, например, этот трёхтомник занимает уже лет 17 почётное место на полке, но за всё это время он мне так ни разу и не понадобился. Наверное зря, но как-то пока потребности не было.
Реально крайне помогло в практической работе две вещи — 1) желание и интерес докапывать до причин проблем и неэффективностией реализованных алгоритмов, и 2) изучение шаблонов проектирования и самое главное — причин, которые стояли за изобретением этих шаблонов. Потому что правильно применять можно только понимая, зачем оно нужно. Конкретных книг не подскажу. То, что я читал — уже давно не купить, да и описание с первого взгляда устарело, хотя суть не поменялась. За новыми книгами не слежу...
Вообще — начать можно и с википедии (скорее английской) и самое главное — practice-practice-practice.
avatar
johnsson08, хоть название книг и авторов?
Владимир Гончаров, ну, хорошей на то время была «Применение UML 2.0 и шаблонов проектирования / Введение в О-О анализ, проектирование и итеративную разработку» Крэг Ларман, 2007, ИД «Вильямс».
Ещё запомнилась «Принципы работы с требованиями к программному обеспечению. Унифицированный подход», Дин Леффингуэлл, Дон Уидриг, 2002, ИД «Вильямс» — это не про алгоритмы, но про то, как понять, какую систему вообще нужно создать. Тоже, собственно, важнейшая часть дела. Описанные методы сейчас уже в лоб могут считаться малость устаревшими, но суть 100% актуальна и применима. Сейчас стали чётче понимать, что ничего наперёд полностью и точно спроектировать невозможно, надо двигаться гораздо меньшими итерациями. Но в любом случае, нужно понимать/разработать генеральный план и внутри итераций — почти всё то же самое…
avatar
johnsson08, с с классами — мощь! и длл сделать можно и логику хорошо прописать. Так что вполне себе хороший вариант. С с классами лучше чем с чистый.
avatar
tranquility, да, согласен, чо уж. Но шаблоны — вот это реальный отрыв бошки. Там такие вещи можно делать, что просто ваще. Я иногда думаю, что не тот язык назвали BrainFuck))) Но когда понимаешь что там к чему — просто фантастика.
avatar
johnsson08, всё правильно пишешь. так и есть.
Автор, надо всё таки разделить: «для написания роботов» или для «пригодился по жизни»?
Если тебя интересует только алготорговля то бери специализированные среды типа TSLab. А если ты хочешь стать программёром и работать кодером на компашку, то это совсем другая тема.
avatar
Kapeks, TSLab бабки стоит, а программирование с нуля хотя бы мозги развивает)
avatar
johnsson08, может быть вы сможете порекомендовать толковую литературу или тематические ресурсы по изучению С++ ? 
avatar
AAA
Ed Ward, не знаю...

дисклеймер: я очень давно в этой теме и могу ошибаться, выдавая то, что отлично работает для уже что-то знающего, за то, что сработает у новичка.

Я вообще сомневаюсь, что можно научиться делать что-то сложное, если только читать книги и смотреть, как это делают другие (даже если они при этом всё прекрасно объясняют).
Лучше берите новую задачу, или старую для нового решения, и ищите и пробуйте, как бы её наиболее правильно и эффективно решить на нужном языке. Разбирайтесь в деталях, пытайтесь использовать ранее неизвестные вещи, кажущиеся подходящими и полезными (сначала из хороших библиотек, типа STL, boost, ну и далее что найдёте). Смотрите, как другие люди решали похожие или другие задачи (есть куча хороших опен-сорсных проектов на любой вкус), попробуйте разобраться, почему они это делали именно так, а не иначе...
Собственно по нюансам языка есть отличные родные документации, ещё больше написанного энтузиастами. Просто гуглите...
Но сначала лучше подумайте, а точно ли вам С++ нужен)))
В любом случае, Learning by doing, — иначе, мне кажется, это не работает…
avatar
johnsson08, Благодарю за развернутый ответ !)
avatar
AAA
johnsson08, мертворожденный не может умереть через 30 лет. Они перерождается )
avatar
johnsson08, я бы не сказал, что С/C++ сложный. А вот громоздкий это да. И еще все сложней находить по нему готовый код(чтобы не изобретать велосипед), в основном весь гугл заполонили примеры на шарп, пайтон, джава.  
avatar
chizhan, это C++ не сложный???
Хорошо, что делает следующая программа? 

#include <cstdlib>
#include <iostream>

int main() {
	return [f{[](auto... args) {
		((std::cout << "args: ") <<
			... <<
			(std::to_string(args) + ", ")) <<
			"sum: " << (0 + ... + args) <<
			", num: " << sizeof...(args) <<
			std::endl;
		return EXIT_SUCCESS;
	}}] {
		return f(7, 3, f());
	}();
}
Ну, ведь, C++ же несложный? 

То, что она что-то делает, убедиться, а также поэкспериментировать можно здесь.
avatar
Unworldly, есть такое) Тогда нужно уточнить: бывает сложным, когда разбираешь чужой код. 
avatar

johnsson08, 

из перечисленных вариантов ещё не лезьте в паскаль/дельфи — мертворожденные изначально и, к счастью, уже почти вымершие языки.


Не понял, чо за наезд :)
avatar
Turbo Pascal, Delphi/Lazarus почему все убивают постоянно, как Кенни в Южном Парке. Но он все еще живой. Чем больше я изучаю других языков, например си++, с# тем больше нравится Delphi. Особенно это касается си и си++. Хотя Delphi есть свои проблемы, но возможности по связке различных технологий просто безграничны.
avatar
Александр, а вы на какой версии делфей?
avatar
Андрей К, Пока Delphi XE10.2.3, Rio — сыровата.
avatar
Александр, паскаль жесток и прямоуголен, как немецкий язык. Я не понимаю такие языки, как питон или пхп: вольная типизация и много двусмысленностей в коде. Паскаль этого не допустит.
Недаром многие научные проекты, начиная с 90-х годов, пишут на Паскале. Так что в своей нише он сидит, и что-то никак не сковырнут его.

Хотя, скажу честно, я уже все больше предпочитаю C#. Они чем то похожи.
avatar
johnsson08, В си++ придется все делать ручкам, ножками и головой. В общем не все прекрасно в си++. К слову говоря это фиерический язык, порядок include меняешь и начинает все компилировать. К тому же не удобно.
avatar
C
C++
C#
Fry (Антон), Спасибо
avatar
*Джон Голт*, ещё спецы по датамайнингу и статистике говорят, что очень помогает R, но меня дико ломает в нём разбираться. Так что и советовать не могу. Но его так хвалят, так хвалят =/
Fry (Антон), интересно, а зачем Вам сейчас С ?
Где его можно использовать сейчас?
avatar
_sg_, :) вся автопромышленность на С, медецинское оборудование… Системы управления чем не попадя… все на C. C++ если у вас там вдруг QNX или Linux запустился. 
avatar
Denis,
сейчас для озвученных Вами сегментов  ВЕЗДЕ используется КОДОГЕНЕРАЦИЯ. 
И программы пишутся в лучшем случае на языках более высокого уровня с последующей выгрузкой исполняемого кода на ЛЮБОМ языке для ЛЮБОЙ платформы, в худшем используются  кросс-средства.
Только очень «гордые птички» пишут все на С, не зная современных технологий программирования. 
avatar
_sg_, не буду с Вами спорить, Вам конечно виднее. %)
avatar
_sg_, если бы так. Даже джваву не везде можно запустить. Вернее запустить можно но например интерфейс отрисовать уже нельзя
avatar
_sg_, кодогенерация это тоже самое что машинный перевод, безалкогольное пиво или резиновая женщина. Код должен быть ровно такой, какой он задумывался программистом. 
avatar
_sg_, 
Где его можно использовать сейчас?
Там где линукс. А линукс проник глубоко уже =)
avatar
Андрей К,
для Linuх лучше использовать Java.
Для использования С++ необходим достаточный опыт программирования.
avatar
_sg_, 
для Linuх лучше использовать Java.
для desktop приложений наверное?
avatar
Андрей К, 
на треклятом Западе раньше (до 2008-10 гг.) Java + Oracle  являлся корпоративным стандартом. Хотя там очень много профессиональных «Плюсовых» — «Крестовых» команд было. А где-то с 2005-7гг начали уже появляться серьезные проекты на .Net. Сейчас не знаю как там, не отслеживаю.
avatar
_sg_, затем, что многие вещи проще делать в процедурной парадигме и сегодня и завтра и всегда. Начинать осваивать программирование вообще целесообразно с ассемблера, не для того чтобы на нём писать программы, а для того чтобы понять природу абстрактных вещей в ЯВУ (ссылки, типы, ограничения и т.п.). Но я не предлагаю с асма начинать, просто потому что это довольно муторный и долгий путь получится, хотя сам именно так и двигался.

А если отвечать конкретно на ваш вопрос: например в MT5 можно кодить читая у Страуструпа только общее описание базовых конструкций языка. Совершенно не обязательно при этом очень уж глубоко изучать стандартную библиотеку, что по сути и есть самое сложное в освоении С++ и самое большое отличие от нейтив Си.
1. Начинайте с простых вещей. Python — отличный выбор, не прогадаете точно.
2. По мере необходимости добавляем постепенно С# для Windows Приложений, и Java для Linux. Они похожи, так как С# изначально содран с Java
3. Предыдущих 2-х пунктов вполне достаточно.
Но если хочется «погорячее» изучите еще С++.
Здесь Вы с лихвой получите большой опыт и огромное удовольствие от борьбы с Memory Leak, а все Ваше время будет тратится на «поиск пропавших указателей». Но зато Вы будете себя чувствовать крутым специалистом.
4. Но языки это всего лишь пол-дела. Изучайте технологии программирования, фрейморки, платформы, паттерны проектирования. Одного языка недостаточно.
5. Желаю успеха.
avatar
_sg_, спасибо
avatar
_sg_, если утечки памяти вы называете проблемой, то вы не знаете С++))
Но вы однозначны правы, что в С++ не надо лезть без чёткого понимания, зачем это надо. Язык действительно сложный.
avatar
johnsson08, 
мягко скажем «неконкурентное» время разработки проектов,
и далее, maintance и support больших распределенных проектов сводят на нет все прелести этого языка.
avatar
_sg_, Да, это имеет место быть. Но вот только проблема в том, что если надо, чтобы работало очень быстро, в общем случае альтернатив плюсам просто нет.

Сейчас в погоне за скоростью разработки (что, кстати, часто сопровождается низким качеством даже не проработки — банального продумывания кода) дошли до того, что даже простой интерфейс (сраный интерфейс!!!) начинает заметно тормозить. Пример — качалка котировок Гидра из S#. Что уж говорить про тормознутость основной бизнес-логики...
В результате продукт собираем на коленке из говна и палок быстро, но вот только пользоваться им нельзя/проблемно. Ближайший исторический (и уже почти вымерший — вот странно?) аналог — дельфи, хоть там не столько с производительностью проблемы были, а с косячностью стандартных библиотек, но суть проблемы та же.
avatar
johnsson08,
аналог — дельфи, хоть там не столько с производительностью проблемы были, а с косячностью стандартных библиотек,

 Делфи умер после покупки его Майкрософтом. Майкрософт его купил как конкурента и похоронил после шестой версии. Отличная среда, прижившаяся в СНГ.
avatar
Андрей К, МС не причём. Дельфи был мертворожденный изначально… С таким качества стандартного кода и кодогенерации это вообще чудо, что он столько смог. Я не видел ни одного (ни одного!) продукта от простейших поделок до продуктов самого Борланда и смежных ему контор, которые бы не были бы тупо глючными…
avatar
_sg_, во вот языка мало, нужно логику работы программы уметь писать в голове и знать ООП.
Вы не сказали для чего.

Наиболее универсальный язык в задачах работы с непотоковыми данными (обработка данных в таблицах) — 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 и пр,

avatar
Ромирес, C# уже давно стал кроссплатформенным. Тем более теперь, когда коммьюнити добила майкрософт и «заставила» его начать активно работать в направлении ".NET для Linux". И мобильные платформы тоже насколько знаю уже давно поддерживаются.
avatar
Ромирес, всё верно, плюсую ко всему (увы, виртуально, реально не пущают)

Да, ну и ещё всё забываю приплюсоваться к главной мысли, которую тут высказали пока всего лишь пара человек
если интересен трейдинг в первую очередь, то надо и вкладываться в исследования и поиск торговых идей в первую очередь. Это прежде всего понимание рынка. Навыки прогерства тут достаточны ровно в том объёме, чтобы понимать, можно л алгоритмизировать это понимание или нет. Для исследований — это питон или (хуже, местами сильно, но активно девелопится и местами имеет крутейшие пакеты) R. Я предпочитаю проприетарный Матлаб. Залез на него ещё до питона и уже не могу слезть, очень уж удобен и быстр)
если первично прогерство, то начать можно с питона и дальше после минимального понимания процесса в тот язык, что рулит в целевой сфере.
avatar
C#
avatar
ch5oh, а какие библиотеки используете?
avatar
Dmitryy, для чего использую? Их как бы дофига. Только надо открыть глаза и спросить гугл.
avatar
ch5oh, в данном контексте, я имел ввиду фин рынки) Вы насколько я успел заметить опционщик, стало любопытно какими инструментами пользуетесь.
avatar
Dmitryy, 
Вы насколько я успел заметить опционщик, стало любопытно какими инструментами пользуетесь.
можно скачать ТСЛАБ, установить, зайти в его директорию и посмотреть все Net библиотеки. Подозреваю ch5oh этим и пользуется =))
avatar
Андрей К, не уверен, я лично очень настороженно отношусь к таким инструментам, не факт, что они считают всех греков правильно :)
avatar
Dmitryy, так ch5oh имеет к нему прямое отношение =)
avatar
Андрей К, я тут новенький, не в курсах был, спасибо))
avatar

Dmitryy, =) недавно делал отдельный пост. Как раз про расчет дельты.

"Куда в опционах пропадают деньги?"

avatar
Андрей К, пользуюсь TSLab, конечно.

А декомпилляция библиотек — это уже знаете как называется? =) Ну, Вы поняли.
avatar
Dmitryy, пользуюсь TSLab. Там вся опционная математика сделана как надо. Пригодных для торговли опционных бибилиотек не встречал в открытом доступе.
avatar
На каких биржах торговать собрались? У криптовалютных обычно RESTful и/или WebSocket API — тут разумно начать с Python, т.к. в языке много «батареек», в том числе (особенно) и для анализа данных.

У более стандартных бирж обычно более изощрённые протоколы передачи информации.

Если через Quik, то можно начать с Lua (QLua), а потом попробовать C# — на C# написана неплохая обёртка QuikSharp.

Дроч на перформанс оставьте задротам. Иначе быстро выгорите, занимаясь не пойми чем, вместо апробации разных торговых гипотез.
avatar
учите программирование — а не язык. Если научитесь программировать, то сможете писать на любом языке. Язык это инструмент, нужно умение сначала.
avatar
А кто подскажет на чем можно сделать сборщик новостей с сайтов. :-)
Нужно подключаться к дисклозер, поиском искать новости по компаниям и в тексте (заголовке) новости ключевые слова. И мигать об этом в трее или там на почту слать. :-)

П.С. Писал на С++ в свое время — не хватило ума. :-) Три дня ушло на программу хелло ворлд. :-) Написал тогда с грехом пополам почтового клиента, ухайдокал месяца 2 в совокупности. Потом сборщик разной лажи с сайтов в базу данных делал (забыл сколько времени, но тоже не быстро). С++ он для профи. Маршаллинг все дела. :-)

Не знаю какие сейчас есть языки. Раньше мелкие поделки делал на паскале, дельфи, бейсике, ассемблере, shell, awk,php, sql, basic. Именно мелкие, т.е. бытовуху или что-то поправить.

В общем дайте, плиз, совет, под мою задачу в какую сторону лучше копать. :-)
avatar
Евгений Петров, в сторону того что знаешь, или можешь изучить за небольшой срок.
Java — не просто язык, это целый огромный конгламерат инструментов фреймвоков технологий и т.п. и т.д. куда порог вхождения очень и очень высокий и с бухты барахты не прокатит.
avatar
Евгений Петров, это называется парсер сайтов и работа с get/post запросами. На Си естественно это крайне тяжело. Парсить и делать запросы очень удобно на шарпе. Я смартлаб парщю через шарп под линуксом
avatar
Евгений Петров, для вашей задачи подойдёт JAVA в связке с драйвером Selenuim, либо Phantom JS.
Есть шикарный курс на эту тему всего лишь 14 часов. Бесплатно.
https://coursehunters.net/course/selenium-webdriver-java-dlya-nachinayushchih
avatar
Евгений Петров,
ruby.bastardsbook.com/chapters/html-parsing/
avatar
Евгений Петров, 
А кто подскажет на чем можно сделать сборщик новостей с сайтов. :-)Нужно подключаться к дисклозер, поиском искать новости по компаниям и в тексте (заголовке) новости ключевые слова. И мигать об этом в трее или там на почту слать. :-)

В питоне всё это делается легко, парсить сайт, искать ключевики. Т.е. реально все ингредиенты есть, просто нужно их состыковать. Программка будет на страницу кода.
avatar
Megasum, а если нужна штатная рилтаймовая календарная аналитика, то она есть в MQL5 в виде CalendarXXX функций:

CalendarCountryById

Получает описание страны по её идентификатору

CalendarEventById

Получает описание события по его идентификатору

CalendarValueById

Получает описание значения события по его идентификатору

CalendarCountries

Получает массив описаний стран, доступных в Календаре

CalendarEventByCountry

Получает массив описаний всех событий, доступных в Календаре, по указанному коду страны

CalendarEventByCurrency

Получает массив описаний всех событий, доступных в Календаре, по указанной валюте

CalendarValueHistoryByEvent

Получает массив значений по всем событиям на заданном диапазоне времени по идентификатору события

CalendarValueHistory

Получает массив значений по всем событиям на заданном диапазоне времени с фильтром по стране и/или валюте

CalendarValueLastByEvent

Получает массив значений события по его ID c момента состояния базы Календаря с заданным change_id

CalendarValueLast

Получает массив значений по всем событиям с фильтрацией по стране и/или валюте с момента состояния базы Календаря с заданным change_id


Календарь является штатным фидом в любом MetaTrader 5:

avatar
 Учить надо не отдельный язык, а стак: полный набор технологий для получения продукта/результата.
Например, я в основном пользуюсь таким набором: ASP.NET + C# + MSSQL + DevExpress + SSRS.
avatar
я бы так сказал: значения не имеет

надо брать и начинать программировать

на чем угодно

хоть на php для начала


Тимофей Мартынов, в чем тайный смысл тратить время на то, что априори не пригодится?
Изучить азы? Так они хорошо изучаются на любом языке.
avatar
VladMih, code never lies
avatar
Тимофей Мартынов, скажи честно, ты же сам сайт написал?
avatar
Oleg Only Algo, неа

Расскажу чисто на отвлечься.  У меня дочь растет, мы ее развиваем по методе раннего развития. Сейчас у нее очень сильно развито мышление, логика и все сопутствующее.

Начинаю подумывать, что если собеседование с психологом подтвердит, то начну ее готовить к программированию. Но не классическому, а уже к робототехнике, уверен за этим будущее. Поэтому выберу простой Си для начала.

avatar
Андрей К, а сколько лет?
avatar
AlexeyTikhonov, скоро 3
avatar
Андрей К, Вы что с ума сошли (3 года)-- не лишайте ребенка детства!!!
avatar
Михаил Prozz, а я ее не заставляю =) у нас все в играх, ей самой вдоволь. Я для нее игры придумываю, чтобы цифры и буквы запоминать, ей весело.
avatar
Андрей К, Это правильно и хорошо, а про психологов забудьте(шарлатаны).
avatar
Михаил Prozz, да у меня жена подсела еще до рождения. На канал психолога. Я относился скептически, только отстегивал на соответствующие игры для развития (ну что то типа кубики Никитина и тд)… а сейчас пару лет прошло и я понял, что все эти вложения окупили себя более чем. Ребенок развит на голову сильнее сверстников. Поэтому я морально уже созрел заплатить пятнашку на собеседование, чтобы выявить направление развитие ребенка 

я на себе понял, что человек должен заниматься любимым делом. Так пусть он занимается этим с детства уже.
avatar
Андрей К, Направления развития будут определяться к 8-10 годам, а у девочек направление развития к 14-15 годам сведется сами знаете к чему.  Знакомые репетиторы по физике и математике удивляются — гениальные девочки после  летних каникул 9 класса кроме ногтей ресниц и платьев ни чем думать не могут. Это жизнь и это нормально.
avatar

Поэтому выберу простой Си для начала.


Андрей К, C — не простой.

Вот «простой» код на C:


void (*f(void (*(*const f)(void))(void)))(void) {
	return f();
}

И что он делает?

Что это вообще такое?

Ну, ведь, просто же должно быть ответить на этот вопрос, C же простой. 


Ну, хорошо, добавим ещё одну функцию, которая пользуется первой:


void (*f(void (*(*const f)(void))(void)))(void) {
	return f();
}

void ff(void (*(*const ff[])(void))(void)) {
	while (*ff) {
		f(*ff++)();
	}
}

Что тут происходит? 

А, ведь, всё тот же «простой Си». 


Вот тут «простенькая» программка, которая компилируется и запускается online, выводит результаты. Можно поредактировать и поэкспериментировать.

Программка на «простом Си»... 

avatar
Unworldly, не, ну в робототехнике такие конструкции не нужны =)))
avatar
Андрей К, ну, за робототехнику не скажу, но нейросетки пишу на C#. Нормально.
Питон не понимаю — я программист старой школы (очень старой).
avatar
Turbo Pascal, 
ну, за робототехнику не скажу, но нейросетки пишу 
arduino, altera, xilinx — это немного про другое. То есть совсем про другое. Там кроме языка, нужно еще электронику чуть понимать.
avatar
Turbo Pascal, питон — сакс. =)
avatar
Unworldly, не, ну в робототехнике такие конструкции не нужны =)))

Андрей К, лет 30 назад ещё можно было знать «всё» программирование. Сейчас — жёсткая специализация.

В робототехнике также специализироваться нужно уже сейчас, не говоря о том, что будет через 20 лет.
avatar
Unworldly, 
В робототехнике также специализироваться нужно уже сейчас, не говоря о том, что будет через 20 лет.
у меня дочери три года, у меня еще года 4 есть самому вникнуть =)) пока сам на ардуино балуюсь механизмами.
avatar
Eugene Logunov, R пригодится и для жизни, даже без связки с data scientist, вернее для кухонного data scientist — есть какая то локальная домашняя задача, что-то прочитать, обработать, преобразовать, построить веселые картинки и прочее, идеальное решение.
avatar
Выскажусь по поводу языка программирования :). В современном мире я бы сказал, что си знать полезно что бы понимать базовые принципы работы и конечно же если профессионально работаете с любыми электродевайсами на низком уровне. А вот для роботов я бы взял c# или python. С питоном все куда проще, очень востребован в ML и дадасайнс.
В противовес любому из классических языков, можно параллельно смотреть на функциональные языки, так как там все иначе :).
Java тоже не плохо, и с ним же яваскрипт фреймворки для веба.. 
p.s. ежели взращивать программиста с молоду и не для роботов… то понимание как работает железо, память и т.д. на низком уровне просто необходимо в независимости от языка :). 
avatar
Denis, спасибо, я в этом вопросе полный 0. Пытаюсь понять с чего начать
avatar
Denis, так, может, вы, сударь, окажете любезность, добавив пару ссылок на хорошие самоучители.
avatar
Иван Боженков, к сожаление я не имею ни малейшего понятия о самоучителях ), поищите в гугле.
avatar
Denis, Точно, а то я там не искал. Там же только введешь. Изучить язык… и сразу же для чайников ссылка. На держи, учись, дескать. )) Благодарю за дельную мысль.
avatar
Иван Боженков, ну стоит понимать, что у всех разный уровен подготовки. Если мне надо что то реализовать на том языке котрый я не знаю, я просто ищу как это сделать.
попробуйте курсеру или датакэмп…
avatar
Denis, 
то понимание как работает железо, память и т.д. на низком уровне просто необходимо в независимости от языка :). 
и это наверняка точно не питон и не c# =)
avatar
Андрей К, питон сейчас очень популярен во многих областях, но тут как говориться вам шашечки или ехать :). Роботов на питоне писать удобно, он прям очень подходит для анализа данных, там миллион пакетов, можно сосредоточится на реализации идеи, исследованиях, не заморачиваясь о какой то мелкой реализации какой нить функции. Поэтому я его и посоветовал. 
Все остально, сказанное о более грубоком понимании работы процессора, памяти, шин передачи данных, вам может и не надо ), время сейчас очень дорого, и сосредоточится именно на вашей цели куда более важно, нежели пространно изучать программирование. 
avatar
Denis, 
Роботов на питоне писать удобно, он прям очень подходит для анализа данных, там миллион пакетов, можно сосредоточится на реализации идеи, исследованиях, не заморачиваясь о какой то мелкой реализации какой нить функции
вот я теперь опять питонистам начал завидовать =))
avatar
Denis, Ассембре очень помогает понимать как работают указатели и как работает память. Мне очень помог изучить С++ но дальше дело встало т.к. нет знания англ., а библиотеки и мануалы к функция С++ требуют англ. + непонимание зачем мне это надо.
Владимир Гончаров, то есть плюсы вы изучили через асм? оригинальный подход =))
avatar
Андрей К, 
> плюсы вы изучили через асм?

Зря смеётесь. Это как раз самый правильный подход. Сначала Асм, а потом С/С++. Когда понимаешь, что там происходит под капотом, вообще никаких проблем не испытываешь с пониманием нюансов языка. А вот те, кто не знает асма очень часто попадают в разные проблемы на этих языках.
avatar
johnsson08, 
 Когда понимаешь, что там происходит под капотом, вообще никаких проблем не испытываешь 
может, говоря «под капотом», вы имеете ввиду знание архитектуры компьютера и процессов, а не асм?
avatar
Андрей К, и это тоже, но в первую очередь — собственно асм. Потому что именно посредством асма и ничего иного и осуществляется взаимодействие с архитектурой, процессором и всем остальным. Грубо говоря, Асм — это окно туда. И в конечном итоге именно асм исполняется процессором, а не С/С++/Java/Python и т.д.
avatar
johnsson08, да но асм это все равно удобочитаемый для человека язык где все равно есть абстракция понятная человеку.
Вы ошиблись:
И в конечном итоге именно асм исполняется процессором, а не С/С++/Java/Python и т.д.
Исполняется машинный код на процессоре, а не «асм исполняется процессором» (хотя может понятия асм у нас разные), откомпилированный код будет хоть на С/С++/Java/Python одинаковый в «теории», сам не проверял.
Владимир Гончаров,

> Исполняется машинный код на процессоре, а не «асм исполняется процессором»

Нет никакой ошибки. Отображение между асмом и машинным кодом практически биективное. Т.е. говоря проще Асм этот тот же машинный код, просто в более простом для понимания человеку виде. Когда я активно занимался реверсингом, в ряде случаев мне даже дизассмеблера не было нужно, чтобы понять, что делает программа))

«Практически» было написано потому, что интел по какой-то причине сделала возможность разного кодирования одинаковых инструкций, плюс некоторые битовые поля были описаны как неиспользуемые, игнорируемые или зарезервированные. В принципе, если не быть дотошным или не лезть в конспирологию зачем это было сделано, то можно считать биекцию точной.

avatar
Андрей К, я так понимаю логику работы программы Высокого уровня на языке Низкого уровня, т.е. один и тот же машинный код можно написать этими разными языками, но на языке низ. уровня можно отследить ошибки не видные на Высоком уровне. Встраивания в код высокого уровня, код на асб, отлаженный можно оптимизировать софт. + знание работы с памятью и т.д.
Андрей К, я еще в учеб. заведении хотел его изучить, но он не дался с разу. И он помог при изучении С++
Eugene Logunov, в целом с Вами согласен, но я бы заменил С++ на С#.
Java/C# — хороший выбор.

avatar
Delphi конечно же
Eugene Logunov, 
на локальную переменную, почему записав что-то за пределы массива можно испортить адрес возврата из функции, cache locality и как он влияет на производительность, зачем нужны intrinsic'и и т.д
опять же, как и вопрос выше, это же помогло вам не знание асма, а знание архитектуры. Можно же пользоваться современными отладками типа gdb, valgrind, интел профилятор, не зная асма.
avatar
Eugene Logunov, 
но когда я выискивал баг в аллокаторе памяти Intel TBB
чисто ради интереса, потоки в роботе? 
avatar
Андрей К, 

> потоки в роботе? 

А что не так? Как только у вас появляются минимально тяжелые алгоритмы, вам деваться некуда. Один высокопроритетный поток должен выгребать поступающие данные и быстро реагировать на иные внешние события, остальные в бекграунде уже делают основную работу…
avatar
johnsson08, 
А что не так? Как только у вас появляются минимально тяжелые алгоритмы, вам деваться некуда. Один высокопроритетный поток должен выгребать поступающие данные и быстро реагировать на иные внешние события, остальные в бекграунде уже делают основную работу
это не для всех алго подойдет, я так думаю. Например синхронизация ядер через L3, мне уже не подходит. Уже очень долго. А если заюзать какие нибудь общие очереди из разряда TBB, то уже вообще ни в какие ворота, накладки порядка 250-300 наносек. Ну ладно бы еще за 50 уложиться. Я смотрел даташид L3 intel core процов, они просто не умеют так быстро. Там тайминги активирования ячеек долгие.
Но даже если проходить по скорости синхронизации ядер/потоков, то встает вопрос, что такие конструкции портят L1 постоянно. И получаем, что в момент посылки заявок, мы имеем гору промахов по L1, а это совсем недопустимо. Поэтому я очень бережно отношусь к такому и забочусь чтобы во время заявок все необходимое в 95% случаев всегда сидело в L1.
Вообщем разные алго бывают =). Задавая вопрос, мне было интересно, где заюзали TBB и как оно пошло. Может что то поменялось. Вон лекторы из Mail.ru, заюзали такое в Яндекс Навигаторах при расчете маршрутов =)
avatar
Андрей К, ну когда у вас требования по памяти превышают L1-L2, вам деваться всё равно некуда. И так и сяк не влезет. Какая уж там разница из-за чего...

TBB кстати и правда медленный. Я не знаю почему его расхваливают (наверное, потому, что готовый и ничо делать не надо), но даже на примитивах стандартной библиотеки у меня всё работало заметно живее. Если забить на кроссплатформенность и пойти на native api, будет совсем хорошо.
avatar
johnsson08, 
ну когда у вас требования по памяти превышают L1-L2, вам деваться всё равно некуда.
не, ну там всякие штуки есть, чтобы уложиться. Прогнозирование. Либо принудительное кеширование нужных переменных нон стоп, либо принудительное кеширование следующего куска массива в пределах кеш линии, ну и тд.

В принципе метода простая. Врубается vtune, подрубается к процессу и начинаешь логировать промохи по кешу и смотреть чего и как. Но это все про линукс, там в gcc есть масса оберток готовых всяких хороших asm инструкций (в том числе и принудительное кеширование областей памяти).

Как оно в винде, черт его знает.
avatar
Андрей К, всё равно это всё зависит от объёма данных и конкретных алгоритмов. Почти всегда, по крайней мере в моём опыте, чем усложнять алго (а это проблемы отладки, поддержки, переноса на новую архитектуру и т.д. и т.п., короче, много подводных камней) гораздо проще и разумнее всё просто раскидать на разные потоки и пусть работают себе спокойно.
avatar
Андрей К, у Вас HFT? Если да, то какой выхлоп за прошлый год (нули, проценты, whatever)? Если секрет, можете не отвечать.
avatar
Enfernuz, после апреля как у всех — никак. Вола нужная есть, объемов нет. Чтобы брать оставшиеся объемы, надо чуть быстрее крутить педали =). Стаканы пустеют, колокейшен пустеет на глазах говорят. Все короче плохо у всех.
avatar
однозначно питон
avatar
Нейролингвистический язык программирования :)
avatar
Вам подойдёт язык Ада.
Если не в жизни, то после неё точно пригодится…
avatar

Scala (!)

 

avatar
Язык учить для чего ?
Что то программировать ?
Наверно что то полезное или мозги размять ?
Если что то полезное то в одиночку или с кем-то ?
… и еще куча вопросов.

Вообще Scala рулит, потому что несмотря на некторые изъяны переходить на что то другое уже не хочется.
avatar
питон
avatar
Lop
Eugene Logunov, нет лучше. 
avatar
java и 1с-овский, деньги в кармане точно будут.
avatar
Кстати, ребята, хочу сказать спасибо за тему. :-)
Родил сейчас код на VBA под excel (собирался года 3), получил удовольствие. Давно код не писал. Страшно вспомнить сколько лет. :-)
avatar
Я с понедельника Phyton начинаю изучать. Универсальный язык, вот только насчет роботов как он, пока не знаю.
avatar
Andrey Z, а по каким ресурсам начинаете изучать?
avatar
Иван Боженков, Ресурсов много. Я конкретно, с понедельника на платный 6ти месячный курс записался от Skillfactory. Это не реклама, сам не знаю насколько хороший курс, но программа курса понравилась. А так есть курсы на Coursera бесплатные (если сертификат не получать), есть еще сайт для программистов proglib.io там много хорошей информации.
avatar
MQL5
avatar
Русский
avatar
лично мне хватает исследовать большие данные

qbasic & excel
причём excel развитие basic

а вообще я запатентовал алгоритм
позволяющий быстро изучать 20 разделов
любого языка программирования и изучил цэ-диез
Eugene Logunov, я 2 года читал полный справочник по С++ Г. Шилда, че то там пробовал писать, но понял что это капля в море, и нужно еще лет 5 просрать чтобы что то уметь серьезное, и то мне сильно помогла для тестирования и понимания теория и немного практики по Ассемблеру.

я 2 года читал полный справочник по С++ Г. Шилда, че то там пробовал писать, но понял что это капля в море, и нужно еще лет 5 просрать чтобы что то уметь серьезное, и то мне сильно помогла для тестирования и понимания теория и немного практики по Ассемблеру.


Владимир Гончаров, хорошая оценка, близкая к реальности.

avatar

Если писать торговых роботов, то надо выбирать по следующим критериям:

  — наличие доступа к рыночному окружению (у MQL5 огромная функциональность доступа к рыночному окружению и сделкам)

  — полный контроль за позициями и историей сделок (в MQL5 есть полный контроль)

  — подписная модель на рыночные события (у MQL5 множество OnXXXX событий)

  — готовая библиотека индикаторов, включая кастомные (у MQL5 тысячи индикаторов)

  — готовые опенсорсные библиотеки готового торгового кода (у MQL5 около 13 000 торговых програм лежат в кодобазе открыто)

  — наличие мощного мультисимвольного потикового тестера торговых стратегий (у MQL5 такой, включая мультиядерность и удаленных агентов тестирования)

  — наличие документации (у MQL5 на огромная документация на 10 языках)

  — скорость вычислений (у MQL5 чуть отстает от C++, но часто обгоняет на чистой математике)
 
  — защищенность языка, чтобы нельзя было написать трояна и можно было распространять защищенные скомпилированные файлы (только у MQL5)

  — наличие большого сообщества разработчиков (у MQL5 есть)

Писать на языках общего применения торговых роботов неэффективно. 95% времени уйдет на построение инфраструктурных велосипедов. Причем получится реализовать самый мизер рыночного окружения.

А собственно на роботов не останется ресурсов. Это не говоря уже о тестере.

На MQL5 можно сконцентрироваться в 100% случаев на собственно алгоритмах роботов и не тратить ресурсы на велосипеды.

avatar
MetaQuotes Software, 

> скорость вычислений (у MQL5 чуть отстает от C++, но часто обгоняет на чистой математике)

Ахинея, а точнее осознанное введение в заблуждение. Потому что используйте в коде на С++ ту же оптимизированную математическую библиотеку, что использует mql и тогда сравнение будет корректным. И, конечно, не в пользу mql. Но тогда не получится красиво соврать, правда?

зы: вполне возможно, что с нормальным современным компилятором в каких-то случаях и этого не потребуется, т.к. нынешние оптимизаторы стали творить настоящие чудеса.
avatar
johnsson08, не ахинея.

MQL5 — это оптимизирующий 64 битный С++ компилятор, который генерирует нативный код.

Вот пример доказательства обгона по сравнению с MSVC++ 2017: MQL5 смог вычисление двух корней из разных выражений свести в одну ассемблерную инструкцию.

По ссылке есть все технические выкладки. И код одинаковый с asm результатами.
avatar
MetaQuotes Software, один единственный пример доказывает лишь только то, что в этом одном случае это так. Но не более.

MSVC при всём моём огромном уважении к MS и любви к Visual Studio, как компилятор, к сожалению, никогда не был ни самым стандартным, ни самым эффективным. Те же с-lang, gcc или интелевый компилер в среднем куда как лучше по каждому из этих параметров.

Я готов поверить, что у вас отличные программисты. И даже готов поверить, что они всё пишут сами, а не берут из опенсорсных C-Lang/LLVM или gcc. Но ведь компилеры С++ делают тоже мягко говоря не глупые люди и числом их гораздо больше, чем ваших. И делают они это гораздо «давнее». Всё вместе это подсказывает, что всё таки сильно скорее всего в общем случае результат будет другой. Подчеркну — это не умаляет достоинств ваших разработчиков и mql как (быстрого) языка. Просто мне как человеку трилиарды раз видевшему и разбиравшему подробности булшитов вроде "<your-name-here> делает более быстрый код, чем С++!!!" и ваше утверждение кажется, мягко говоря, несколько сомнительным. Взять одного из самых слабых соперников, побить его в одном синтетическом тесте, и объявить это победой над всем родом — ну, как-то, глаз режет, согласитесь.
avatar
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).

  • 4th Dimension/4D, ABC, ActionScript, Alice, Apex, APL, Avenue, bc, Bourne shell, C shell, CL (OS/400), Clojure, Common Lisp, Crystal, cT, Elixir, Elm, Emacs Lisp, F#, Forth, Icon, IDL, Inform, Io, Korn shell, LiveCode, Maple, Mercury, Modula-2, Monkey, MQL4, MS-DOS batch, NATURAL, OpenCL, Oz, PostScript, Pure Data, Q, Ring, S, SPARK, SPSS, Standard ML, Stata, Tcl, Tex, TypeScript, Vala/Genie, VBScript, VHDL
avatar
MetaQuotes Software, у меня нет ни времени, ни желания с вами (или кем либо ещё) спорить или что-то доказывать. Я попробовал объяснить в чём проблема — вы (сделали вид что) не поняли. Это не моя проблема — это ваша проблема. Думаю, читатели при наличии желания без проблем разберутся далее сами.

Приёмы ведения вами дискуссии (ad hominem, ad populum, ad antiquitatem, ad ignorantiam, подмена тезиса и некоторые ещё) эффективно блокируют желание говорить что-то ещё.

зы: и кроме этого, кое-что существенное сказанное вами вызывает желание держаться от mql подальше.
avatar
johnsson08, просто у вас технических доводов нет.
avatar
johnsson08, пусть с intel c++ посаревнуются:)
avatar
My Shadow, 
пусть с intel c++ посаревнуются:)
а вы тестили этот компиль? чем лучше gcc так и не понял, кроме как всяких плюшек в виде директив
avatar
Андрей К, лет 15 назад тестил, когда С++ занимался, на тот момент очень неплохо оптимизировал под новые камни, но имел некоторые проблемы с C++ templates.
avatar
MetaQuotes Software, Сделайте нормальные callback — вызов функций MQL5 из других языков и все ваше поделие просто не нужно будет.
Писать на языках общего применения торговых роботов неэффективно. 95% времени уйдет на построение инфраструктурных велосипедов. Причем получится реализовать самый мизер рыночного окружения.
Ваш язык ничем не ускоряет разработку роботов. От слова совсем. Нет ни одной команды, которая бы резко увеличила разработку. Ваш язык в общем-то очень мертво рожденный и применяется только в рамках mt.
К тому же приходится жить с вашей не удобной системой и кучей багов. К другому брокеру уже не уйдешь, особенно если у брокера нет вашего поделия.
avatar
Бейсик в Экселе говорят самый простой вариант. Для начала. А потом уже можно и на Фортране)
Если не сделал выбор возьми Golang, и ты уже потом поймешь что ты начнешь использовать много языков как инструмент.
avatar
Для трейдинга по сути не важно (HFT не берем, врядли тут кто-то в силах противостоять той же цитадели). В квике может очень понадобится LUA, но зная другие языки, вы его быстро освоите.

Работаю более 10 лет с C#, и когда мне понадобилось посчитать кое-какую статистику по российскому рынку, я его и ногой не тронул. Проще было взять JavaScript, через REST вытащить с API мос. биржи данные и сделать несколько циклов. Ни тебе парсеров, ни приведение данных, зачем C#?

Вообще NodeJS крайне удобная штука, потому-что очень мощное сообщество и всё делается на коленке из консоли.
avatar
надо учить машинный язык 010101010101
avatar
Роботов обычно пишут под определённый торговый терминал. Для Quik'а самый естественный выбор — QLua. Это «нечто» по мотивам JavaScript.
Но для для тестирования стратегий с большим числом параметров и на длинных историях котировок незаменим C++AMP в Microsoft Visual Studio. Он использует графический процессор видеокарты ПК. На моём десктопе от 2012 г ускорение в 33 раза. Правда, каждый уровень ветвления if замедляет в 1.7 раза. Но это самый удобный способ получить супер-компьютер у себя дома.
avatar
Rostislav Kudryashov, зачем вводите в заблуждение? Язык Lua, и выросшая из него Quik обёртка QLua ни малейшего отношения к JavaScript не имеют. От слова вообще. Это самостоятельный, довольно старый, типа легковесный язык, который весьма  легко эмбеддить в свои проекты (чем часто пользуются в геймдев индустрии, например). Его «нечтовость» в квике в большинстве наследуется от самой «нечтовости» квика…
avatar

johnsson08, javascript и lua весьма похожи — динамическая типизация  + прототипное программирование,  только в одном {/}, в другом do/end наверно это имелось в виду.

avatar
Unworldly, Язык непростой, но есть определенная разница между тем, что язык не допускает простого решения, и тем что программист осознанно пишет неочевидный код.

Eugene Logunov, такое может быть в коде, который приходится использовать.

Та же функция signal языка C:

void (*signal( int sig, void (*handler) (int))) (int);
Здесь можно посмотреть, что такая есть.

p.s. Как вам такое? 

Непонятно, что это.
avatar
С#, Java использовать для большого кол-ва мелких объектов (типа сделок) довольно накладно выходит из-за сборщика мусора, т. к. получаем тормоза. А чтобы от них избавиться придется переписать сборщик мусора и rtl для того, чтобы не было постоянной работы сборщика.
Из того, что можно использовать более менее это Delphi в связке с си++ для прикручивания разных библиотек и часть кода можно вынести в си++. Но все писать на си++ затея не самая радужная, т. к. в си++ все приходится делать ручками. В си++ мало что есть из коробки в отличие от Delphi/Lazarus и важный код получается быстрым и эффективным.
Ко всему прочему возможности по бесшовному связыванию модулей из разных языков программирования просто огромные.
avatar
Александр, сделки можно хранить по-разному. И даже если их хранить как отдельные объекты, сборщик не причем. Сделки просто ложатся в память и накапливаются, чтобы быть доступными для основной логики. Сборщик не идиоты писали. Кроме исключительно редких специальных случаев Вы не почувствуете его присутствие.
avatar
ch5oh, Ага редких. Не надо ляля. Достаточно частых случаев и местами даже не приятных. Попробуй обойти 3 млн. объектов — какой бы ни крутой сборщик не был, но столько перелопатить незаметно/быстро будет проблематично. В любом случае придется с этим чудом что-то делать и на это уйдет основная часть работы.
avatar

Александр, в чем проблема "обойти 3 миллиона объектов"? Ни в чем. И при обходе коллекции сборщик мусора вообще никак не используется. Потому что объекты не создаются и не уничтожаются.

 

Нет, наверное, можно написать настолько криворуко, применить неадекватные типы данных и коллекций (то есть задаться целью написать говнокод) — тогда можно искуственно создать псевдопроблемную ситуацию.


Но тут как в анекдоте:
Подходит джуниор к сеньору и спрашивает: «Почему работает неправильно? Где ошибка?»

Сеньор посмотрел и отвечает: «Ошибка в ДНК».

avatar
ch5oh, Как только объект создался, он уже как-минимум раз будет пройден сборщиком и на это все тратится время. Напишите тесты и посмотрите.
avatar

Александр, это Вам надо «писать тесты и смотреть». Про разные поколения объектов почитайте на досуге.

 

ПС А если Вам нужны микросекунды, тогда вообще другой разговор. И да, сишарп не подойдет. И даже асм не подойдет. Недавно был интересный пост как человек на FPGA торгует. Вот это — подойдет.

avatar
ch5oh, 
 Недавно был интересный пост как человек на FPGA торгует
если не сложно, ссылочку, что то пропустил.
avatar
Александр, позвольте поинтересоваться, какого рода объекты?
avatar
Dmitryy, Наследники от object
avatar
Александр, я хотел бы понять по точнее, что это за объекты, в чистом виде 3млн пустых обджектов не приведут к просадке перформанса.

А по с++ погуглите перформанс тесты, их уже больше множество
florent.clairambault.fr/stupid-cpp-vs-charp-performance-comparison/
avatar
Dmitryy, Вот скажите мне у вас 3 млн. объектов, которые не будут удалены, нафига их обходить то? А чтобы сборщик мусора их не обходил, то необходимо использовать пулы объектов. А для этого нужно переписывать все коллекции. Я вот не знаю (хотя не изучал), коллекции, которые бы использовали пулы объектов.
professorweb.ru/my/csharp/optimization/level3/3_9.php

avatar
Александр,  если объектов много надо просто не .NET использовать, а jvm так как есть azul и ZGC.
avatar
My Shadow, в jvm такая же проблема, придется переписывать сборщик и коллекции. К слову говоря на лекториуме есть лекция на этот счет к слову очень познавательная.
В идеале все сводится к ручной сборке и большому кол-ву памяти.
avatar
Александр, вы хоть в гугле слова которые привел наберите
avatar
My Shadow, Набрал и что? Первое решение платное, второе новое, т. к. я может быть и не в курсе. Если оно позволяет в ручную делать сборку мусора так я только за. Я не использую jvm. Мне больше нравятся нативные решения.
avatar

Александр, если вы хотите в ручную то используйте offheap. а эти решения делают реальный параллельный GC без задержек на кучах большого объема, ценой некоторого замедления работы с объектами.

avatar
Александр, я почему и спросил про какого рода объекты? Если каждый из них по 100Мб весит, тогда я могу понять, хотя это тоже вопрос решаемый, 32Гб оперативной памяти уже не роскошь. Лишняя или преждевременная чистка также приводит к потере производительности. Нужно правильно работать с коллекциями, использовать генерики, не плодить глобальные переменные. И всё-равно все эти меры, это куда проще и безопаснее чем с++.
avatar
Dmitryy, Нет это не проще и не безопасней чем с++. Работа со 100 тыс. сделок в стокшарпе уже давала просадки при сборке мусора (версия стокшарпа старая, как сейчас обстоят дела не знаю). Это даже более не безопасно, чем с++. В с# есть:
1. Есть 2 вида памяти: управляемая и не управляемая. Всегда надо знать, где лежит объект. Для неуправляемой памяти надо еще чистить в ручном режиме.
2. Есть маршалинг. Он свое тоже берет в виде копирования там, где его можно не делать.
3. Не всегда заметны утечки памяти. Слабые ссылки ни кто не отменял. Но об этом тоже нужно помнить.
4. Есть сборщик мусора.
Со с# выстрелить себе в ногу можно очень легко, а вот заметить это бывает достаточно сложно. Для большинства задач с# хватает. Но есть задачи специфические и их лучше решать на си++ или Delphi.
В си++ конечно другие проблемы.
avatar
Александр, не спорю при разработке главно сделать работающий алгоритм, а производительность потом можно поправить перформанс тестингом. Современные тестеры на малекулы разбирают дотнет код, причем очень не плохо дают советы по оптимизации. Да, иногда не тривиально, но реально.
avatar
Dmitryy, Единственный плюс си# и java заключается в их рантайм оптимизациях, что существенно сложнее сделать на нативных языках, даже на си++. В остальном особых плюсов использования си# и java я не вижу. Местами сборщики мусора больше мешают, чем решают поставленных задач.
Чтобы в Delphi отследить утечку памяти нужно установить одну переменную и утечки будут всегда видны. А в других языках мне надо с другими инструментами просиживать, чтобы узнать, что я что-то не чищу.
avatar
Dmitryy, Писал я один проект на Stocksharp. В нем при работе более чем 100 тыс. сделок были значительные просадки по скорости из-за сборщика мусора.
avatar
Александр, стокшарп архитектурно неудачно сделан. О чем и писал ранее: можно написать говнокод и получить проседание производительности. Но причиной будет говнокод, а не GC.
avatar

Только зарегистрированные и авторизованные пользователи могут оставлять ответы.

Залогиниться

Зарегистрироваться

теги блога *Джон Голт*

....все тэги



UPDONW
Новый дизайн