Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 18
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это не очень хорошо. У вас наверное при компиляции предупреждения были? Нужно в таких случаях избавляться от причин предупреждений, а не от #property strict
пополнила баланс теперь не могу найти где терминал с реальным счетом вечно вылазит демо счет
Когда было прописано #property strict, то компилятор выдавал ошибки в каждом цикле for(), что переменные должны иметь тип, и поэтому в каждом цикле приходилось прописывать int i и int p. После этого компилятор ошибок не выдавал, но линия не строилась. Когда убрал #property strict, то компилятор уже не требовал объявлять тип в каждом цикле, и линия построилась.
Типичный случай эксплуатации неявных ошибок в логике. После того, как компилятор стал "строже", самообман исчезает потихоньку.
Всё хотел спросить, зачем там столько одинаковых циклов?
И почему вас никак не напрягает ошибка "выход за пределы массива" при запуске индикатора на графике?
Например, вот тут:
{
for(int p=0; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
пополнила баланс теперь не могу найти где терминал с реальным счетом вечно вылазит демо счет
Когда было прописано #property strict, то компилятор выдавал ошибки в каждом цикле for(), что переменные должны иметь тип, и поэтому в каждом цикле приходилось прописывать int i и int p. После этого компилятор ошибок не выдавал, но линия не строилась. Когда убрал #property strict, то компилятор уже не требовал объявлять тип в каждом цикле, и линия построилась.
ответ предельно простой -- у вас идёт банальный выход за пределы массива -- и по этой ошибке ваш индикатор прекращает свою работу
{
for(int p=0; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
for(int i=1; i<n; i++)
{
for(int p=0; p<m; p++)
{
Mx[i][p]=sum_x[p+1][m-1]/(n-1);
My[i][p]=sum_y[p+1][m-1]/(n-1);
увидеть эту ошибку можно на этапе выполнения -- запустить индикатор и посмотреть запись лога на вкладке Терминал -- Эксперты:
Типичный случай эксплуатации неявных ошибок в логике. ...
Типичный случай эксплуатации неявных ошибок в логике. После того, как компилятор стал "строже", самообман исчезает потихоньку.
Всё хотел спросить, зачем там столько одинаковых циклов?
И почему вас никак не напрягает ошибка "выход за пределы массива" при запуске индикатора на графике?
Например, вот тут:
{
for(int p=0; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
По поводу одинаковых циклов, то я, из-за ограниченного знания программирования и алгоритмов, ничего лучше не придумал, чтобы выбирать тот элемент массива из нужного измерения, который был необходим для подстановки в формулу.
ответ предельно простой -- у вас идёт банальный выход за пределы массива -- и по этой ошибке ваш индикатор прекращает свою работу
{
for(int p=0; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
for(int i=1; i<n; i++)
{
for(int p=0; p<m; p++)
{
Mx[i][p]=sum_x[p+1][m-1]/(n-1);
My[i][p]=sum_y[p+1][m-1]/(n-1);
увидеть эту ошибку можно на этапе выполнения -- запустить индикатор и посмотреть запись лога на вкладке Терминал -- Эксперты:
А как тогда посчитать сумму цен закрытия в каждом измерении???
По поводу одинаковых циклов, то я, из-за ограниченного знания программирования и алгоритмов, ничего лучше не придумал, чтобы выбирать тот элемент массива из нужного измерения, который был необходим для подстановки в формулу.
Например так:
for(int i=1; i<n; i++)
{for(int p=1; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
Скажите, плиз, как исправить эту ошибку?
Чтобы эту ошибку исправить -- надо понимать вашу формулу -- что, зачем и как вы считаете.
И только тогда получится перебрать ваш алгоритм и устранить выход за пределы массива.
Методом "тыка" и непониманием формулы -- вы устраните ошибку, но сделаете неправильным расчёт.
p.s. Распишите словами подробно что и зачем вы считаете -- можете подробно прокомментировать свой код -- и тогда поймём как надо исправить эту ошибку.