Режим DDE "горячий", "теплый" или по явному запросу? - страница 5

 
komposter:Прям пуп земли! =)
Мы ночей не досыпаем, выискиваем в твоих постах к чему бы прикопаться. А ты аккуратный!

Брось, ты не то что "по лезвию", ты еще "с рукоятки" не сошел ;)
Говори смело, но не грубо. И запрещенные темы, естественно, не поднимай (ДЦ, брокеры, и т.д.).

Если ляпнешь лишнего (по их мнению), сделают предупреждение.
Банят хамов, нахалов, и голословных.

А "пытливые умы" не банят.


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

А "пытливые умы" не банят. - Об этом надо спросить у того кто банит:) Уже ляпнул лишнего, уже было предупреждение, все проверено:)

 
komposter писал (а):

А выложить сложно было? Не жалеешь чужое время, абсолютно...

Дык... Я же говорю, что засмущался, отбросил его, потом совсем запутался. Access этот еще...

Событие для ячейки есть - надо обрабатывать Target в событии Worksheet_Change.
Если надо, могу поделиться набросками.


Я в поисках встретил нечто об этом. Сразу не запомнил, а снова не смог найти. Нарисуй, если не в лом. Хоть концепцию понять. Хотя я примерно вижу. Это параметр который стандартно передается в это событие. Вот так?

Private Sub Worksheet_Change(ByVal Target As Range)
    Stop
    Debug.Print Target.Address
End Sub
Млин... Как же я не допер? Четко - нужную ячейку можно индивидуально отслеживать, остальные игнорить. Написано ведь по-русски - таргет! Вот что значит глаз замылился :() Таким образом можно в один лист набросать DDE-связей от разных источников и каждый со своего бока стругать. Нижайший поклон за наколку.
 
VBAG:
В чем, по Вашему мнению,может заключаться "корявость подпорок (DDE)" в случае с чтением котировок с терминала MT4?


Во первых DDE использует для передачи информации shared memory. И в случае ошибочных ситуаций, занятости одного клиента или сервера, очень велика вероятность утечки памяти. Так как такие объекты с закрытием приложения не удаляются. Они должны быть явно закрыты. Во вторых весь обмен происходит посредством очереди сообщений виндов - что не является быстрым методом и скорость обмена зависит от загруженности очереди другими сообщениями. Винда вообще никогда не славилась умением распределять ресурсы процессора. Ладно если вы хотите получать данные на часовках и смогли написать грамотный ДДЕ клиент с обработкой ошибок и исключений (в чем я сомневаюсь, судя по задаваемым вопросам, и гемморой от плохой реализации будет постоянно беспокоить при дальнейшей эксплуатации), но при попытке получать тиковые данные вы упретесь в недостаточную и главное плавающую скорость обработки сообщений.

> Написать dll труда не составляет, но почему бы не воспользоваться, на мой взгляд, более простым решением(DDE).

Это кажущаяся простота, а на деле потратите время и устанете собирать грабли в лоб.

ЗЫ. Все это ИМХО и просто основано на большом опыте программирования.

 
По делу меня лично больше интересует что будет MQL5, так как есть понимание того что MQL4 мои методы не изменятся и отношение к ним тоже, а закрытость тем более. Как вы уже слышали, скорее всего поддержка DDE в пятой верси, возможно, не будет включена, ну оно и к лучшему.
 
TedBeer:
VBAG:
В чем, по Вашему мнению,может заключаться "корявость подпорок (DDE)" в случае с чтением котировок с терминала MT4?


Во первых DDE использует для передачи информации shared memory. И в случае ошибочных ситуаций, занятости одного клиента или сервера, очень велика вероятность утечки памяти. Так как такие объекты с закрытием приложения не удаляются. Они должны быть явно закрыты. Во вторых весь обмен происходит посредством очереди сообщений виндов - что не является быстрым методом и скорость обмена зависит от загруженности очереди другими сообщениями. Винда вообще никогда не славилась умением распределять ресурсы процессора. Ладно если вы хотите получать данные на часовках и смогли написать грамотный ДДЕ клиент с обработкой ошибок и исключений (в чем я сомневаюсь, судя по задаваемым вопросам, и гемморой от плохой реализации будет постоянно беспокоить при дальнейшей эксплуатации), но при попытке получать тиковые данные вы упретесь в недостаточную и главное плавающую скорость обработки сообщений.

