Обсуждение статьи "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - страница 4

 
Renat:

Сколько раз я уже слышал именно такие слова - зачем изобретать велосипед, зачем не взять java, Net и тд в качестве базы. А ведь я сам первые торговые стратегии начал писать ровно 11 лет назад, когда вообще практически понятия API к торговому счету не было.
Это как сказать. Да и через 11 лет что-нибудь да должно было бы поменяться :)

Ради бога, берите готовые API разнообразных брокеров и делайте свои решения.
Иногда к этому склоняют. А почему бы не постараться улучшить ситуацию, тем более если позиция позволяет?

Только вот практика показывает, что сырые API требуют только программисты. А на одного программиста, готового в "рукопашную" сходить на написание системы приходятся 1000 трейдеров, которые хотят проверить свои стратегии на готовом и защищенном фреймворке.
Сырые - понятие относительное. Однако, порой API лучше чем ничего. Или, хуже, их принуждают использовать в силу внутренних орграниченой платформы.
По поводу "защищённого" фреймворка дискуссия открыта, что защищаем, от кого и как.

Новички требуют API, иногда получают, потом проходит месяц мучений и понимания того, что API для написания даже самой простой торговой стратегии не хватает, а нужно все остальное готовое рыночное окружение. Оказывается, что рынка для простейших программ без интерфейса нет, что покупателей не интересует привязка к одному терминалу и тд. И желание писать дальше неизменно пропадает.
Так об этом и речь - не API должен быть, а расширяемый фреймворк со специализированными интерфейсами, заточенными под конкретные задачи! Привязка к терминалу никого не интересует, но зато брокеры "любят" привязывать себя сами. Конечно, здесь им нужно посочувствовать.


Для нормальной развиваемой среды автопрограммирования в торговых платформах нужен обязательно защищенный фреймворк с жесткой песочницей, иначе никто не будет обмениваться скриптами из-за страха троянов. А не будут обмениваться - умрет сообщество, а заодно и язык.
Позволю здесь с Вами не согласиться, но открыт для переубеждения и изменения позиции. Назовите пример из истории автопрограммирования торговых платформ, где (излишняя) мощь той или иной доступной среды разработки переросла в страх пользователей и обрекло такую среду на разрушение и вымирание. Согласитесь, разрешение галочкой использовать DLL вызовы в МТ практически не решает в этом плане ничего, особенно если есть обоснованная причина прибегать к DLL.

Сообщество - это не 50, 100 или 500 программистов (которые с удовольствием вытрут/вытирают об тебя ноги), а десятки и сотни тысяч трейдеров, которые используют системы с минимумом сложностей.
Вот тогда и надо определиться с самого начала, а не пытаться запихать ООП для чела, имеющего смутное представление о программировании. Говоря специфически о системах автоторговли, дайте трейдерам минимум сложности и это перерастёт в максимум сложности под одеялом графического интерфейса (и, в итоге, кошмар для программера системы) - не проще ли никого не вводить в заблуждение и дать ИЗНАЧАЛЬНО возможности для максимальной гибкости создания систем, а не стараться находить компромисс дозволенного, чтобы работало для 95% случаев (читай - "все кроме единиц отщипенцев очень даже довольны, так наша компания позиционирует")?

Кстати, только на MQL4.community ежедневно приходят больше 30 000 уникальных посетителей, а по всему миру пользователей MetaTrader 4 по нашим оценкам сильно больше миллиона.
И что с этой статистикой прикажете делать? Понятно, с точки зрения бизнеса, ДЦ имеет с 98% отдавших денюжку бедолаг, врубивших красивый советничег в несомненно солидно смотрящемся торговом терминале с примочками...

MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader
  • www.mql4.com
MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader
 

Уважаемый pisara,

Давайте уточним - идет спор теоретика с практиком. За "мир во всем мире" конечно биться Вам никто не запрещает, но учитывайте побольше факторов кроме "а почему бы не улучшить?".

Ради бога, берите готовые API разнообразных брокеров и делайте свои решения.
Иногда к этому склоняют. А почему бы не постараться улучшить ситуацию, тем более если позиция позволяет?

Я так и написал - не будете его использовать, ибо не хотите заниматься рутиной. Вам ведь на блюдечке все надо будет дать - все индикаторы, все рыночное окружение, всю историю в разных периодах и тд. И чартинг надо бы, не в уме же Вы будете индикаторами манипулировать?

То есть, Вам фактически нужен полноценный терминал. И мы его даем: MetaTrader 5 + MQL5 + DLL.  Называйте его фреймворком или скажите сразу - отдайте терминал в исходниках/компонентах (ведь по сути этого требуете).


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

Контролируемый (по умолчанию отключенный) вызов DLL - это приемлемо, но вот загрузить непонятно кем сделанные DLL к себе в торговый терминал - это дыра похлеще непатченного интернет эксплорера 6.


Для информации статистика Google Trends по торговым терминалам с автоматизацией:


Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 
А что это за сообщение такое у меня "2010.01.24 22:41:09    MQL5DLL_Test (GBPJPY,H4)    Access violation write to 0x00000000 in 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 build 240. Вызов dll разрешён.
 
joo:
А что это за сообщение такое у меня "2010.01.24 22:41:09    MQL5DLL_Test (GBPJPY,H4)    Access violation write to 0x00000000 in 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 build 240. Вызов dll разрешён.

Из статьи демонстрационный пример:

4. Перехват исключений в DLL функциях

Чтобы избежать падения самого терминала, каждый вызов функций DLL автоматически защищается оберткой Unhandled Exception. Этот механизм позволяет уберечься от большинства стандартных ошибок (обращения в недоступную память, деления на ноль и т.д.)

