Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 578

 
Artyom Trishkin:

Значит это баг, о котором следует сообщить в "Ошибки, баги, вопросы".

Вот проверочный скрипт, он показывает время скопированных свечей в нулевой и последней ячейках массива array[]:

Выдает вот это:

Array is series: false

time array[0]: 2016.05.12 21:00

time array[9]: 2016.05.12 12:00 

 
Andrey Koldorkin:

Выдает вот это:

Array is series: false

time array[0]: 2016.05.12 21:00

time array[9]: 2016.05.12 12:00 

Я проверял что выдаёт - всегда false, но время-то пишет верно: если при запуске скрипта выбрать Массив 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 12:00
time array[9]: 2016.05.12 21:00

время записанных в массив свечей поменялось местами, а значит ArraySetAsSeriess() работает верно, а вот ArrayIsSeries() - нет, всегда выдаёт false, о чём я уже отписался в вышеназванную ветку с багами.

 
Andrey Koldorkin:

Ох уж это программирование. Чем дальше в лес.... 

Поймите, Вам не нужно знать направление массива. Алгоритм ищет повторы. Поэтому все равно в какой последовательности будут обработаны бары.
 
Vasiliy Sokolov:
Поймите, Вам не нужно знать направление массива. Алгоритм ищет повторы. Поэтому все равно в какой последовательности будут обработаны бары.
нужно. Ведь мне потом нужно узнать какие именно свечи образовали совпадение и с самой ближайшей к текущей цене взять цену Low.
 
Andrey Koldorkin:
нужно. Ведь мне потом нужно узнать какие именно свечи образовали совпадение и с самой ближайшей к текущей цене взять цену Low.

Для этого в структуре есть время свечи, по которому можно найти ближайшую свечу к любому нужному вам времени.

А номера свечей вам не нужно выводить - они не совпадают с реальными номерами баров. Ведь мы заполняем массив, и индексы в массиве принадлежат лишь номеру свечи в массиве, а не на графике.

 
Artyom Trishkin:

Я проверял что выдаёт - всегда 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 

 
Artyom Trishkin:
Для этого в структуре есть время свечи, по которому можно найти ближайшую свечу к любому нужному вам времени.
ну все равно. получается, что направление меняется одной строкой кода. это не усложнит процесс. Зато пока я только пытаюсь понять как что происходит, у меня хотя бы свечки в голове и машине будут в одном и том же порядке ))
 
Andrey Koldorkin:

Я чуть изменил код:

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 

Вы mql4 используете? Если да, то номер свечи узнавайте по её времени, которое записано в структуре. iBarShift() вам в помощь.
 
Artyom Trishkin:
Вы mql4 используете? Если да, то номер свечи узнавайте по её времени, которое записано в структуре. iBarShift() вам в помощь.

Сейчас да, в редакторе MQL4 сижу, но конечно хочу сразу писать на MQL5. Как я понял из справки, у них на последний билдах убрали разницу, компилятор тоже единый стал. 

Мне интересен MQL5 больше, т.к. наша биржа на нем работает, да и на вид он шустрее как-то. 

 
Andrey Koldorkin:

Сейчас да, в редакторе MQL4 сижу, но конечно хочу сразу писать на MQL5. Как я понял из справки, у них на последний билдах убрали разницу, компилятор тоже единый стал. 

Мне интересен MQL5 больше, т.к. наша биржа на нем работает, да и на вид он шустрее как-то. 

Ну тогда отказываемся от iBarShift(), и для поиска ближайшей low используем время. Всё это уже записано в структуру.