Пытаюсь сделать обновление своего программного продукта.
При автоматическом тестировании все отлично - ошибок нету.
А вот от модераторов пришел ответ
Я добавил проверку по AccountInfoInteger(ACCOUNT_LIMIT_ORDERS).
Хотя, как написано в документации, это максимально количество ОТЛОЖЕННЫХ ордеров.
У меня в справочнике написано так:
Количество открытых и отложенных ордеров достигло предела, установленного брокером |
У меня они не используются. Использую только РЫНОЧНЫЕ (BUY и SELL).
Все равно ошибка повторяется. Как минимум по одному из символов (EURUSD) ошибки нету.
Сколько ни тестировал различных брокеров, AccountInfoInteger(ACCOUNT_LIMIT_ORDERS) везде выдает не менее 50.
Где еще нужна проверка? и какая проверка?
Вот примерный код
long maxcount;
int OnInit() {
// делаем что-то
maxcount = MathMin(13, AccountInfoInteger(ACCOUNT_LIMIT_ORDERS));
if (maxcount == 0) maxcount = 13;
// делаем что-то
}
void OnTick () {
// делаем что-то
int count = 0;
for (int i = 0; i < OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && (OrderCloseTime() == 0)) {
count++;
if (OrderSymbol() != Symbol()) continue;
// делаем что-то
}
}
// делаем что-то
if (count >= maxcount) return;
// БЛОК ОТКРЫТИЯ ОРДЕРОВ
}
Вот примерный код
long maxcount;
int OnInit() {
// делаем что-то
maxcount = MathMin(13, AccountInfoInteger(ACCOUNT_LIMIT_ORDERS));
if (maxcount == 0) maxcount = 13;
// делаем что-то
}
Вторая часть по сути верная. В первой части мешает вот это:
if (maxcount == 0) maxcount = 13;
Ведь если не удалось получить значение лимита, то это ошибка. В таком случае нельзя запускать эксперт вообще:
if (maxcount == 0) { Alert("Фатальная ошибка терминала - лимит ордеров не установлен."); return INIT_FAILED; }
Вторая часть по сути верная. В первой части мешает вот это:
Ведь если не удалось получить значение лимита, то это ошибка. В таком случае нельзя запускать эксперт вообще:
А где написано, что 0 это ошибка?
Наоборот - 0 ОГРАНИЧЕНИЙ НЕТ
Максимально допустимое количество действующих отложенных ордеров (0-ограничений нет) |
А где написано, что 0 это ошибка?
Когда терминал возвращает 0 в размере пункта, то в документации тоже нигде не написано, что это ошибка. Пользуемся чисто здравым смыслом.
Uladzimir Kirychenka:
Наоборот - 0 ОГРАНИЧЕНИЙ НЕТ
Я пока не видел бесконечной памяти ни у одного компьютера. Поэтому именно здесь не верю тому, что написано в документации. Есть большая вероятность того, что это поле попросту не заполнено на стороне сервера. Таким образом, это ошибка.
Когда терминал возвращает 0 в размере пункта, то в документации тоже нигде не написано, что это ошибка. Пользуемся чисто здравым смыслом.
Я пока не видел бесконечной памяти ни у одного компьютера. Поэтому именно здесь не верю тому, что написано в документации. Есть большая вероятность того, что это поле попросту не заполнено на стороне сервера. Таким образом, это ошибка.
Есть логика в ваших словах. Попробую. Результат сообщу позже.
Максимально допустимое количество действующих отложенных ордеров (0-ограничений нет) |
Кстати, по-моему уже поднималась тема о том, что в справке допущена неточность. Точный вариант такой:
ACCOUNT_LIMIT_ORDERS |
Максимально допустимое количество действующих и отложенных ордеров (0-ограничений нет) |
Как и обещал делюсь результатом:
Похоже настроено, что количество ордеров должно быть не более AccountInfoInteger(ACCOUNT_LIMIT_ORDERS)-1. Потому что при открытии AccountInfoInteger(ACCOUNT_LIMIT_ORDERS) ордера уже сообщает об ошибке.
Например: если AccountInfoInteger(ACCOUNT_LIMIT_ORDERS) возвращает 10, то при открытии 10 (а не 11 !!!!) ордера уже ошибка. Может это особенность работы с металлами, может есть еще какой-то скрытый ордер для внутреннего использования.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пытаюсь сделать обновление своего программного продукта.
При автоматическом тестировании все отлично - ошибок нету.
А вот от модераторов пришел ответ
Я добавил проверку по AccountInfoInteger(ACCOUNT_LIMIT_ORDERS).
Хотя, как написано в документации, это максимально количество ОТЛОЖЕННЫХ ордеров.
У меня они не используются. Использую только РЫНОЧНЫЕ (BUY и SELL).
Все равно ошибка повторяется. Как минимум по одному из символов (EURUSD) ошибки нету.
Сколько ни тестировал различных брокеров, AccountInfoInteger(ACCOUNT_LIMIT_ORDERS) везде выдает не менее 50.
Где еще нужна проверка? и какая проверка?