> Написать dll труда не составляет, но почему бы не воспользоваться, на мой взгляд, более простым решением(DDE).

Это кажущаяся простота, а на деле потратите время и устанете собирать грабли в лоб.

ЗЫ. Все это ИМХО и просто основано на большом опыте программирования.

Спасибо! Ваше объяснение, пожалуй, одно из самых конструктивных в этой ветке.
 
VBAG:
Renat писал (а):
Есть технология (DDE), есть реализация (уже 7 лет в наших программах, писал лично я) и есть масса людей, кто ее использовал для экспорта данных.

Сложность написания DDE сервера или клиента по сравнению с обычной DLL где-то 10:1. Не нужно ломать копий по поводу DDE - ее наверняка на будет в нашей следующей информационно-торговой платформе.
Можно Ваше заявление трактовать как такую рекомендацию?
Экспорт данных по DDE из MT4 сам по себе надежен, но использовать его для собственных приложений не целесообразно.
Экспорт по DDE из МетаТрейдер 4 надежен, так как встроенный DDE сервер имеет собственную очередь котировок, из которой и выдает данные DDE клиентам. То есть, если Вы подключились к DDE серверу (поддерживается главный автоматический режим ADVISE), то не пропустите ни одной котировки.

Но DDE - это страшный анахронизм. Вместо него мы дадим гораздо более эффективные методы для сбора данных.
 
Renat:
Экспорт по DDE из МетаТрейдер 4 надежен, так как встроенный DDE сервер имеет собственную очередь котировок, из которой и выдает данные DDE клиентам. То есть, если Вы подключились к DDE серверу (поддерживается главный автоматический режим ADVISE), то не пропустите ни одной котировки.

Но DDE - это страшный анахронизм. Вместо него мы дадим гораздо более эффективные методы для сбора данных.
Заслушаться можно, хотел было что-то добавить, но понял, что нечего:) Мы верим и ждем, уверен, что вы уже добились не малых результатов:)
 
Renat:
Экспорт по DDE из МетаТрейдер 4 надежен, так как встроенный DDE сервер имеет собственную очередь котировок, из которой и выдает данные DDE клиентам. То есть, если Вы подключились к DDE серверу (поддерживается главный автоматический режим ADVISE), то не пропустите ни одной котировки.

Но DDE - это страшный анахронизм. Вместо него мы дадим гораздо более эффективные методы для сбора данных.
Спасибо Вам за разъяснения и за Ваше терпение.
 
Chen:

Я в поисках встретил нечто об этом. Сразу не запомнил, а снова не смог найти. Нарисуй, если не в лом. Хоть концепцию понять.

Да, ты все правильно понял.
Удобно пользоваться Target.Row, Target.Column. И есть еще мощная функция, работающая с пересекающимися диапазонами, но как она называется - не помню ;)
 
komposter:
Удобно пользоваться Target.Row, Target.Column. И есть еще мощная функция, работающая с пересекающимися диапазонами, но как она называется - не помню ;)


Практически для любых комбинаций диапазонов достаточно в качестве параметра Range() через запятую указать их адреса. Типа
Range("C9:C19,E9:E19,13:13,A26:H27").Select
Удобно с именами работать. По короткому имени обращаешься сразу ко всему. Типа:

ActiveWorkbook.Names.Add Name:="NamedRange", RefersToR1C1:= _
"=Лист1!R30C3:R35C3,Лист1!R39C3:R44C3,Лист1!R37,Лист1!R32"
Application.Goto Reference:="NamedRange"

или

Range("NamedRange").Select

Последний вариант с какими-то условностями работает. Я очень давно сталкивался.

Правда все это так далеко от DDE :)

Причина обращения: