Ошибки, баги, вопросы - страница 444

 
Interesting:
Торговые и котировочные сессии не помогут проблему решить?

К сожалению, нет. В соответствии со спецификацией контракта, котировочная сессия начинается в понедельник с 00:00:00.
Собственно, здесь Rosh дает ответ, что начало котировочной сессии не гарантирует наличие котировок в ней. Что, в принципе, понятно.

Пока использую "костыль" в виде следующей проверки:

input int TTL = 10; // Время "жизни" котировки
...
void Trade() {
  ...
  if (TimeCurrent() - SymbolInfoInteger(Instrumet, SYMBOL_TIME) > TTL) return;
  ...
  // Далее отправка торгового приказа на сервер.
}

Буду признателен, если кто поделится более изящным решением (все мультивалютники должны были столкнуться с этим).

П.С.
Изящный вариант предложил Konstantin Gruzdev в своей статье Реализация мультивалютного режима в MetaTrader 5.
Но на чемпионате данный вариант не пройдет по требованиям.

 
voix_kas:

Ыыы... задел за живое. :)) Последнюю строку вручную правил в сообщении на форуме, так что простительно. =)
Кстати, твой код тоже не компилируется (в последней строке закрывающую скобку забыл). :-Р
К тому же, работает он в 2-3 раза медленнее (сейчас замерил на скрипте), а качество проверки такое же. :-Р 

В общем, пока нет грамотного кода по определению значащего младшего разряда, воспользуюсь советом Компостера: нормализировать объем до 8-го знака после запятой.
Надеюсь, подводных камней не появится.

:)
 
voix_kas:
OrderCheck не помогает?


 

В справке:

Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить.

таки совсем-совсем нельзя, или если очень хочется, то можно, но осторожно? :)


Проблема с доступом к данным другого символа из индикатора.

при наличии отсутствия тиков)

 
Swan:
 OrderCheck не помогает?

Неа. Перед торговлей пишу строку:

if (!OrderCheck(TradeRequest, TradeCheckResult) || (TradeCheckResult.retcode != TRADE_RETCODE_DONE)) return;

В логах все-равно ошибка. :(

 

 

В догонку про нормализацию лота

Ребята, зачем теоретизировать?

Ситуация, когда шаг лота будет больше минимального лота - абсурдна. Ну, представьте: мин = 0.1, шаг = 1.0. И что, разрешены только лоты 1.1, 2.1, 3.1, ...? Это бред.

Если упражняться в арифметике и программировании, то ваши варианты победят. Но если речь идет о прикладном (в торговом смысле) программировании, то при lot_step > lot_min нужно завершать программу с критической ошибкой и срочно менять брокера, т.к. у этого не хватает денег даже на зарплату человеку, который бы мог нормально настроить сервер ;)

Всего должно быть в меру. Мой вариант работает на реалах больше 5 лет, с разными брокерами, типами счетов, инструментами - ошибки не было ни разу.
Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 

komposter
Почему же абсурд? Возьмем простой пример: минимальный лот = 1.0, минимальный шаг = 0.3. Требования удовлетворяют принципу "безабсурдности" (min_lot >= lot_step). :)  
Вы передаете в функцию нормализации объем 1.3 лота. Из нее Вам возвращается 1.2 лота.
Модернизированная редакция вернет 1.3. В ней шаги идут "правильно": от минимального лота, а не от нуля.

Другой вопрос - наличие "в жизни" шагов, отличных от "1.0, 0.1, 0.01 и т.д.".
Тут, как мне кажется, цена вопроса (потеря производительности) ничтожна мала, по сравнению с решением возможной гипотетической ошибкой. ИМХО.
В конце-концов, так просто правильнее считать: шаги от минимального лота, а не от нуля.

 
Где-нибудь случайно нет готового кода который бы покупал максимально возможное количество лотов по текущему символу и цене на заданное количество денег (например 1234.56 долларов - единственный входной параметр). Внутри должны быть всевозможные проверки на максимальный, минимальный объёмы, нормализация, учёт плеча, достаточность средств и т.д. и т.п. Главное, чтобы код совершил покупку и не утомлял меня тем, что нет денег (покупай насколько есть), что какая-то проверка не прошла (добейся чтобы прошла), что ордер выставлен, а покупки не было(сдохни, но без покупки не возвращайся) и т.д.  Я понимаю, что где-то в классах типа CTrade это есть. Но так просто оттуда не вдруг чего скопируешь. Хочется заниматься своим алгоритмом, а не языком MQL5.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
voix_kas:

Неа. Перед торговлей пишу строку:

В логах все-равно ошибка. :(

Посмотрел, на чемпионатных счетах все инструменты торгуются в одно время. Зарегистрируйтесь)


TradeCheckResult.retcode != TRADE_RETCODE_DONE

как-то не уверен я в правильности этого условия..


можно ещё попробовать:

if(текущая цена == 0.0) return;

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
voix_kas:

komposter
Почему же абсурд? Возьмем простой пример: минимальный лот = 1.0, минимальный шаг = 0.3. Требования удовлетворяют принципу "безабсурдности" (min_lot >= lot_step). :)  
Вы передаете в функцию нормализации объем 1.3 лота. Из нее Вам возвращается 1.2 лота.
Модернизированная редакция вернет 1.3. В ней шаги идут "правильно": от минимального лота, а не от нуля.

Другой вопрос - наличие "в жизни" шагов, отличных от "1.0, 0.1, 0.01 и т.д.".
Тут, как мне кажется, цена вопроса (потеря производительности) ничтожна мала, по сравнению с решением возможной гипотетической ошибкой. ИМХО.
В конце-концов, так просто правильнее считать: шаги от минимального лота, а не от нуля.

"минимальный лот = 1.0, минимальный шаг = 0.3" - это тоже абсурд. Шаг должен быть кратным мин. лоту.

Я уже высказал свое мнение - в конкурсе математиков и программистов вариант с вычитанием мин_лота победит, для реальной торговли он не нужен.

Предмета для дальнейшей дисскуссии не вижу, все остались при своих ;)

Причина обращения: