Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1016

 
Oleh Fedorov:

Здравстуйте.

По посту про билдер так никто ничего и не скажет?

Может, имеет смысл его вынести в новую тему, чтобы его увидело больше народу? Если да - просьба к модераторам: вынесите, пожалуйста... Или самому создать?

Да, создайте отдельную тему. Только постарайтесь правильно выбрать раздел форума, в котором создадите тему.

 

Подскажите пожалуйста, элементарное. Массивы.

Изучаю и чет не понял

double tick[2,2];

void OnTick()
  {
  tick[1,1] = Ask;
  tick[1,2] = NormalizeDouble(tick[1,1]*100*_Point,_Digits);
  OrderSend(Symbol(),OP_BUYSTOP,0.01,tick[1,2],3,0,0,"bs2",0,0,clrBlue); 
}

Ошибок в процессе компиляции не выдает, зато при запуске в терминале выдает критическую ошибку.

Почему при выведении комментом значения tick[1,1],он округляет число до 4 знака после запятой

Почему он не только не может нормально вычислить значение tick[1,2], но и отказывается элементарно скопировать данные ячейки tick[1,1] (tick[1,2]=tick[1,1];)

И последнее, почему при создании ордера если вместо значения цены казать ячейку массива, где эта цена хранится tick[1,2], то он эту переменную считает сразу за 2 значения. (в подсказках сразу идет пропуск значения slippage)

 
Gilmor:

Подскажите пожалуйста, элементарное. Массивы.

Изучаю и чет не понял

Ошибок в процессе компиляции не выдает, зато при запуске в терминале выдает критическую ошибку.

Почему при выведении комментом значения tick[1,1],он округляет число до 4 знака после запятой

Почему он не только не может нормально вычислить значение tick[1,2], но и отказывается элементарно скопировать данные ячейки tick[1,1] (tick[1,2]=tick[1,1];)

И последнее, почему при создании ордера если вместо значения цены казать ячейку массива, где эта цена хранится tick[1,2], то он эту переменную считает сразу за 2 значения. (в подсказках сразу идет пропуск значения slippage)

Потому, что в параметрах функции OrderSend как и во всех других, запятая играет свою роль. И как только в тексте появляется запятая она расценивается как разделитель входящих значений. Сделайте так tick[1][2]

 
Alexey Viktorov:

Потому, что в параметрах функции OrderSend как и во всех других, запятая играет свою роль. И как только в тексте появляется запятая она расценивается как разделитель входящих значений. Сделайте так tick[1][2]

Спасибо. Может и на другие вопросы сможете ответить? :)
 
Gilmor:
Спасибо. Может и на другие вопросы сможете ответить? :)

А вы сможете ответить на вопрос мясо(2.55=367.12)

 
Alexey Viktorov:

А вы сможете ответить на вопрос мясо(2.55=367.12)

Понял.

double tick[2,2];

void OnTick()
  {
  tick[1,1] = Ask;
  tick[1,2] = NormalizeDouble(tick[1,1]*100*_Point,_Digits);
  }
double tick[2,2];

Создали массив 2 яч. верхний ряд, 2 яч. нижний.

void OnTick()
  {
  tick[1,1] = Ask;
 Comment (tick[1,1])

Результат. Цена на графике 0,84478, а комментарий вверху показывает 0,8448 ???? Почему он округил до 4 знака после запятой?

double tick[2,2];

void OnTick()
  {
  tick[1,1] = Ask;
  tick[1,2] = tick[1,1];
  }

Следуя логике записи в ячейку я копирую данные ячейки 1 массива, в ячейку 2 того же массива. Результатом является критическая ошибка.

Почему?

double tick[2,2];

void OnTick()
  {
  tick[1,1] = Ask;
  tick[1,2] = NormalizeDouble(tick[1,1]*100*_Point,_Digits);
  }

В ячейку 2 массива мы хотим добавить значение будущей цены для отложенного ордера. Т.е. к цене Ask добавить 100 пунктов и потом при выставлении ордера в параметре цены указать эту ячейку массива. Но при выполнении этой команды снова та же ошибка.


Почему?

 
Gilmor:

Следуя логике записи в ячейку я копирую данные ячейки 1 массива, в ячейку 2 того же массива. Результатом является критическая ошибка.

Почему?

потому что Вы не разобрались что такое массивы, если читали справку, и не получилось, давайте "на пальцах"

это объявление массива:

double tick[2,2];

которое говорит компилятору, что нужно зарезервировать "4 ячейки памяти" --> 2х2

а доступ к младшему элементу имеет индекс 0, т.е. вот для Вашего случая в массиве tick[2,2], будут всего вот такие элементы массива:

 tick[0,0 tick[0,1

 tick[1,0 tick[1,1

элементов массива же 4 штуки? ....  но самый младший индекс массива имеет номер 0, а не как Вам хотелось бы  (или как привыкли при устном счете) с номера 1


ну и соответственно самый старший элемент массива будет иметь номер: размер массива минус 1

если Вы вышли за размеры массива, то получите критическою ошибку выполнения - Ваш скрин, те. для массива tick[2,2] нет такого элемента массива с номером tick[2,2]

 

Ну, по крайней мере признаюсь что новичок :)

Спасибо.

Ну, а про "на пальцах" - это привычка. "На пальцах", проще воспринимается. И разъясняй я это тому, кто в этом языке вообще ноль, то пришлось бы еще и пальцы ноги к разъяснениям подключать =))

 
Gilmor:

Ну, по крайней мере признаюсь что новичок :)

Спасибо.

Ну, а про "на пальцах" - это привычка. "На пальцах", проще воспринимается. И разъясняй я это тому, кто в этом языке вообще ноль, то пришлось бы еще и пальцы ноги к разъяснениям подключать =))

новичок это не зазорно, тем более ветка тематическая - для новичков, и это один из немногих форумов, где можно быстро получить ответ на свой вопрос ;)

ну и в довесок, почитайте начало справки https://docs.mql4.com/ru/basis/variables

 
Igor Makanu:

новичок это не зазорно, тем более ветка тематическая - для новичков, и это один из немногих форумов, где можно быстро получить ответ на свой вопрос ;)

ну и в довесок, почитайте начало справки https://docs.mql4.com/ru/basis/variables

Благодарю.
Причина обращения: