Помогите исправить ошибку (проверка на сделку)
Всем привет!
По моей проьсбе знакомый написал "торгового робота". Всё бы ничего, но есть проблема или ошибка. Мы не знаем как это исправить.
Проблема заключается в следующем - советнику задаются параемтры на открытие сделки. Стоит проверка на 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 она ещё
фальшивее не станет.
Не знаю. Больше он мне не жаловался
Может устал жаловаться))) Или убедился в несостоятельности стратегии.
возможно у Вас асинхронный режим открытия сделок, используйте синхронный
сделайте проверку на количество открытых сделок и запретите открывать больше чем нужно

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