Всем привет!
По моей проьсбе знакомый написал "торгового робота". Всё бы ничего, но есть проблема или ошибка. Мы не знаем как это исправить.
Проблема заключается в следующем - советнику задаются параемтры на открытие сделки. Стоит проверка на MagicID, то есть если сделка уже открыта, то новую не открывать. Но бывают такие моменты (когда скачет соединение с сервером или рынок закрылся/открылся) робот посылает запрос на открытие сделки, но не получает ответ. Посылает заново - опять тишина.
Ждите код ответа сервера перед посылкой очередного запроса. И на всякий случай выключите асинхронность или как там ее правильно
Евгений, благодарю за ответ. А как сделать, чтобы робот ждал ответа перед посылкой очередного запроса? Не я пишу робота, мне его знакомый пишет, но он на других языках работает. Подскажите, пожалуйста, что ему надо вставить в код, чтобы избавиться от этой проблемы.
Заранее благодарю.
Евгений, благодарю за ответ. А как сделать, чтобы робот ждал ответа перед посылкой очередного запроса? Не я пишу робота, мне его знакомый пишет, но он на других языках работает. Подскажите, пожалуйста, что ему надо вставить в код, чтобы избавиться от этой проблемы.
Заранее благодарю.
Думаю, поможет этот вот:
В начале кода, после #property, например, обратитесь к торговому классу, если это еще не сделано Вашим уважаемым программистом:
#include<Trade\Trade.mqh>
CTrade trade;
Потом уже в OnInit():
//--- какую функцию использовать для торговли: true - OrderSendAsync(), false - OrderSend() trade.SetAsyncMode(false);
Этого уже должно хватит, чтоб Ваша проблема была решена
Думаю, поможет этот вот:
В начале кода, после #property, например, обратитесь к торговому классу, если это еще не сделано Вашим уважаемым программистом:
Потом уже в OnInit():
Этого уже должно хватит, чтоб Ваша проблема была решена
Огромная Вам благодарность за отклик и совет! Побежал к программмисту делать :)
Думаю, поможет этот вот:
В начале кода, после #property, например, обратитесь к торговому классу, если это еще не сделано Вашим уважаемым программистом:
Потом уже в OnInit():
Этого уже должно хватит, чтоб Ваша проблема была решена
Это скорее всего не поможет. Судя по неопытности исполнителя, об этом он и не слышал. А по умолчанию асихронность отключена.
Это скорее всего не поможет. Судя по неопытности исполнителя, об этом он и не слышал. А по умолчанию асихронность отключена.
Не отключена. Я как то сделал человеку робота, эту асинхронность вообще не указывал. И оно ему иногда открывало много ордеров. Хотя все проверки на количество и все такое были сделаны. Я внедрил trade.SetAsyncMode(false) и помогло.
Не отключена. Я как то сделал человеку робота, эту асинхронность вообще не указывал. И оно ему иногда открывало много ордеров. Хотя все проверки на количество и все такое были сделаны. Я внедрил trade.SetAsyncMode(false) и помогло.
Даже сказать не знаю что...
void SetAsyncMode(const bool mode) { m_async_mode=mode; }
//+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CTrade::CTrade(void) : m_async_mode(false), m_magic(0), m_deviation(10), m_type_filling(ORDER_FILLING_FOK), m_log_level(LOG_LEVEL_ERRORS) { SetMarginMode(); //--- initialize protected data ClearStructures(); //--- check programm mode if(MQL5InfoInteger(MQL5_TESTING)) m_log_level=LOG_LEVEL_ALL; if(MQL5InfoInteger(MQL5_OPTIMIZATION)) m_log_level=LOG_LEVEL_NO; } //+----
В конструкторе по умолчанию асинхронность отключена.
Дальше хоть сколько назначайте переменной m_async_mod = false она ещё
фальшивее не станет.
Даже сказать не знаю что...
В конструкторе по умолчанию асинхронность отключена.
Дальше хоть сколько назначайте переменной m_async_mod = false она ещё
фальшивее не станет.
Не знаю. Больше он мне не жаловался
Может устал жаловаться))) Или убедился в несостоятельности стратегии.
возможно у Вас асинхронный режим открытия сделок, используйте синхронный
сделайте проверку на количество открытых сделок и запретите открывать больше чем нужно

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
По моей проьсбе знакомый написал "торгового робота". Всё бы ничего, но есть проблема или ошибка. Мы не знаем как это исправить.
Проблема заключается в следующем - советнику задаются параемтры на открытие сделки. Стоит проверка на MagicID, то есть если сделка уже открыта, то новую не открывать. Но бывают такие моменты (когда скачет соединение с сервером или рынок закрылся/открылся) робот посылает запрос на открытие сделки, но не получает ответ. Посылает заново - опять тишина. И вот восстанавливается соединиение и все посланные запросы на открытие сделки и не дождавшиеся ответа - открываются. Почему не срабатывает проверка на MagicID? 30-40 открытых сделок в одну сторону за 1-2 секунды - это очень, очень чревато. Может мы что то криво сделали? Люди добрые, подскажите пожалуйста, что не так и как исправить?