Mike Kharkov:
Есть такой пример в доке(mql5) для нахождения максимальной цены на чарте:
После внедрения данного кода я получаю следующую ошибку:
Вопрос:
В чем в данном случае ошибка?(что только уже не пробовал в плане типов и объявлений внедрять при вызове функции)
Как корректно запустить все это дело, что бы все функционировало?
задать параметры функцииЕсть такой пример в доке(mql5) для нахождения максимальной цены на чарте:
После внедрения данного кода я получаю следующую ошибку:
Вопрос:
В чем в данном случае ошибка?(что только уже не пробовал в плане типов и объявлений внедрять при вызове функции)
Как корректно запустить все это дело, что бы все функционировало?
ChartPriceMax(0,0);
а вот это
double ChartPriceMax(const long chart_ID=0,const int sub_window=0)
поменять на это
double ChartPriceMax(const long chart_ID,const int sub_window)
Mike Kharkov:
тоже самое:
тоже самое:
функцию надо разместить вне кода (обычно в самом низу)
а её вызов внутри
Renat Akhtyamov:
А зачем это делать если вкратце?функцию надо разместить вне кода (обычно в самом низу)
а её вызов внутри
Какая разница внизу она или в начале или в середине?
#include <Arrays\ArrayDouble.mqh> #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //--- свойства линии заданы с помощью директив компилятора #property indicator_label1 "Line" // название построения для "Окна данных" #property indicator_type1 DRAW_SECTION // тип графического построения - линия #property indicator_color1 clrWhiteSmoke // цвет линии #property indicator_style1 STYLE_SOLID // стиль линии #property indicator_width1 1 // толщина линии //--- индикаторный буфер для построения double SupportLineBuffer[]; bool CalculateSupportValues (int rates_total, const double &low[], int prev_calculated, const datetime &time[]){ double arrayX[]; ArrayResize(arrayX, 26, 0); ArrayInitialize(arrayX,EMPTY_VALUE); double arrayY[]; ArrayResize(arrayY,26,0); ArrayInitialize(arrayY,EMPTY_VALUE); int innerIter = 0; // инициализация индикаторного буферы пустым значением. if(prev_calculated == 0) ArrayInitialize(SupportLineBuffer, EMPTY_VALUE); //--- блок расчета значений индикатора и внесение данных о координатах в пикселях for(int i = 0; i < rates_total; i++) { if(i >= rates_total - 26){ int x; int y; ChartTimePriceToXY(0, 0, time[i], low[i], x, y); arrayX[innerIter] = x; arrayY[innerIter] = low[i]; SupportLineBuffer[i] = low[i]; innerIter++; } } //Print("WidthX = ", ChartGetInteger(0, CHART_WIDTH_IN_PIXELS, 0),"px",", HeightY = ", ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 0),"px "); //ArrayPrint(arrayX); //ArrayPrint(arrayY); ChartPriceMax(0,0); return true; } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- связывание массива и индикаторного буфера SetIndexBuffer(0,SupportLineBuffer,INDICATOR_DATA); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { CalculateSupportValues (rates_total, low, prev_calculated, time); //--- вернем значение prev_calculated для следующего вызова функции return(rates_total); } //+------------------------------------------------------------------+ //| Функция получает значение максимума графика в главном окне или | //| подокне. | //+------------------------------------------------------------------+ double ChartPriceMax(const long chart_ID,const int sub_window) { //--- подготовим переменную для получения результата double result=EMPTY_VALUE; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetDouble(chart_ID,CHART_PRICE_MAX,sub_window,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return(result); }
Сделал так как вы говорите - вот весь код - ошибок больше нет - но принт(с максимальным значением) внутри функции не работает.
В чем причина?
Mike Kharkov:
А зачем это делать если вкратце?
Какая разница внизу она или в начале или в середине?
в упор не вижу принта, кроме того, что печатает сообщение про ошибку
А зачем это делать если вкратце?
Какая разница внизу она или в начале или в середине?
Сделал так как вы говорите - вот весь код - ошибок больше нет - но принт(с максимальным значением) внутри функции не работает.
В чем причина?
Renat Akhtyamov:
в упор не вижу принта, кроме того, что печатает сообщение про ошибку
а вот это:в упор не вижу принта, кроме того, что печатает сообщение про ошибку
//--- вернем значение свойства графика return(result);в общем каким оразом вытащить максимальное значение хочу понять - из примера в доке совершенно не понятно.
Mike Kharkov:
а вот это:
в общем каким оразом вытащить максимальное значение хочу понять - из примера в доке совершенно не понятно.
а вот это:
в общем каким оразом вытащить максимальное значение хочу понять - из примера в доке совершенно не понятно.
ну например так
//+------------------------------------------------------------------+ //| Функция получает значение максимума графика в главном окне или | //| подокне. | //+------------------------------------------------------------------+ double ChartPriceMax(const long chart_ID,const int sub_window) { //--- подготовим переменную для получения результата double result=EMPTY_VALUE; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetDouble(chart_ID,CHART_PRICE_MAX,sub_window,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" __FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика Print(result); return(result); }
или так
Print(ChartPriceMax(0,0));
или графический объект на экран
и еще масса вариантов
Renat Akhtyamov:
а чем это от моей версии отличается - которая не выводит в принте максимального значения?ну например так
P.S. После обновления вашего ответа понял - нужно еще вызов функции в принт завернуть.
Mike Kharkov:
а чем это от моей версии отличается - которая не выводит в принте максимального значения?
P.S. После обновления вашего ответа понял - нужно еще вызов функции в принт завернуть.
а чем это от моей версии отличается - которая не выводит в принте максимального значения?
P.S. После обновления вашего ответа понял - нужно еще вызов функции в принт завернуть.
не еще, а для того чтобы увидеть
либо присвоить значение функции переменной и делать с ней все что угодно
например
double calcMaxPrice = ChartPriceMax(0,0); Print(calcMaxPrice);
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
После внедрения данного кода я получаю следующую ошибку:
Вопрос:
В чем в данном случае ошибка?(что только уже не пробовал в плане типов и объявлений внедрять при вызове функции)
Как корректно запустить все это дело, что бы все функционировало?