2020.06.17 13:49:53.2702020.01.02 06:50:00 Symbol EURUSD_i Digits 5 Point 1e-05
Когда делаю вот такой запрос:
получаю вот такой результат:
2020.06.17 13:51:58.7872020.01.02 06:45:00 Symbol EURUSD_i Digits 0 Point 0.0
При этом хочу заметить, что если я не вставляю функцию Print, то вообще никаких ошибок не происходит, ордер даже не пытается модифицироваться. Как будто бы CTrade не видит мой ордер.
Проверка на символ и мэджик номер не проходит:
Результат:
2020.06.17 14:37:38.1472020.01.02 06:50:00 Symbol Magic 0 Ticket 2
Мэджик должен быть 12345, символ евро доллар.
Почему не удается получить символ и меджик?
Если строку:
поменять на
и убрать проверку по мэджик номеру, то появляются проблемы с ценами
Пока новый тик не пришел, перемещение кнопок не происходит. Это я глазами вижу. Как только цена изменилась, кнопки переместились.
Хотя сегодня даже на новом тике кнопки перестали перерисовываться, хотя я ничего не менял. Двигается только фон.
Разъясняю - как вы говорите вы меняете координаты в ОнТик, и утверждаете что фактически кнопки перемещаются на СЛЕДУЮЩЕМ тике. На следующем от чего? от того, на котором вы поменяли координаты, или от рождества христова?
На этом этапе ничего не происходит, так как я уже писал выше функция 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'Панель для торговли.mq511
'Trade.mqh'Trade.mqh11
'Object.mqh'Object.mqh11
'StdLibErr.mqh'StdLibErr.mqh11
'OrderInfo.mqh'OrderInfo.mqh11
'HistoryOrderInfo.mqh'HistoryOrderInfo.mqh11
'PositionInfo.mqh'PositionInfo.mqh11
'DealInfo.mqh'DealInfo.mqh11
'SymbolInfo.mqh'SymbolInfo.mqh11
code generated11
0 errors, 0 warnings, 3192 msec elapsed11
После открытия ордера Buy Stop пересчитываю все ордера, выбираю открытый ордер и делаю проверку на совпадение символа и мэждик номера:
На этом этапе ничего не происходит, так как я уже писал выше функция asymbol.Name() почему-то не возвращает символ открытого ордера, функция aorder.Magic() возвращает значение 0 (хотя мой мэджик 121345), функция asymbol.TickSize() возвращает значение 0. То есть проверка не проходит и соответственно дальнейшая работа с ордером прекращается. Поясните пожалуйста "дебажьте в функции Name(string symbol) что происходит", не совсем понимаю эту фразу. Что нужно добавить и куда?
Блин, зачем вы используете то что не понимаете (а вдруг это ядрёный чемоданчик )) )
И ещё и не додумываетесь прочесть что пишут
если у вас нету такой строки asymbol.Name(Symbol()) то добавьте.
з.ы. хотел ещё объяснить что такое инициализация, но видимо и это будет бесполезно
Ошибка в индексе / тикете ордера может быть судя по магик 0. На момент обращения к структуре ордера там записаны данные не того ордера который нужен. В цикле отбора может быть что в последний ордерселект уходит следующий номер, а не нужный Вам. Из структуры ордера возвращаются данные именно последнего ордерселекта.
Так и не смог понять, почему происходит этот глюк. В итоге взял код, который отвечает за создание панели с кнопками, переписал код в тот советник, где этот же код работает нормально и все заработало. В любом случае благодарю Вас!
Счётчик гэпов. Хочу посчитать гэпы, которые больше 10 пунктов.
int start()
{
int gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
"ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);
Переменную "gap" сбрасывает в ноль. Не пойму почему. Я уже, что только не перепробывал. Циклы вставлял, и static - не помогает. Подозреваю, что циклы неправильно писал.
Счётчик гэпов. Хочу посчитать гэпы, которые больше 10 пунктов.
Переменную "gap" сбрасывает в ноль. Не пойму почему. Я уже, что только не перепробывал. Циклы вставлял, и static - не помогает. Подозреваю, что циклы неправильно писал.
Переменная gap находится в области видимости функции start - и при каждом новом тике она заново инициализируется нулём
Счётчик гэпов. Хочу посчитать гэпы, которые больше 10 пунктов.
Переменную "gap" сбрасывает в ноль. Не пойму почему. Я уже, что только не перепробывал. Циклы вставлял, и static - не помогает. Подозреваю, что циклы неправильно писал.
int gap=0;
int start()
{
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap++;
}
Comment("ГЭП!========: ",gap,"\n",
"ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);
int start()
{
staticint gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
"ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);
Когда делаю вот такой запрос:
получаю вот такой результат:
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 - не помогает. Подозреваю, что циклы неправильно писал.