Запустил у себя копирование сделок, повесил по советнику (сервер/клиент) на графики каждого торгуемого символа для работы мультивалютного советника, советник нагенерил много сделок за вечер-ночь-утро, но по скопированным объемам смотрю таки какая-то сделка потерялась..
Т.е. как минимум надо добавить периодическую проверку на необходимость проведения промежуточной синхронизации объемов позиций сервера и клиентов, по аналогии с тем, как работает это в сервисе Сигналов.
Ну и после аварийной перезагрузки терминалов сервер рассылает зачем-то мессаги клиентам, что у него ноль позиций (хотя это не так), и клиенты послушно закрывают позиции у себя. Такие вот наблюдения.
А за статью, с примерами, спасибо, буду себе делать сервис сигналов на их базе.
З.Ы.:
Очевидно, что данные примеры сервера, рассылающие любому клиенту информацию, не являются оптимальными. К примеру, вы наверняка захотите ограничить доступ к своей информации. Значит, как минимум, к обязательным требованиям необходимо отнести:
авторизацию клиента (логин/пароль);
защиту от подбора пароля (бан/блокирование логина или IP).
как сие можно реализовать? нулевые познания пока в этом (даже запустив на локальной машине сервер/клиент, к серверу подключился какой-то левый клиент)
Several methods of protecting your code have been proposed over the past, but were either too simple (less secure), required re-compilation of your code for each new customer (ok if you only plan on having a dozen or so customers) or far too complicated involving a remote host to validate the client terminal. Here I propose a simple password...
Ну и после аварийной перезагрузки терминалов сервер рассылает зачем-то мессаги клиентам, что у него ноль позиций (хотя это не так), и клиенты послушно закрывают позиции у себя. Такие вот наблюдения.
Я так понял, что всякие недоразумения с позициями происходят из-за моментов, когда терминал запустился, но ещё не законнектился к торговому серверу, а сокеты поднимаются сразу и либо сервер отправляет информацию об отсутствие позиций клиентам и те кроют имеющиеся у себя, либо клиент получает информация от сервера о позициях и пока не видит своих - спешит их открыть, задваивая имеющиеся объемы. Я так понимаю предварительная проверка на наличие связи терминала с торговым сервером решит эти недоразумения.
В остальном стабильность работы сокетов радует.
Добавлено:
Один черт таки проскакивают от сервера сообщения с нулевыми объемами позиций, что не есть правда, не пойму как такое происходит и где эти нули берутся..
2018.02.1017:42:49.549 signalclient (USDCHF,M15) connect OK
2018.02.1017:42:49.555 signalclient (USDCAD,M15) connect OK
2018.02.1017:42:49.555 signalclient (NZDUSD,M15) connect OK
2018.02.1017:42:49.555 signalclient (USDJPY,M15) connect OK
2018.02.1017:42:49.581 signalclient (AUDUSD,M15) connect OK
2018.02.1017:42:49.582 signalclient (GBPUSD,M15) connect OK
2018.02.1017:42:49.596 signalclient (EURUSD,M15) connect OK
2018.02.1017:42:50.562 signalclient (USDCHF,M15) received msg from server: <<USDCHF|0.00>>
2018.02.1017:42:50.562 signalclient (NZDUSD,M15) received msg from server: <<NZDUSD|0.00>>
2018.02.1017:42:50.562 signalclient (NZDUSD,M15) server position: NZDUSD|0.002018.02.1017:42:50.562 signalclient (USDJPY,M15) received msg from server: <<USDJPY|0.00>>
2018.02.1017:42:50.562 signalclient (USDCHF,M15) server position: USDCHF|0.002018.02.1017:42:50.562 signalclient (USDCAD,M15) received msg from server: <<USDCAD|0.00>>
2018.02.1017:42:50.562 signalclient (USDJPY,M15) server position: USDJPY|0.002018.02.1017:42:50.562 signalclient (USDCAD,M15) server position: USDCAD|0.002018.02.1017:42:50.574 signalclient (USDCAD,M15) full close position
2018.02.1017:42:50.575 signalclient (USDJPY,M15) nothing change
2018.02.1017:42:50.575 signalclient (NZDUSD,M15) full close position
2018.02.1017:42:50.577 signalclient (USDCHF,M15) nothing change
2018.02.1017:42:50.593 signalclient (AUDUSD,M15) received msg from server: <<AUDUSD|0.00>>
2018.02.1017:42:50.593 signalclient (AUDUSD,M15) server position: AUDUSD|0.002018.02.1017:42:50.594 signalclient (GBPUSD,M15) received msg from server: <<GBPUSD|0.00>>
2018.02.1017:42:50.594 signalclient (GBPUSD,M15) server position: GBPUSD|0.002018.02.1017:42:50.600 signalclient (GBPUSD,M15) full close position
2018.02.1017:42:50.601 signalclient (AUDUSD,M15) full close position
2018.02.1017:42:50.609 signalclient (EURUSD,M15) received msg from server: <<EURUSD|0.00>>
2018.02.1017:42:50.609 signalclient (EURUSD,M15) server position: EURUSD|0.002018.02.1017:42:50.613 signalclient (EURUSD,M15) nothing change
2018.02.1017:42:50.701 signalclient (USDCAD,M15) CTrade::OrderSend: market sell 3.54 USDCAD [market closed]
2018.02.1017:42:50.701 signalclient (NZDUSD,M15) CTrade::OrderSend: market sell 2.50 NZDUSD [market closed]
2018.02.1017:42:50.705 signalclient (GBPUSD,M15) CTrade::OrderSend: market sell 0.10 GBPUSD [market closed]
2018.02.1017:42:50.705 signalclient (AUDUSD,M15) CTrade::OrderSend: market buy 1.27 AUDUSD [market closed]
Если бы не закрытый рынок позиции схлопнулись бы, зачем-то..
З.Ы.: и такое через раз, раз перегрузишь терминалы - нормально всё, как и должно, а другой - позакрывает всё в ноль..
Алексей ( @o_o ) подскажи, если знаешь, куда копать, плиз.
Последующая перезагрузка терминалов, и никаких проблем, всё отработало как и должно..
2018.02.1017:51:17.896 signalclient (EURUSD,M15) close socket
2018.02.1017:51:17.896 signalclient (AUDUSD,M15) close socket
2018.02.1017:51:17.896 signalclient (USDJPY,M15) close socket
2018.02.1017:51:17.898 signalclient (USDCAD,M15) close socket
2018.02.1017:51:17.899 signalclient (NZDUSD,M15) close socket
2018.02.1017:51:17.900 signalclient (GBPUSD,M15) close socket
2018.02.1017:51:17.901 signalclient (USDCHF,M15) close socket
2018.02.1017:52:02.337 signalclient (AUDUSD,M15) connect OK
2018.02.1017:52:02.340 signalclient (USDCHF,M15) connect OK
2018.02.1017:52:02.340 signalclient (USDCAD,M15) connect OK
2018.02.1017:52:02.432 signalclient (EURUSD,M15) connect OK
2018.02.1017:52:02.481 signalclient (GBPUSD,M15) connect OK
2018.02.1017:52:02.481 signalclient (NZDUSD,M15) connect OK
2018.02.1017:52:02.665 signalclient (USDJPY,M15) connect OK
2018.02.1017:52:03.350 signalclient (AUDUSD,M15) received msg from server: <<AUDUSD|-1.27>>
2018.02.1017:52:03.350 signalclient (USDCHF,M15) received msg from server: <<USDCHF|0.00>>
2018.02.1017:52:03.350 signalclient (USDCHF,M15) server position: USDCHF|0.002018.02.1017:52:03.350 signalclient (USDCAD,M15) received msg from server: <<USDCAD|3.54>>
2018.02.1017:52:03.350 signalclient (AUDUSD,M15) server position: AUDUSD|-1.272018.02.1017:52:03.350 signalclient (USDCAD,M15) server position: USDCAD|3.542018.02.1017:52:03.360 signalclient (AUDUSD,M15) nothing change
2018.02.1017:52:03.360 signalclient (USDCAD,M15) nothing change
2018.02.1017:52:03.360 signalclient (USDCHF,M15) nothing change
2018.02.1017:52:03.444 signalclient (EURUSD,M15) received msg from server: <<EURUSD|0.00>>
2018.02.1017:52:03.444 signalclient (EURUSD,M15) server position: EURUSD|0.002018.02.1017:52:03.449 signalclient (EURUSD,M15) nothing change
2018.02.1017:52:03.492 signalclient (GBPUSD,M15) received msg from server: <<GBPUSD|0.10>>
2018.02.1017:52:03.492 signalclient (NZDUSD,M15) received msg from server: <<NZDUSD|2.50>>
2018.02.1017:52:03.492 signalclient (NZDUSD,M15) server position: NZDUSD|2.502018.02.1017:52:03.492 signalclient (GBPUSD,M15) server position: GBPUSD|0.102018.02.1017:52:03.498 signalclient (NZDUSD,M15) nothing change
2018.02.1017:52:03.498 signalclient (GBPUSD,M15) nothing change
2018.02.1017:52:03.679 signalclient (USDJPY,M15) received msg from server: <<USDJPY|0.00>>
2018.02.1017:52:03.679 signalclient (USDJPY,M15) server position: USDJPY|0.002018.02.1017:52:03.683 signalclient (USDJPY,M15) nothing change
Здравствуйте, Этот код работает на MQL4?
Я пытаюсь перенести его на mql4, и когда функция DLL bind() вызывается в функции MQL StartServer, она выдает мне следующее сообщение:
Еще одна суперполезная статья!
Этот вариант гораздо удобнее файлов и БД.
Спасибо камрад ;)
Привет, отлично работает на MT4.
Спасибо, друг. Невероятный код!
Здравствуйте, пытаюсь перевести это на MQL4, но столкнулся с проблемами из-за требования Trade.mqh на signalclient. Как вы справились с этой задачей?
Если можно, поделитесь, пожалуйста, версией MT4, это поможет новичкам вроде меня.
С уважением,
Запустил у себя копирование сделок, повесил по советнику (сервер/клиент) на графики каждого торгуемого символа для работы мультивалютного советника, советник нагенерил много сделок за вечер-ночь-утро, но по скопированным объемам смотрю таки какая-то сделка потерялась..
Т.е. как минимум надо добавить периодическую проверку на необходимость проведения промежуточной синхронизации объемов позиций сервера и клиентов, по аналогии с тем, как работает это в сервисе Сигналов.
Ну и после аварийной перезагрузки терминалов сервер рассылает зачем-то мессаги клиентам, что у него ноль позиций (хотя это не так), и клиенты послушно закрывают позиции у себя. Такие вот наблюдения.
А за статью, с примерами, спасибо, буду себе делать сервис сигналов на их базе.
З.Ы.:
Очевидно, что данные примеры сервера, рассылающие любому клиенту информацию, не являются оптимальными. К примеру, вы наверняка захотите ограничить доступ к своей информации. Значит, как минимум, к обязательным требованиям необходимо отнести:
как сие можно реализовать? нулевые познания пока в этом (даже запустив на локальной машине сервер/клиент, к серверу подключился какой-то левый клиент)
как сие можно реализовать? нулевые познания пока в этом (даже запустив на локальной машине сервер/клиент, к серверу подключился какой-то левый клиент)
https://www.mql5.com/en/code/15534
Спасибо, пошел разбираться.
Ну и после аварийной перезагрузки терминалов сервер рассылает зачем-то мессаги клиентам, что у него ноль позиций (хотя это не так), и клиенты послушно закрывают позиции у себя. Такие вот наблюдения.
Я так понял, что всякие недоразумения с позициями происходят из-за моментов, когда терминал запустился, но ещё не законнектился к торговому серверу, а сокеты поднимаются сразу и либо сервер отправляет информацию об отсутствие позиций клиентам и те кроют имеющиеся у себя, либо клиент получает информация от сервера о позициях и пока не видит своих - спешит их открыть, задваивая имеющиеся объемы. Я так понимаю предварительная проверка на наличие связи терминала с торговым сервером решит эти недоразумения.
В остальном стабильность работы сокетов радует.
Добавлено:
Один черт таки проскакивают от сервера сообщения с нулевыми объемами позиций, что не есть правда, не пойму как такое происходит и где эти нули берутся..
Если бы не закрытый рынок позиции схлопнулись бы, зачем-то..
З.Ы.: и такое через раз, раз перегрузишь терминалы - нормально всё, как и должно, а другой - позакрывает всё в ноль..
Алексей ( @o_o ) подскажи, если знаешь, куда копать, плиз.
Последующая перезагрузка терминалов, и никаких проблем, всё отработало как и должно..
копать в сервере. там где он определяет сколько у него открыто лотов по символу
Добавить проверки на ошибки MQL функций запроса позиций и т.д.
Там же повставлять распринтовку, чтоб видеть что именно MQL вернул нули, а не сокет тупанул
Убрал, для начала, из OnInit()-а OnTrade(), возможно на этом чехарда и закончится.
З.Ы.: Не закончилась. Но пара проверок на наличие связи терминала с торговым сервером вроде решили проблему.
Привет всем,
Я компилирую на MQL5 и постоянно получаю ошибку:
в строке:
EDIT:
Для тех, кому интересно, я решил проблему, вручную скопировав поля из одной структуры в другую.
Вот код:
Добавлю, что у меня было много ошибок компиляции на некоторых кодах ошибок WSA, которые мне пришлось импортировать вручную из winsock.h, и на функции: