granit77: Виктор, ты не прав. Благодаря этой, несколько затянутой дискуссии, два программиста попутно отвечали на вопросы новичков, что пошло ветке только на пользу :))
Ну, я с удовольствием почитал. И было очень показательным отношение продвинутых (не знаю как уже вас теперь называть программистами или нет - запутался совсем теперь : )) ) - скажем так - специалистов, решающих продвинутые задачи : )) и их взгляды на, казалось бы, простые на первый взгляд задачи. Искренне надеюсь, что это без эмоциональных последствий дискуссия и дружеская, не смотря на все разногласия. У меня, к сожалению, разногласия (неразрешенности) тоже остались. Но я как раз тут исповедую философский подход. Если решение задачи таким путем не очевидно, значит, нужно найти иной путь. Но знать о проблематике очень полезно.
Спасибо Вам большое за дискуссию. Жалко, что не пришли к консенсусу. (Но, консенсус пока не сложился... (вспоминается песня "Там, вдали, у метро"))
И жаль, конечно, что на мои с Арлесом вопросы, не было очевидных ответов. Думаю, эти вопросы не только у нас с ним, но и у многих менее опытных спецов, которым сложно выстраивать самостоятельно и потоки и в.т., и именно поэтому они обращаются к написанным продвинутыми специалистами программам и оболочкам.
Ну, ничего. Со временем и эти вопросы разрулим. : )) Спасибо Вам большое за Ваши старания. Ведь позитивный настрой, в итоге, у всех сторон (хотя и расходящийся по способам решения). И это радует.
Кстати, в своих педагогических изысканиях я часто говорю: не все вопросы могут быть разрешены, мы часто не знаем на все ответы; поэтому они могут пока... остаться открытыми. (я пытаюсь найти деликатную концовку обсуждения) Еще раз Спасибо!
Нужна помощь 1 как узнать цену верхнего открытого или отложенного ордера sell 2 как проверить есть ли по указанной мной цене открытый или отложенный ордер sell
Т.е. отвечая на вопрос Arles , если у меня один советник произвел учет ордеров и на время "вздремнул" то в этот момент другой советник не перешедший границ выделенных средств (предположим 80% от депозита - в обоих советниках такой размер будет) выставит ордер (войдет в сделку по рынку). И когда 1-ый возобновит работу (а терминал по управлению капиталом уже был посчитан накануне), то он тоже может открыть сделку уже превышающую выделенные лимиты советником?
Если эту сит-ию (гипотетически) размножить на несколько советников, то может возникнуть такая, где Риск-Менеджмент окажется в критической сит-ии?
Я правильно понимаю данную многопоточность? - Если так, то с финансовой точки зрения это, конечно, бардак. Но, т.к. вероятность такового невелика на маленьких счетах, то это лишь гипотетически. А на больших счетах, наверное будут сами писать что-то. Но, все-таки, получается что это так?
И у меня вопрос - это официальная позиция или это лишь предположение и опыты наподобие моих?
Надо бы в деините сделать декремент индекса. И удалять глобальную переменную, когда индекс равен нулю.
Только такой декремент не позволит дозагрузить скрипт после удаления. Индексы перепутаются.
Надо делать глобальный массив индексов всех модулей, что обращаются к ресурсу. Ну, и работать с ним.
Ещё можно сделать две глобальные переменные. Одна с последним индексом, другая с текущим количеством модулей. Индексы только увеличиваются. Пожалуй, это проще будет.
Или совсем не заморачиваться с глобальное переменной. Вручную удалять перед первым запуском.
Придумал! Надо выходить тоже синхронно. В деините ждать своей очереди и выйти с обнулением глобальной переменной. Обращение к ресурсу кратковременное, то это нормально в деините пройдёт.
1) Задача : каждый скрипт (советник) должен знать о наличии всех остальных.
2) Проблема : если произойдет сбой, то глобалки от сбойного будут висеть неприкаянные и очередь запнется.
3) Решение :
Каждый эксп организует 1 глобалку с именем - общий префикс + хендл окна + символ. значение глобалки - время последнего тика по этому инструменту. 2 общую глобалку со своим хендлом (после того как отработает пишет в нее свой хендл или обнуляет если самый старший)
Очередь организуем по возрастающей (хендлы), самый старший обнуляет вторую глобалку
в каждом экспе создаем три массива (за неимением структур) - символ\хендл\последнее время доступа\ время последнего тика.
все эксперты следят за (время посл. доступа\ время посл. тика) для всех и как только они разнятся (сбой по одному из експов) обе глобалки сбойного эксперта удаляются и он считается неактивным. его ячейки в массивах удаляются (массив перестраивается).
очередь восстанавливается
реально это будет делать эксп который стоит на самом активном графике (частые тики).
принормальном деините, каждый эксп убирает за собой
Там, где задержка "имитация работы" вставляете обращение к депозиту или к другому ресурсу.
Этот блок синхронизации можно в функцию превратить и поместить в библиотеку. Будет у Вас синхронная функция обращения к депозиту из любого советника.
Это блок атомарного доступа и никакой синхронизации. Обращаться только к депозиту так нет смысла. Вызов любой из функций параметров депозита сам по себе будет атомарным, без всяких накрутов. Если делать атомарно, то всю работу советника. Вот так вот вы и решаете задачи - думаете, что что-то сделали, а на самом деле - иллюзию.
1) Задача : каждый скрипт (советник) должен знать о наличии всех остальных.
2) Проблема : если произойдет сбой, то глобалки от сбойного будут висеть неприкаянные и очередь запнется.
3) Решение :
Каждый эксп организует 1 глобалку с именем - общий префикс + хендл окна + символ. значение глобалки - время последнего тика по этому инструменту. 2 общую глобалку со своим хендлом (после того как отработает пишет в нее свой хендл или обнуляет если самый старший)
Очередь организуем по возрастающей (хендлы), самый старший обнуляет вторую глобалку
в каждом экспе создаем три массива (за неимением структур) - символ\хендл\последнее время доступа\ время последнего тика.
все эксперты следят за (время посл. доступа\ время посл. тика) для всех и как только они разнятся (сбой по одному из експов) обе глобалки сбойного эксперта удаляются и он считается неактивным. его ячейки в массивах удаляются (массив перестраивается).
очередь восстанавливается
реально это будет делать эксп который стоит на самом активном графике (частые тики).
принормальном деините, каждый эксп убирает за собой
максимальный пропуск - один тик.
ЗЫ. а вообще лучше делать один мультивалютник
Он не поймет, слишком сверху плохо видно))) У меня решена эта задача примерно в таком стиле. Приятно, что есть кто-то, кто въехал в суть задачи. Только у меня еще очередь выстраивается, в каком порядке начали задачи выполняться в такой и выполняются дальше по кругу.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Виктор, ты не прав. Благодаря этой, несколько затянутой дискуссии, два программиста попутно отвечали на вопросы новичков, что пошло ветке только на пользу :))
Ну, я с удовольствием почитал. И было очень показательным отношение продвинутых (не знаю как уже вас теперь называть программистами или нет - запутался совсем теперь : )) ) - скажем так - специалистов, решающих продвинутые задачи : )) и их взгляды на, казалось бы, простые на первый взгляд задачи. Искренне надеюсь, что это без эмоциональных последствий дискуссия и дружеская, не смотря на все разногласия. У меня, к сожалению, разногласия (неразрешенности) тоже остались. Но я как раз тут исповедую философский подход. Если решение задачи таким путем не очевидно, значит, нужно найти иной путь. Но знать о проблематике очень полезно.
Спасибо Вам большое за дискуссию. Жалко, что не пришли к консенсусу. (Но, консенсус пока не сложился... (вспоминается песня "Там, вдали, у метро"))
И жаль, конечно, что на мои с Арлесом вопросы, не было очевидных ответов. Думаю, эти вопросы не только у нас с ним, но и у многих менее опытных спецов, которым сложно выстраивать самостоятельно и потоки и в.т., и именно поэтому они обращаются к написанным продвинутыми специалистами программам и оболочкам.
Ну, ничего. Со временем и эти вопросы разрулим. : )) Спасибо Вам большое за Ваши старания. Ведь позитивный настрой, в итоге, у всех сторон (хотя и расходящийся по способам решения). И это радует.
Кстати, в своих педагогических изысканиях я часто говорю: не все вопросы могут быть разрешены, мы часто не знаем на все ответы; поэтому они могут пока... остаться открытыми. (я пытаюсь найти деликатную концовку обсуждения) Еще раз Спасибо!Сергей, какие вопросы были неразрешены? Если это:
Т.е. отвечая на вопрос Arles , если у меня один советник произвел учет ордеров и на время "вздремнул" то в этот момент другой советник не перешедший границ выделенных средств (предположим 80% от депозита - в обоих советниках такой размер будет) выставит ордер (войдет в сделку по рынку). И когда 1-ый возобновит работу (а терминал по управлению капиталом уже был посчитан накануне), то он тоже может открыть сделку уже превышающую выделенные лимиты советником?
Если эту сит-ию (гипотетически) размножить на несколько советников, то может возникнуть такая, где Риск-Менеджмент окажется в критической сит-ии?
Я правильно понимаю данную многопоточность? - Если так, то с финансовой точки зрения это, конечно, бардак. Но, т.к. вероятность такового невелика на маленьких счетах, то это лишь гипотетически. А на больших счетах, наверное будут сами писать что-то. Но, все-таки, получается что это так?
И у меня вопрос - это официальная позиция или это лишь предположение и опыты наподобие моих?То на 378 странице есть код. Вот ещё раз:
Там, где задержка "имитация работы" вставляете обращение к депозиту или к другому ресурсу.Этот блок синхронизации можно в функцию превратить и поместить в библиотеку. Будет у Вас синхронная функция обращения к депозиту из любого советника.
Вместо индекса подставить хендл окна графика
Точно! А то с индексами не сразу сообразишь, что к чему.
Переделал.
===================
Хотя, индексация позволит правильно удалить глобальную переменную.
Надо бы в деините сделать декремент индекса. И удалять глобальную переменную, когда индекс равен нулю.
Только такой декремент не позволит дозагрузить скрипт после удаления. Индексы перепутаются.
Надо делать глобальный массив индексов всех модулей, что обращаются к ресурсу. Ну, и работать с ним.
Ещё можно сделать две глобальные переменные. Одна с последним индексом, другая с текущим количеством модулей. Индексы только увеличиваются. Пожалуй, это проще будет.
Или совсем не заморачиваться с глобальное переменной. Вручную удалять перед первым запуском.
1) Задача : каждый скрипт (советник) должен знать о наличии всех остальных.
2) Проблема : если произойдет сбой, то глобалки от сбойного будут висеть неприкаянные и очередь запнется.
3) Решение :
Каждый эксп организует 1 глобалку с именем - общий префикс + хендл окна + символ. значение глобалки - время последнего тика по этому инструменту. 2 общую глобалку со своим хендлом (после того как отработает пишет в нее свой хендл или обнуляет если самый старший)
Очередь организуем по возрастающей (хендлы), самый старший обнуляет вторую глобалку
в каждом экспе создаем три массива (за неимением структур) - символ\хендл\последнее время доступа\ время последнего тика.
все эксперты следят за (время посл. доступа\ время посл. тика) для всех и как только они разнятся (сбой по одному из експов) обе глобалки сбойного эксперта удаляются и он считается неактивным. его ячейки в массивах удаляются (массив перестраивается).
очередь восстанавливается
реально это будет делать эксп который стоит на самом активном графике (частые тики).
принормальном деините, каждый эксп убирает за собой
максимальный пропуск - один тик.
ЗЫ. а вообще лучше делать один мультивалютник
Сергей, какие вопросы были неразрешены? Если это:
То на 378 странице есть код. Вот ещё раз:
Там, где задержка "имитация работы" вставляете обращение к депозиту или к другому ресурсу.Этот блок синхронизации можно в функцию превратить и поместить в библиотеку. Будет у Вас синхронная функция обращения к депозиту из любого советника.
Это блок атомарного доступа и никакой синхронизации. Обращаться только к депозиту так нет смысла. Вызов любой из функций параметров депозита сам по себе будет атомарным, без всяких накрутов. Если делать атомарно, то всю работу советника. Вот так вот вы и решаете задачи - думаете, что что-то сделали, а на самом деле - иллюзию.
1) Задача : каждый скрипт (советник) должен знать о наличии всех остальных.
2) Проблема : если произойдет сбой, то глобалки от сбойного будут висеть неприкаянные и очередь запнется.
3) Решение :
Каждый эксп организует 1 глобалку с именем - общий префикс + хендл окна + символ. значение глобалки - время последнего тика по этому инструменту. 2 общую глобалку со своим хендлом (после того как отработает пишет в нее свой хендл или обнуляет если самый старший)
Очередь организуем по возрастающей (хендлы), самый старший обнуляет вторую глобалку
в каждом экспе создаем три массива (за неимением структур) - символ\хендл\последнее время доступа\ время последнего тика.
все эксперты следят за (время посл. доступа\ время посл. тика) для всех и как только они разнятся (сбой по одному из експов) обе глобалки сбойного эксперта удаляются и он считается неактивным. его ячейки в массивах удаляются (массив перестраивается).
очередь восстанавливается
реально это будет делать эксп который стоит на самом активном графике (частые тики).
принормальном деините, каждый эксп убирает за собой
максимальный пропуск - один тик.
ЗЫ. а вообще лучше делать один мультивалютник
Он не поймет, слишком сверху плохо видно))) У меня решена эта задача примерно в таком стиле. Приятно, что есть кто-то, кто въехал в суть задачи. Только у меня еще очередь выстраивается, в каком порядке начали задачи выполняться в такой и выполняются дальше по кругу.