Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1179
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Когда делаю вот такой запрос:
получаю вот такой результат:
2020.06.17 13:49:53.270 2020.01.02 06:50:00 Symbol EURUSD_i Digits 5 Point 1e-05
Когда делаю вот такой запрос:
получаю вот такой результат:
2020.06.17 13:51:58.787 2020.01.02 06:45:00 Symbol EURUSD_i Digits 0 Point 0.0
При этом хочу заметить, что если я не вставляю функцию Print, то вообще никаких ошибок не происходит, ордер даже не пытается модифицироваться. Как будто бы CTrade не видит мой ордер.
Проверка на символ и мэджик номер не проходит:
Результат:
2020.06.17 14:37:38.147 2020.01.02 06:50:00 Symbol Magic 0 Ticket 2
Мэджик должен быть 12345, символ евро доллар.
Почему не удается получить символ и меджик?
Если строку:
поменять на
и убрать проверку по мэджик номеру, то появляются проблемы с ценами
2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Invalid price]
2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modify #2 at 1.00000 (sl: 1.00000 tp: 1.00000) [invalid price]
2020.06.17 01:38:24.136 2020.01.02 07:40:00 Модификация BUY STOP прошла с ошибкой! Result Retcode: 10015, description of Retcode: invalid price
Голову уже себе сломал. при том что этот же код в другом советнике работает на ура.
Что я делаю не так?
у вас неверно инициализируется (или вообще не) объект класса CSymbolInfo.
если у вас нету такой строки asymbol.Name(Symbol()) то добавьте.
Если есть, дебажьте в функции Name(string symbol) что происходит.
заполнение полей m_digits итд в функции Refresh().
з.ы. судя по тому что вы дописали у вас точно asymbol неинициализирован.
Пока новый тик не пришел, перемещение кнопок не происходит. Это я глазами вижу. Как только цена изменилась, кнопки переместились.
Хотя сегодня даже на новом тике кнопки перестали перерисовываться, хотя я ничего не менял. Двигается только фон.Разъясняю - как вы говорите вы меняете координаты в ОнТик, и утверждаете что фактически кнопки перемещаются на СЛЕДУЮЩЕМ тике. На следующем от чего? от того, на котором вы поменяли координаты, или от рождества христова?
у вас неверно инициализируется (или вообще не) объект класса CSymbolInfo.
если у вас нету такой строки asymbol.Name(Symbol()) то добавьте.
Если есть, дебажьте в функции Name(string symbol) что происходит.
заполнение полей m_digits итд в функции Refresh().
з.ы. судя по тому что вы дописали у вас точно asymbol неинициализирован.
Является ли это инициализацией? При компиляции получаю следующую информацию
'Панель для торговли.mq5' Панель для торговли.mq5 1 1
'Trade.mqh' Trade.mqh 1 1
'Object.mqh' Object.mqh 1 1
'StdLibErr.mqh' StdLibErr.mqh 1 1
'OrderInfo.mqh' OrderInfo.mqh 1 1
'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1
'PositionInfo.mqh' PositionInfo.mqh 1 1
'DealInfo.mqh' DealInfo.mqh 1 1
'SymbolInfo.mqh' SymbolInfo.mqh 1 1
code generated 1 1
0 errors, 0 warnings, 3192 msec elapsed 1 1
После открытия ордера Buy Stop пересчитываю все ордера, выбираю открытый ордер и делаю проверку на совпадение символа и мэждик номера:
На этом этапе ничего не происходит, так как я уже писал выше функция asymbol.Name() почему-то не возвращает символ открытого ордера, функция aorder.Magic() возвращает значение 0 (хотя мой мэджик 121345), функция asymbol.TickSize() возвращает значение 0. То есть проверка не проходит и соответственно дальнейшая работа с ордером прекращается. Поясните пожалуйста "дебажьте в функции Name(string symbol) что происходит", не совсем понимаю эту фразу. Что нужно добавить и куда?
Разъясняю - как вы говорите вы меняете координаты в ОнТик, и утверждаете что фактически кнопки перемещаются на СЛЕДУЮЩЕМ тике. На следующем от чего? от того, на котором вы поменяли координаты, или от рождества христова?
На этом этапе ничего не происходит, так как я уже писал выше функция asymbol.Name() почему-то не возвращает символ открытого ордера, функция aorder.Magic() возвращает значение 0 (хотя мой мэджик 121345), функция asymbol.TickSize() возвращает значение 0. То есть проверка не проходит и соответственно дальнейшая работа с ордером прекращается. Поясните пожалуйста "дебажьте в функции Name(string symbol) что происходит", не совсем понимаю эту фразу. Что нужно добавить и куда?
Ошибка в индексе / тикете ордера может быть судя по магик 0. На момент обращения к структуре ордера там записаны данные не того ордера который нужен. В цикле отбора может быть что в последний ордерселект уходит следующий номер, а не нужный Вам. Из структуры ордера возвращаются данные именно последнего ордерселекта.
в самом верху кода у меня стоят строчки
Является ли это инициализацией? При компиляции получаю следующую информацию
'Панель для торговли.mq5' Панель для торговли.mq5 1 1
'Trade.mqh' Trade.mqh 1 1
'Object.mqh' Object.mqh 1 1
'StdLibErr.mqh' StdLibErr.mqh 1 1
'OrderInfo.mqh' OrderInfo.mqh 1 1
'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1
'PositionInfo.mqh' PositionInfo.mqh 1 1
'DealInfo.mqh' DealInfo.mqh 1 1
'SymbolInfo.mqh' SymbolInfo.mqh 1 1
code generated 1 1
0 errors, 0 warnings, 3192 msec elapsed 1 1
После открытия ордера Buy Stop пересчитываю все ордера, выбираю открытый ордер и делаю проверку на совпадение символа и мэждик номера:
На этом этапе ничего не происходит, так как я уже писал выше функция asymbol.Name() почему-то не возвращает символ открытого ордера, функция aorder.Magic() возвращает значение 0 (хотя мой мэджик 121345), функция asymbol.TickSize() возвращает значение 0. То есть проверка не проходит и соответственно дальнейшая работа с ордером прекращается. Поясните пожалуйста "дебажьте в функции Name(string symbol) что происходит", не совсем понимаю эту фразу. Что нужно добавить и куда?
Блин, зачем вы используете то что не понимаете (а вдруг это ядрёный чемоданчик )) )
И ещё и не додумываетесь прочесть что пишут
если у вас нету такой строки asymbol.Name(Symbol()) то добавьте.
з.ы. хотел ещё объяснить что такое инициализация, но видимо и это будет бесполезноОшибка в индексе / тикете ордера может быть судя по магик 0. На момент обращения к структуре ордера там записаны данные не того ордера который нужен. В цикле отбора может быть что в последний ордерселект уходит следующий номер, а не нужный Вам. Из структуры ордера возвращаются данные именно последнего ордерселекта.
Добрый день!
Помогите решить одну простую задачу.
Счётчик гэпов. Хочу посчитать гэпы, которые больше 10 пунктов.
Переменную "gap" сбрасывает в ноль. Не пойму почему. Я уже, что только не перепробывал. Циклы вставлял, и static - не помогает. Подозреваю, что циклы неправильно писал.
Добрый день!
Помогите решить одну простую задачу.
Счётчик гэпов. Хочу посчитать гэпы, которые больше 10 пунктов.
Переменную "gap" сбрасывает в ноль. Не пойму почему. Я уже, что только не перепробывал. Циклы вставлял, и static - не помогает. Подозреваю, что циклы неправильно писал.
Переменная gap находится в области видимости функции start - и при каждом новом тике она заново инициализируется нулём
Добрый день!
Помогите решить одну простую задачу.
Счётчик гэпов. Хочу посчитать гэпы, которые больше 10 пунктов.
Переменную "gap" сбрасывает в ноль. Не пойму почему. Я уже, что только не перепробывал. Циклы вставлял, и static - не помогает. Подозреваю, что циклы неправильно писал.