Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 578
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
dataCandles - это структура. Массив, куда мы пишем сами свечи из истории - array[]. Вот его и нужно сделать как таймсерию чтобы его индексация совпадала с индексацией свечей на графике. Т.е., Нулевая ячейка массива array[] соответствовала бы ближайшим свечам к текущей дате.
Т.е., 1. копируем в массив array[] свечи, 2. делаем его таймсерией, потом считываем с него значения в структуру.
Можно было бы обойтись и без массива array[] - сразу писать данные прямо с графика в структуру, но я так предложил для совместимости с пятёркой - в ней можно так копировать напрямую только в индикаторе, используя high[i], low[i] и прочие данные, но в скрипте, или советнике, нам всё равно придётся сначала скопировать нужный отрезок истории в массив, что я сразу и сделал.
Alert (series);
вот так?
все равно оба алерта выдают false
Alert (series);
вот так?
все равно оба алерта выдают false
Значит это баг, о котором следует сообщить в "Ошибки, баги, вопросы".
Вот проверочный скрипт, он показывает время скопированных свечей в нулевой и последней ячейках массива array[]:
Значит это баг, о котором следует сообщить в "Ошибки, баги, вопросы".
Вот проверочный скрипт, он показывает время скопированных свечей в нулевой и последней ячейках массива array[]:
Выдает вот это:
Array is series: false
time array[0]: 2016.05.12 21:00
time array[9]: 2016.05.12 12:00
Выдает вот это:
Array is series: false
time array[0]: 2016.05.12 21:00
time array[9]: 2016.05.12 12:00
Я проверял что выдаёт - всегда false, но время-то пишет верно: если при запуске скрипта выбрать Массив array как таймсерия "Да", то:
Если же выбрать "Нет", то:
время записанных в массив свечей поменялось местами, а значит ArraySetAsSeriess() работает верно, а вот ArrayIsSeries() - нет, всегда выдаёт false, о чём я уже отписался в вышеназванную ветку с багами.
Ох уж это программирование. Чем дальше в лес....
Поймите, Вам не нужно знать направление массива. Алгоритм ищет повторы. Поэтому все равно в какой последовательности будут обработаны бары.
нужно. Ведь мне потом нужно узнать какие именно свечи образовали совпадение и с самой ближайшей к текущей цене взять цену Low.
Для этого в структуре есть время свечи, по которому можно найти ближайшую свечу к любому нужному вам времени.
А номера свечей вам не нужно выводить - они не совпадают с реальными номерами баров. Ведь мы заполняем массив, и индексы в массиве принадлежат лишь номеру свечи в массиве, а не на графике.
Я проверял что выдаёт - всегда false, но время-то пишет верно: если при запуске скрипта выбрать Массив array как таймсерия "Да", то:
Если же выбрать "Нет", то:
время записанных в массив свечей поменялось местами, а значит ArraySetAsSeriess() работает верно, а вот ArrayIsSeries() - нет, всегда выдаёт false, о чём я уже отписался в вышеназванную ветку с багами.
Я чуть изменил код:
ArraySetAsSeries(array,true); //тут просто true поставил
и дальше добавил чтобы писал номера свечек для самопроверки:
Alert("Array is series: ",ArrayIsSeries(array),
"\nСвеча "+IntegerToString(0,2,'0')+" time array[0]: ",TimeToString(array[0].time,TIME_DATE|TIME_MINUTES),
"\nСвеча "+IntegerToString(searchperiod-1,2,'0')+" time array[",string(searchperiod-1),"]: ",TimeToString(array[ArraySize(array)-1].time,TIME_DATE|TIME_MINUTES));
Выдает следующее:
Array is series: false
Свеча 00 time array[0]: 2016.05.12 22:00
Свеча 09 time array[9]: 2016.05.12 13:00
Для этого в структуре есть время свечи, по которому можно найти ближайшую свечу к любому нужному вам времени.
Я чуть изменил код:
ArraySetAsSeries(array,true); //тут просто true поставил
и дальше добавил чтобы писал номера свечек для самопроверки:
Alert("Array is series: ",ArrayIsSeries(array),
"\nСвеча "+IntegerToString(0,2,'0')+" time array[0]: ",TimeToString(array[0].time,TIME_DATE|TIME_MINUTES),
"\nСвеча "+IntegerToString(searchperiod-1,2,'0')+" time array[",string(searchperiod-1),"]: ",TimeToString(array[ArraySize(array)-1].time,TIME_DATE|TIME_MINUTES));
Выдает следующее:
Array is series: false
Свеча 00 time array[0]: 2016.05.12 22:00
Свеча 09 time array[9]: 2016.05.12 13:00