Если интересует расчёт на данных другого индикатора, то делается так. Сначала создается тот самый другой индикатор с о своим методом расчёта данных, затем берётся хендл этого индикатора (Справочник MQL5 / Технические индикаторы / iCustom ) и уже этот хендл используется в новом индикаторе. Посмотрите внимательно пример. Если будут вопросы по примеру -
есть вопросы. всеравно не понимаю. ок, берем Custom Moving Average.mq5 за основу.
добавить в список процедуру нового сглаживания MODE_MYMA - не вопрос.
вопрос как подсунуть данные. через и-кастом другого индикатора? замечательно. берем для примера любой, сделанный по второй форме (если индикатор сделан по первой.. не понял откуда брать хай-лоу.. значит только по второй форме?)
ок, объявляем
int newHandl;
в onInit определяем его (как пример - параболик. пофиг, главное чтоб был 2го типа, верно? как реализовать свое, примерно понятно)
(если индикатор сделан по первой.. не понял откуда брать хай-лоу.. значит только по второй форме?)
Да, про хай-лоу это был только пример, как самому разбираться со статьями. Для первой формы можно взять задачу построения линии close[i]/2 [или sqrt(close[i]/2)]. В общем, вариаций можно придумать кучу и при использовании одного массива.
GameOver:
ок, объявляем
int newHandl;
в onInit определяем его (как пример - параболик. пофиг, главное чтоб был 2го типа, верно? как реализовать свое, примерно понятно)
Если полученный хендл индикатора является корректным, то это значит, что мы можем обращаться к буферам такого индикатора. Вот смотрите опять пример из Справочник MQL5 / Технические индикаторы / iCustom Там есть такая строчка:
//--- скопируем значения индикатора Custom Moving Average в наш индикаторный буферint copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);
Попробуйте получить данные любого буфера индикатора, который Вы выбрали. У меня нет под рукой терминала, но в параболике можете сами посмотреть, какие буфера рассчитываются и их нумерацию.
В Справочнике есть такая фраза: "Переданные в функцию массивы отражают ценовые данные, т.е. эти массивы имеют признак таймсерии и функция ArrayIsSeries() вернет true при проверке этих массивов. Но тем не менее, направление индексации необходимо в любом случае проверять только функцией ArrayGetAsSeries()".
Из буквального прочтения следует, что даже если функция ArrayIsSeries() вернет true (т.е. подтвердит, что проверяемый массив является массивом-таймсерией), то всё равно направление индексации необходимо в любом случае проверять только функцией ArrayGetAsSeries(). Непонятен тогда смысл введения в обиход функции ArrayIsSeries() , если её результаты всё равно требуется проверять дополнительно. В чём фишка? Что, могут быть ситуации, когда массив может быть таймсерией, но направление индексации у него будет не как у таймсерии (не будет установлен флаг AS_SERIES)?
В продолжение вопроса. В разделе "Справочник MQL5 / Операции с массивами / ArraySetAsSeries" есть пример, когда функция ArraySetAsSeries() применяется к массиву constdatetime &time[] на каждом тике:
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- будем хранить время открытия текущего нулевого бараstaticdatetime currentBarTimeOpen=0;
//--- перевернем доступ к массиву time[] - сделаем как в таймсерииArraySetAsSeries(time,true);
//--- return value of prev_calculated for next callreturn(rates_total);
}
Это что, так все делают (переворачивают массив на каждом тике), чтобы работать с массивом, как с таймсерией?
Ещё вопрос: могут ли массивы, используемые функцией OnCalculate(), произвольно менять направление своей индексации? Или же достаточно один раз проверить это направление?
Если интересует расчёт на данных другого индикатора, то делается так. Сначала создается тот самый другой индикатор с о своим методом расчёта данных, затем берётся хендл этого индикатора (Справочник MQL5 / Технические индикаторы / iCustom ) и уже этот хендл используется в новом индикаторе. Посмотрите внимательно пример. Если будут вопросы по примеру -
есть вопросы. всеравно не понимаю.
ок, берем Custom Moving Average.mq5 за основу.
добавить в список процедуру нового сглаживания MODE_MYMA - не вопрос.
вопрос как подсунуть данные. через и-кастом другого индикатора? замечательно. берем для примера любой, сделанный по второй форме (если индикатор сделан по первой.. не понял откуда брать хай-лоу.. значит только по второй форме?)
ок, объявляем
int newHandl;
в onInit определяем его (как пример - параболик. пофиг, главное чтоб был 2го типа, верно? как реализовать свое, примерно понятно)
newHandl=iCustom(_Symbol,0,"ParabolicSAR.mq5",0.02,0.2);
а дальше? в onCalculate подсовываем вместо стандартной цены? или что?
CalculateEMA(rates_total,prev_calculated,begin,newHandl); ???
ругаецо. или как? поясните, я не понимаю... (((((
да, я пока мыслю шаблонами мкл4. там просто - цикл, данные(любые!) взял, сгладил, вывел.
тут же.... не ясно, за что хватацо..
(если индикатор сделан по первой.. не понял откуда брать хай-лоу.. значит только по второй форме?)
Да, про хай-лоу это был только пример, как самому разбираться со статьями. Для первой формы можно взять задачу построения линии close[i]/2 [или sqrt(close[i]/2)]. В общем, вариаций можно придумать кучу и при использовании одного массива.
ок, объявляем
int newHandl;
в onInit определяем его (как пример - параболик. пофиг, главное чтоб был 2го типа, верно? как реализовать свое, примерно понятно)
newHandl=iCustom(_Symbol,0,"ParabolicSAR.mq5",0.02,0.2);
Всё отлично. Щаз допишу.
Если полученный хендл индикатора является корректным, то это значит, что мы можем обращаться к буферам такого индикатора. Вот смотрите опять пример из Справочник MQL5 / Технические индикаторы / iCustom Там есть такая строчка:
Посмотрите, где эта строчка расположена. Теперь читайте Справочник MQL5 / Доступ к таймсериям и индикаторам / CopyBuffer (...Опять-таки: многое проясняется при разборе примеров построчно).
Попробуйте получить данные любого буфера индикатора, который Вы выбрали. У меня нет под рукой терминала, но в параболике можете сами посмотреть, какие буфера рассчитываются и их нумерацию.
Вопрос по поводу описания функций ArrayIsSeries() и ArrayGetAsSeries().
В Справочнике есть такая фраза: "Переданные в функцию массивы отражают ценовые данные, т.е. эти массивы имеют признак таймсерии и функция ArrayIsSeries() вернет true при проверке этих массивов. Но тем не менее, направление индексации необходимо в любом случае проверять только функцией ArrayGetAsSeries()".
Из буквального прочтения следует, что даже если функция ArrayIsSeries() вернет true (т.е. подтвердит, что проверяемый массив является массивом-таймсерией), то всё равно направление индексации необходимо в любом случае проверять только функцией ArrayGetAsSeries(). Непонятен тогда смысл введения в обиход функции ArrayIsSeries() , если её результаты всё равно требуется проверять дополнительно. В чём фишка? Что, могут быть ситуации, когда массив может быть таймсерией, но направление индексации у него будет не как у таймсерии (не будет установлен флаг AS_SERIES)?
При портировании с Mql4 на Mql5 выпала ошибка Lot:
'Lot' - constant cannot be modified
Как править?
При портировании с Mql4 на Mql5 выпала ошибка Lot:
'Lot' - constant cannot be modified
Как править?
Никак. Это не баг, это фича. :)
В mql5 input-переменные не модифицируются (const).
Сделайте простую развязку:
В продолжение вопроса. В разделе "Справочник MQL5 / Операции с массивами / ArraySetAsSeries" есть пример, когда функция ArraySetAsSeries() применяется к массиву const datetime &time[] на каждом тике:
Это что, так все делают (переворачивают массив на каждом тике), чтобы работать с массивом, как с таймсерией?
Ещё вопрос: могут ли массивы, используемые функцией OnCalculate(), произвольно менять направление своей индексации? Или же достаточно один раз проверить это направление?
При портировании с Mql4 на Mql5 выпала ошибка SymbolInfoDouble:
'SymbolInfoDouble' - no one of the overloads can be applied to the function call
Как править?
При портировании с Mql4 на Mql5 выпала ошибка SymbolInfoDouble:
'SymbolInfoDouble' - no one of the overloads can be applied to the function call
Как править?
Почему внизу 0?Там указываем свойство.
https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_double
ну а в дополнение проверку деления на 0.
Результаты работы тестера стратегий отображаются в виде графиков:
Не подскажите, где посмотреть, что означают разные цвета на графиках?
Результаты работы тестера стратегий отображаются в виде графиков:
Не подскажите, где посмотреть, что означают разные цвета на графиках?