Спасибо за приложенный код - будем проверять. Но нам также необходимы полные исходные данные индикаторов FATL и T3. Если не затруднит, то приложите их тоже?
А тестер почему тоже самое выдает, он ведь не зависит от серверов да и использует для тестирования лишь один эксперт?
Тестер никак даже теоретически не может выдавать "TradeDispatcher: trade context is busy" - у него всегда сделки проходят (и отрабатываются на виртуальном сервере, который не выдает таких отказов).
А вот "TradeDispatcher: trade context is busy" может случаться у обычного подключенного эксперта, работающего параллельно тестируемому, из-за нехватки ресурсов процессора. Тестер (особенно на слабых компьютерах) может использовать все ресурсы процессора, ничего не оставляя остальным процессам.
Через некоторое время замечаю, что сделки открываются через одну или через ....
К сожалению, не указано конкретно - в чем проблема? Что такое - "через одну или через...". Если логика работы с ордерами не такая как задумывалась, то необходимо самостоятельно детально разобрать свой код.
Из явных проблемных мест кода эксперта: 1) не везде проверки на результат вызова OrderSelect(); 2) после Sleep() не стоит RefreshRates(), что приводит к использованию устаревших закешированных данных рынка (не забывайте, что эксперту на каждом тике выдается зафиксированный отпечаток/snapshot рынка). Через 5 секунд (Sleep(5000)) этот отпечаток с 99% гарантией не соответствует рыночным условиям. 3) как описано в статье, Sleep() при тестировании не учитывается, что может дать расхождение с реальным тестированием 4) условие проверки пересечения базируется на анализе всего двух баров, что явно недостаточно (точность плохая) 5) неструктурированный код, лучше его разбить на несколкьо функций - станет проще понять
Я погонял эксперта в разных режима моделирования, включая отладчик. Никаких проблем с нашей стороны не обнаружил. Вам необходимо более детально разобраться в своем коде.
Тестер никак даже теоретически не может выдавать "TradeDispatcher: trade context is busy" - у него всегда сделки проходят (и отрабатываются на виртуальном сервере, который не выдает таких отказов).
Я имел ввиду, что пропускает закрытие позиций, так же как и в реале.
А вот "TradeDispatcher: trade context is busy" может случаться у обычного подключенного эксперта, работающего параллельно тестируемому, из-за нехватки ресурсов процессора. Тестер (особенно на слабых компьютерах) может использовать все ресурсы процессора, ничего не оставляя остальным процессам.
Машина у меня неслабая и ничего, кроме висящего советника в терминале не делается. Хотя попробую еще разгрузить комп.
К сожалению, не указано конкретно - в чем проблема? Что такое - "через одну или через...". Если логика работы с ордерами не такая как задумывалась, то необходимо самостоятельно детально разобрать свой код.
Проблема в том, что советник обычный переворотный на пересечениях. Переворот это ведь закрытие позиции и открытие противоположной, если я правильно понимаю. Так вот, иногда закрытие не происходит, а просто открывается противоположная сделка, а оставшаяся незакрытая просто забывается, и закрывается по стопу или профиту, пока советник торгует дальше нормально. Таких "незакрытий" получается около 5-6 на 60-70 сделок. Портят всю картину.
Renat 21.10.05 17:50 Тестер никак даже теоретически не может выдавать "TradeDispatcher: trade context is busy" - у него всегда сделки проходят (и отрабатываются на виртуальном сервере, который не выдает таких отказов).
пока не столкнулся сам, даже не верил.... Значит, ситуация такая: Есть советник, торгующий на демо-счёте без проблем - все операции проходят удачно, даже при одновременной работе 4-8 советников. Для тестирования у меня отдельный терминал - там история своя, файлы сгенерённые и подключения к серверу нет. Пытаюсь тестировать - ни одной операции. OrderSend возвращает ошибку №146. На этом терминале в онлайне _не_работает_ни_один_эксперт_. Если бы у меня не было порверок на ошибки, наверное и не заметил бы - ни одного сообщения от тестера, только мои принты...
Билд 184, файлы сгенерированы period_converter-ом из минуток. Код эксперта, к сожелению, выложить не могу... Из особенностей - установка 2-х отложенных ордеров подряд, остальное - стандартно...
Другие советники тестируются.. Сейчас попробую раскопать проблемное место. Но ошибка явно есть, кривая такая =)
Спасибо за приложенный код - будем проверять. Но нам также необходимы полные исходные данные индикаторов FATL и T3. Если не затруднит, то приложите их тоже?
Советник то небольшой, и алгоритм несложный.
Тестер никак даже теоретически не может выдавать "TradeDispatcher: trade context is busy" - у него всегда сделки проходят (и отрабатываются на виртуальном сервере, который не выдает таких отказов).
А вот "TradeDispatcher: trade context is busy" может случаться у обычного подключенного эксперта, работающего параллельно тестируемому, из-за нехватки ресурсов процессора. Тестер (особенно на слабых компьютерах) может использовать все ресурсы процессора, ничего не оставляя остальным процессам.
К сожалению, не указано конкретно - в чем проблема? Что такое - "через одну или через...". Если логика работы с ордерами не такая как задумывалась, то необходимо самостоятельно детально разобрать свой код.
Из явных проблемных мест кода эксперта:
1) не везде проверки на результат вызова OrderSelect();
2) после Sleep() не стоит RefreshRates(), что приводит к использованию устаревших закешированных данных рынка (не забывайте, что эксперту на каждом тике выдается зафиксированный отпечаток/snapshot рынка). Через 5 секунд (Sleep(5000)) этот отпечаток с 99% гарантией не соответствует рыночным условиям.
3) как описано в статье, Sleep() при тестировании не учитывается, что может дать расхождение с реальным тестированием
4) условие проверки пересечения базируется на анализе всего двух баров, что явно недостаточно (точность плохая)
5) неструктурированный код, лучше его разбить на несколкьо функций - станет проще понять
Я погонял эксперта в разных режима моделирования, включая отладчик. Никаких проблем с нашей стороны не обнаружил. Вам необходимо более детально разобраться в своем коде.
Я имел ввиду, что пропускает закрытие позиций, так же как и в реале.
Машина у меня неслабая и ничего, кроме висящего советника в терминале не делается. Хотя попробую еще разгрузить комп.
Проблема в том, что советник обычный переворотный на пересечениях. Переворот это ведь закрытие позиции и открытие противоположной, если я правильно понимаю.
Так вот, иногда закрытие не происходит, а просто открывается противоположная сделка, а оставшаяся незакрытая просто забывается, и закрывается по стопу или профиту, пока советник торгует дальше нормально. Таких "незакрытий" получается около 5-6 на 60-70 сделок. Портят всю картину.
Тестер никак даже теоретически не может выдавать "TradeDispatcher: trade context is busy" - у него всегда сделки проходят (и отрабатываются на виртуальном сервере, который не выдает таких отказов).
пока не столкнулся сам, даже не верил....
Значит, ситуация такая:
Есть советник, торгующий на демо-счёте без проблем - все операции проходят удачно, даже при одновременной работе 4-8 советников.
Для тестирования у меня отдельный терминал - там история своя, файлы сгенерённые и подключения к серверу нет. Пытаюсь тестировать - ни одной операции. OrderSend возвращает ошибку №146. На этом терминале в онлайне _не_работает_ни_один_эксперт_.
Если бы у меня не было порверок на ошибки, наверное и не заметил бы - ни одного сообщения от тестера, только мои принты...
Билд 184, файлы сгенерированы period_converter-ом из минуток. Код эксперта, к сожелению, выложить не могу... Из особенностей - установка 2-х отложенных ордеров подряд, остальное - стандартно...
Другие советники тестируются..
Сейчас попробую раскопать проблемное место. Но ошибка явно есть, кривая такая =)