Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо большое, я ошибки обрабатываю, приходит сообщение - неправильная цена, а я -то никак не могу понять в чём дело.
тогда еще добавьте строку
в начало функции - очистить буфер ошибок: иногда можно зачитать "чужую" ошибку, а так при старте функции буфер ошибок будет очищен.
Это не обязательно, но если программы для реала, то весьма желательно все делать максимально корректно.
Удачи.
тогда еще добавьте строку
в начало функции - очистить буфер ошибок: иногда можно зачитать "чужую" ошибку, а так при старте функции буфер ошибок будет очищен.
Это не обязательно, но если программы для реала, то весьма желательно все делать максимально корректно.
Удачи.
Да, спасибо, в реальных прогах я так и делаю.
Люди добрые, подскажите, почему функция возвращает 0, хотя открытых ордеров нет. Должна же выдаваться какая-то ошибка?
Возвращает общее количество открытых и отложенных ордеров.
Всё ещё пишешь на заказ?
-- Использовать имена, начинающиеся с подчеркивания и двойного подчеркивания -- плохой тон. Лучше уж тогда подчеркивание в конце.
-- Почему _Type_Order строка? Имхо, нереально неудобно. Тогда приводить бы надо. Т.к. если написать "Sell" или "sell" ничего пахать не будет.
-- Если хотите ошибку, сделайте ошибку:
ERROR = -1;
А лучше так
--
Почему break? Допустим, миллисекунду назад ордер закрылся по ТП -- что из-за этого остальные закрывать не надо? Лучше так:
--
Строка хуже, чем бесполезная -- она вредная. Наверное имелось в виду это?
--
Т.е. если вдруг ордер закрыть не получается "отпускаем руль, закрываем глаза и начинаем кричать".
Остальные закрывать не надо? Повторно попытаться не надо?
-- К чему здесь вообще возврат ошибки? Гораздо уместнее вернуть к примеру true если все удалось закрыть и false если нет.
Вроде все пока.
-- Использовать имена, начинающиеся с подчеркивания и двойного подчеркивания -- плохой тон. Лучше уж тогда подчеркивание в конце.
Используя внутри функций имена начинающиеся с подчёркивания я исключаю риск переопределения переменных. Т.о. в start() я спокойно могу использовать теже самые имена, но без подчёркивания. что увеличивает прозрачность кода.
- Почему _Type_Order строка? Имхо, нереально неудобно. Тогда приводить бы надо. Т.к. если написать "Sell" или "sell" ничего пахать не будет.
Вы, конечно, правы. Однако использование строки увеличивает прозрачность кода и при тех объёмах кода, которые я имею на данный момент нет необходимости в приведении. Когда я столкнусь реально с этой проблемой, то сделаю, а пока в этом нет необходимости. Я просто пишу SELL или BUY.
Вы, безусловно правы, спасибо.
функция IsTradeContextBusy() информирует только о занятости потока, IsTradeAllowed() несколько шире
Т.е. если вдруг ордер закрыть не получается "отпускаем руль, закрываем глаза и начинаем кричать"
да, на период отладки именно так
К чему здесь вообще возврат ошибки? Гораздо уместнее вернуть к примеру true если все удалось закрыть и false если нет.
Спасибо, отвечая вам я, похоже, понял в чём ошибка. Сейчас проверю и отпишусь.
Ошибка была в следующем:
переменная bool _Result не инициализирована, значит там будет false, таким образом, поскольку не выполнилось ни одно из условий мы не изменили переменную _Result, а в ней уже false. И функция переходит к обработке ошибок, которых реально не было.
Я исправил функцию и выкладываю её здесь, думаю она кому-нибудь может пригодиться.
PS Модераторам. Такая ветка невзначай получилась - готовый самоучитель по правильному закрытию ордеров. Может стоит её переименовать, типа - как правильно закрыть ордера с разбором примеров?
PPS Всем принявшим участие огромное СПАСИБО. Возможно вопросы будут ещё.
Ошибка была в следующем:
переменная bool _Result не инициализирована, значит там будет false, таким образом, поскольку не выполнилось ни одно из условий мы не изменили переменную _Result, а в ней уже false. И функция переходит к обработке ошибок, которых реально не было.
Я исправил функцию и выкладываю её здесь, думаю она кому-нибудь может пригодиться.
PS Модераторам. Такая ветка невзначай получилась - готовый самоучитель по правильному закрытию ордеров. Может стоит её переименовать, типа - как правильно закрыть ордера с разбором примеров?
PPS Всем принявшим участие огромное СПАСИБО. Возможно вопросы будут ещё.
Если посмотреть в CodeBase и внимательно читать форум - то примеров правильного закрытия ордеров - по-более сотни будет, но это не значит что все ветки надо сразу же переименовывать. Героев хватает.
Ошибка была в следующем:
переменная bool _Result не инициализирована, значит там будет false, таким образом, поскольку не выполнилось ни одно из условий мы не изменили переменную _Result, а в ней уже false. И функция переходит к обработке ошибок, которых реально не было.
Я исправил функцию и выкладываю её здесь, думаю она кому-нибудь может пригодиться.
PS Модераторам. Такая ветка невзначай получилась - готовый самоучитель по правильному закрытию ордеров. Может стоит её переименовать, типа - как правильно закрыть ордера с разбором примеров?
PPS Всем принявшим участие огромное СПАСИБО. Возможно вопросы будут ещё.
ИМХО : Функция получилась непонятная по самой логике. Если для тестера, то много лишнего, если для реала, то стоит обрабатывать ошибки. Возвращаемое значение вообще смысла не имеет - Вы сообщаете на внешний уровень (на уровень вызова), что вызов завершился ошибкой, саму ошибку при этом теряете, ну написали в журнал - как эксперт это считает ?
Как бы было правильней: (опять ИМХО)
1. Считывать и сохранять номер ошибки.
2. Разделять ошибки на устранимые и неустранимые. Для этого сделать обработчик - те ошибки при возникновении которых ордер все-таки можно закрыть (занят поток, обрыв связи ... и т.д.) обрабатывать прямо на месте. У меня так сделано (сначала неустранимые, потом то, что можно "исправить"):
3. В случае возникновения неустранимой ошибки возвращать не флаг наличия ошибки, а ее номер для того, чтобы эту ситуацию можно было обработать во внешнем модуле. При анализе результата операции :
Удачи.
ЗЫ по поводу break/continue
вопрос спорный. Если ордера еще есть, то при срабатывании тейка/стопа изменится нумерация ордеров - то есть ордер все равно будет выбран: Вы же выбираете по порядковому номеру, а не по тикету. Если ордер не выбран - это значит, что ордеров нет. Поскольку Вы не проверяете каждый раз количество ордеров, то прогоните цикл в холостую некоторое количество раз.