Обсуждение статьи "Передача данных между индикаторами - простое решение наболевшей проблемы" - страница 2

 

...Только один вопрос – как преобразовать указатель в целое. В этом нам и поможет Dynamic Link Library, а именно, возможности языка C++ по приведению типов данных. В связи с тем, что указатели в C++ являются четырехбайтовым типом данных, в наших целях удобно использовать четырехбайтовый же тип int...

Если не ошибаюсь, автор говорит о неявном преобразовании типов. Очень позновательная статья - огромное спасибо автору.

Ещё хотел добавить, что если понадобится сделать метод SetPtr, то не обойтись без явного приведения типов.

Будет выглядить примерно так

double* SetPtr(int a)
{
  double* a1 = reinterpret_cast <double* > (a);
  return(a1);
}

Вообще, MQL5 выиграл бы сильно, если бы указатели получили широкое признание и использование.

 

Вообще, MQL5 выиграл бы сильно, если бы указатели получили широкое признание и использование.

Я бы добавил в этот список обработку исключений, конструкторы с параметрами и множественное наследование.

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

Хотя все перечисленное является стандартными средствами ООП и никому особо еще не повредило.

Создается впечатление (у меня), что они просто не в состоянии надежно реализовать эти механизмы.

Печально, что кто-то решил, что этого у нас не будет

 

Я заметил, что в новых сборках MT4 функция SetIndicatorValue() не работает, а GetIndicatorValue() работает. Мне показалось, или в новых билдах (я думаю, изменения произошли где-то после билда 225) что-то сломало эту функцию? Если да, то есть ли какие-нибудь предложения, как заставить методологии из этой статьи работать на новых сборках MT4? Тот факт, что старые билды больше не поддерживаются, создает мне проблему в этом отношении, поскольку я действительно хотел бы, чтобы расчеты индикатора происходили только один раз, в советнике, но все же отображались на графиках путем подталкивания вычисленных значений к указателям индикаторных буферов. (BTW, я был очень благодарен, что нашел эту статью и смог применить ее методы - спасибо за ее написание).

Связанный с этим вопрос: я заметил, что в примечаниях к выпуску Build 392 MT4 от 3/17/2011 говорится: "3. Устранены ненужные пересчеты индикаторов при отображении их на графике". Отменяет ли это усовершенствование необходимость использования техник, описанных в этой статье, в том смысле, что использование пользовательских индикаторов в том виде, в котором они были задуманы, больше не будет медленнее, чем использование техник, основанных на указателях, о которых рассказывается в этой статье? Спасибо.

 
brisully:

Я заметил, что в новых сборках MT4 функция SetIndicatorValue() не работает, а GetIndicatorValue() работает. Мне показалось, или в новых билдах (я думаю, изменения произошли где-то после билда 225) что-то сломало эту функцию? Если да, то есть ли какие-нибудь предложения, как заставить методологии из этой статьи работать на новых сборках MT4? Тот факт, что старые билды больше не поддерживаются, создает мне проблему в этом отношении, поскольку я действительно хотел бы, чтобы расчеты индикатора происходили только один раз, в советнике, но все же отображались на графиках путем подталкивания вычисленных значений к указателям индикаторных буферов. (BTW, я был очень благодарен, что нашел эту статью и смог применить ее методы - спасибо за ее написание).

Связанный с этим вопрос: я заметил, что в примечаниях к выпуску Build 392 MT4 от 3/17/2011 говорится: "3. Устранены ненужные пересчеты индикаторов при отображении их на графике". Отменяет ли это усовершенствование необходимость использования техник, описанных в этой статье, в том смысле, что использование пользовательских индикаторов в том виде, в котором они были задуманы, больше не будет медленнее, чем использование техник, основанных на указателях, о которых рассказывается в этой статье? Спасибо.

Похоже, я ошибался, и файлы индикаторов, приложенные к статье, действительно работают в новых сборках MT4. Извините за ложную тревогу, и еще раз спасибо за эту работу.
 
Zhunko:

Как всё сложно!...

С помщью Ильнура ещё год назад написал библиотеку на MQL4 для работы с памятью. Можно выделять память, двигать указатели, писать и читать, передавать в любые другие программы имя области памяти.

Всё построенно на маппинге. Это существенно проще предлагаемого. 

Как бы эту библиотеку получить? Был бы благодарен. Мне нужно передавать данные между двумя МТ.
 
спасибо
 

А можно добавить в DLL функции не только для работы с double, но и для datetime, для long и для int ?

Получается, что сейчас данные с массивов цен - легко можно переносить между вложенными структурами без копирования, а вот данные по времени, спреду и объемам - надо все равно копировать.

Пытался приспособить GetPtr для работы с datetime и long (и через извращения с передвижением бит с int) - не выходит, функция принимает ссылку на массив, и ее нельзя преобразовать.

Кто-нибудь решил данную проблему? 

 

Молчание.

Эх... Придется самому вспоминать С++ и ставить MSVC... 

 
Laryx:

Молчание.

Эх... Придется самому вспоминать С++ и ставить MSVC... 

А сейчас вам никто ничего и не ответит, все ушли на фронт.

Слышали что нибудь об обновлении МТ4 ?

 

Краём уха, краём... :)

Обновление МТ4 мне очень даже кстати - у меня библиотеки большие, но все - на МТ5 (я, видите ли, без ООП  жисть себе не представляю). А ДЦ, нехорошие люди - далеко не все МТ5 на реале имеют... Так что - мне данная новость очень даже кстати.

Но - пока не будет нормального МТ4++  я не вижу смысла приспосабливать код под обновленную платформу. Выйдет что-то вроде официальной беты (да, чтобы со Стандартой Библиотекой, я без нее тоже не желаю советников писать) - вот тогда и начнем преобразование кода...

А сейчас мне - ужасно хочется получать адреса не только массивов double, но и других... А - ёк... Хотел было через преобразование типов обойти проблему (время и лонги - тоже ведь восьмибайтные), но пока не выходит...