Для проверки работоспособности этого механизма создадим следующий код:

_DLLAPI void __stdcall fnCrashTest(int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr=0;
  }

и вызовем его из терминала:

#import "MQL5DLLSamples.dll"
void fnCrashTest(int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest(NULL);
   Print("Этого текста не увидите!");
//---

В результате произойдет попытка записи в нулевой адрес с генерацией исключения. Терминал его перехватит, сообщит в журнале и продолжит работу:

MQL5DLL Test (GBPUSD,M1) 20:31:12 Access violation write to 0x00000000


 
Renat:
Из статьи демонстрационный пример:

Спасибо. Значит, я был не очень внимателен, когда читал статью. :)

PS А мог бы сказать типа: "Слушай, товарисч! Иди перечитай статью заново!" - и был бы прав. Респект и уважуха, как говорится.

 
Renat:

Уважаемый pisara,

Давайте уточним - идет спор теоретика с практиком.
Не переходя на личности, по существу. Хороший теоретик отталкивается от практически накопленного опыта, хороший практик же меряет семь раз.

За "мир во всем мире" конечно биться Вам никто не запрещает, но учитывайте побольше факторов кроме "а почему бы не улучшить?".

Я так и написал - не будете его использовать, ибо не хотите заниматься рутиной. Вам ведь на блюдечке все надо будет дать - все индикаторы, все рыночное окружение, всю историю в разных периодах и тд. И чартинг надо бы, не в уме же Вы будете индикаторами манипулировать?

То есть, Вам фактически нужен полноценный терминал. И мы его даем: MetaTrader 5 + MQL5 + DLL.  Называйте его фреймворком или скажите сразу - отдайте терминал в исходниках/компонентах (ведь по сути этого требуете).

Здесь не миротворческая деятельность, но, согласитесь, облегчение жизни программера и улучшение качества торговой системы + возможности её интеграции ещё никому не вредили. За примерами не далеко: Borland Delphi, MS .net имеют полностью открытый фреймворк / компонентную базу / class diagramms и даже значительную для пользователей платформы часть исходников (Delphi).

Программисты ошибочно считают "мощью" возможность писать скрипты для торговых систем на незащищенных нативных языках, а потом удивляются от того, что никто даже не собирается пользоваться их творениями. Поэтому они умирают едва родившись. Те же, кто развил и создал сообщество пользователей, думают гораздо глубже (ибо набили шишек раньше) и не допускают таких ошибок.
Давайте быть реалистами. Если вы хотите выпустить софт и продать его, через полгода или год выпустить платный апдейт, то для вас защита кода весьма важна. Если же вы, как я понимаю, здесь надолго и непрерывно усовершенствуете платформу цепью билдов и поддержки, то никакой конкурент вас не достанет. Зато пользователи смогут писать куда более качественный код. И не только код, но и структуру ТС, что не менее важно! Могу даже привести аналогию с антивирусниками - взлом AV клиента ещё не даёт доступа к апдейту базы вирусов (тут - квот).

Контролируемый (по умолчанию отключенный) вызов DLL - это приемлемо, но вот загрузить непонятно кем сделанные DLL к себе в торговый терминал - это дыра похлеще непатченного интернет эксплорера 6.
Так дыра то эта - просто разрешение пользователя! Как бедолага пользователь может гарантировать 100%-но отсутствие вредностей в DLL, пусть она подписана хоть компанией Х? Ведь запретив в сомнении, он никогда не узнает была бы от неё ему польза или нет. Вот тут вам и психология...


Для информации статистика Google Trends по торговым терминалам с автоматизацией:

Интересно, а шкала ординат там логарифмическая?
Кстати, данные для размышления по России, видно лидерство красного Метастока:

Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 

Пользуйтесь штатными функциями "Ответить", пожалуйста. Очень неудобно читать.

Чтобы разорвать цитируемый блок, поставьте курсор в нужное место и выберите стиль "Обычный текст" или нажмите Ctrl+1.


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

В качестве шутки есть старый анекдот:

Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.

Прохожий подходит к еврею, кидает рубль и говорит:

— Слушай, смени надпись, иначе останешься голодным.

Когда прохожий ушёл, еврей повернулся к своему соседу и сказал:

— Ты понял, Изя? Этот человек будет учить нас коммерции!

 
Renat:

Пользуйтесь штатными функциями "Ответить", пожалуйста. Очень неудобно читать.

Чтобы разорвать цитируемый блок, поставьте курсор в нужное место и выберите стиль "Обычный текст" или нажмите Ctrl+1.


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

В качестве шутки есть старый анекдот:


Ладно, если не хотите выдать действительных причин убийственности предпосылок и чем вам .net фреймворк тесен, дискуссия окончена. По поводу анекдота - отмеряйте сами, монастырь ваш.

Остаётся пожелать всем удачи, чтобы не оглядываться назад после перехода на 5-ку.

 
investeo:

Я скомпилировал dll с помощью visual c++ express 2008, но, что интересно, терминал не перехватывает исключение, а падает внутри fnReplaceString.

Моя терминальная сборка - 239. Есть какие-нибудь подсказки?

Можете прислать мне ex5 и dll?
 
Renat, огромное спасибо за статью! Очень интересно и познавательно. К сожалению у меня не получилось применить скрипт MQL5DLL Test.mq5. Делал всё как написано в статье. Но когда запускал скрипт, MT 5 просто закрывался как подкошенный. Не знаю в чём проблема. Может из-за оси? У меня MS Vista x64. Просьба подсказать пути решения :-)