Вопрос по MT Language!!! - страница 6

 
Слава или Ренат, проясните пожалуйста. Я в индикаторе объявляю переменную типа массив, далее с помощью функции ArrayCopySeries получаю доступ к массиву котировок, изменяю значения своей переменной, а, следовательно, и значения массива котировок, т.к. это один и тот же массив. Архив котировок, насколько я заметил, остается неизменным. И все-таки хочется услышать Ваш ответ, могут ли различные манипуляции с массивом котировок (именно изменение) привести к нарушению архива котировок или попаданию туда неправильных данных (в случае, если индикатор будет прицеплен постоянно)?
 
ArrayCopySeries получаю доступ к массиву котировок, изменяю значения своей переменной, а, следовательно, и значения массива котировок,

Вы не получаете "доступа к массиву котировок", а лишь копируете его в свой собственный массив. Соответственно, никакие манипуляции со своим собственным массивом не могут привести к изменению базового массива графика. Из MQL4 принципиально нельзя изменять данные графика. Это сделано ради безопасности и не будет изменено.
 
Ренат, Вот Вам пример, извиняюсь, что без префиксов

#property indicator_chart_window

double ArrayLow[];
double ArrayHigh[];

int start()
{
ArrayCopySeries(ArrayLow,MODE_LOW);
ArrayCopySeries(ArrayHigh,MODE_HIGH);
ArrayHigh[1]=ArrayHigh[1]+50*Point;
ArrayLow[1]=ArrayLow[1]-50*Point;
Print(ArrayHigh[1]," ",High[1]);
return(0);
}

Меняется и Хай, и Лоу предыдущего бара, и САМ ГРАФИК! Прокомментируйте. Я бы не писал, если бы сначала не проверил. С уважением.
 
Вы не получаете "доступа к массиву котировок",

Тут я ошибся - массив виртуально перенаправляется без физического копирования. Извините.

Меняется и Хай, и Лоу предыдущего бара, и САМ ГРАФИК! Прокомментируйте. Я бы не писал, если бы сначала не проверил.

Дело в том, что таким образом Вы получаете доступ (и на изменение тоже) в текущий временный кеш-буфер, используемый для отрисовки графика. Соответственно, Ваши изменения будут отрисовываться на графике некоторое время до момента полного обновления этого буфера. Но в самой реальной базе данных History Center Вы ничего не измените (проверьте сами).

Кеш-буфер обновляется очень экономно, поэтому Вы можете наблюдать некоторое продолжительное время изменения, внесенные их эксперта. Вот такой вот интерсный эффект проявился - сами даже не догадывались.
 
Ренат, значит эффект можно использовать для индикаторов. Например тот же Heiken Ashi, который выложен у Вас на сайте в качестве образца, при этом отрисовывать свечи стандартными средствами, а не придумывать муляж из линий, при изменении толщины которых, изменяется и их высота (Вы же сами писали про перья GDI). А если хорошо поломать голову, можно и на таймфреймы замахнуться (Time и Volume тоже можно менять). Правильно мыслю или проблемы какие-то тут есть? History Center - это архив котировок в виде hst-файлов или что-то другое? И как к нему подлезть в обход кэша?
 
Ренат, еще вопросы, если можно.

1. Писал в другой ветке, но чего-то не отреагировали, хоть бы кивнули. Функция ArrayCopySeries(double& array[],int series_index,string symbol=NULL,int period=0) не хочет принимать два последних параметра, если они имеют значение по умолчанию (но не пропущены совсем). Т.е. если значение параметра symbol задать NULL, то функция возвращает -1, а в лог выводит "symbol name for ArrayCopySeries is to be a string". Если period задать равным 0, также возвращает -1, в лог выводит "ArrayCopySeries function internal error".

2. Во встроенной справке MetaEditor есть такое описание: int Volume[]. Однако на практике, если я, например, задаю строку: ArrayCopySeries(MyArray,MODE_VOLUME), при этом предварительно объявив int MyArray[], в лог пишет ошибку типов. Просит double MyArray[]. А в примере функции ArrayCopyRates вообще все элементы массива имеют тип double, в том числе и Volume, и Time. Так какие на самом деле типы или тут неявное приведение?
 
1. исправление ситуации с symbol=NULL появится в следующем билде
2. volume имеет тип double в связи с тем, что у нас появились месячные графики
 
А если хорошо поломать голову, можно и на таймфреймы замахнуться

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

History Center - это архив котировок в виде hst-файлов или что-то другое?

Это реальная база - нажмите F2.
Причина обращения: