Здравствуйте.
Столкнулась не с проблемой, а просто с чем-то для себя новым.
Уверена, что ответы есть, но как задать правильно вопрос....
Поэтому прошу помочь либо советом как это реализовать, либо просто наводкой где это поискать и что изучить. Так как по сути, перед тем как задавать вопросы я всегда стараюсь самостоятельно 500 раз изучить. Но ту не пошло к сожалению.
Так вот задача по сути не сложная (для тех у кого есть больше практики и опыта чем у меня)
есть индикатор (подвальный) показывает линию (производная из нескольких МА деленное само на себя и т.д.) но уровень Максимум и Минимум постоянно меняется.
И поэтому не получается установить уровень для того, что бы отследить его переход.
Хотелось бы понять как я могу получить на 1 свече (на на текущей 0) получить максимальное и минимальное значение.
Пыталась изучить функцию
но не получается. Выдает неизвестные мне числа. Понимаю, что она выдает что-то логичное, но не то, что я ожидаю, так как запрос скорее всего не верный.
Ниже приведу код индикатора (благо он очень маленький) и снимок.
Подскажите пожалуйста как найти максимум и минимум.
Это функция из документации
//+------------------------------------------------------------------+ //| Функция получает значение минимума графика в главном окне или | //| подокне. | //+------------------------------------------------------------------+ double ChartPriceMin(const long chart_ID=0,const int sub_window=0) { //--- подготовим переменную для получения результата double result=EMPTY_VALUE; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetDouble(chart_ID,CHART_PRICE_MIN,sub_window,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return(result); }
Так-же и максимум.
К сожалению показывает и максимум и минимум 0
extern int Period1 = 44; extern int Period2 = 22; extern int Period3 = 66; extern int Period4 = 33; extern int Period5 = 29; extern int Period6 = 14; extern int Price = PRICE_CLOSE; double Map[]; double prices[]; int maxPeriod; double result=0; double result2=0; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(2); SetIndexBuffer(0,Map); SetIndexBuffer(1,prices); IndicatorShortName("DCE"+Period1+","+Period2); maxPeriod = MathMax(Period1,Period2); maxPeriod = MathMax(Period3,maxPeriod); maxPeriod = MathMax(Period4,maxPeriod); maxPeriod = MathMax(Period5,maxPeriod); maxPeriod = MathMax(Period6,maxPeriod); SetIndexStyle(0,DRAW_LINE,0,2,Aqua); SetIndexStyle(1,DRAW_LINE,0,2,Green); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int i,count,counted_bars,y=IndicatorCounted(); if(counted_bars < 0) return(-1); if(counted_bars>0) counted_bars--; int limit = MathMin(MathMax(Bars-counted_bars,maxPeriod),Bars-1); for(i=limit; i>=0; i--) prices[i] = (iMA(NULL,0,1,0,MODE_SMA,Price,i)); for(i=limit; i>=0; i--) { Map[i] = (icTma(Period2,i)-icTma(Period1,i)+icTma(Period4,i)-icTma(Period3,i)+icTma(Period6,i)-icTma(Period5,i))*1000; } Print(result + " " + result2); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double icTma(int period, int i) { int j,k; double sum = (period+1)*prices[i]; double sumw = (period+1); for(j=1, k=period; j<period; j++,k--) { sum += prices[i+j]*k; sumw += k; if(j<=i) { sum += prices[i-j]*k; sumw += k; } } return(sum/sumw); } //+------------------------------------------------------------------+ double ChartPriceMin(const long chart_ID=0,const int sub_window = 0) { //--- подготовим переменную для получения результата result=EMPTY_VALUE; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetDouble(chart_ID,CHART_PRICE_MIN,sub_window,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return(result); } double ChartPriceMax(const long chart_ID=0,const int sub_window = 0) { //--- подготовим переменную для получения результата result2=EMPTY_VALUE; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetDouble(chart_ID,CHART_PRICE_MAX,sub_window,result2)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return(result2); }Хотя я полагаю, здесь моя ошибка в применении функции...
Покажите, как применяете эти функции. Ведь в приведенном коде нет их использования. Есть только непосредственно реализация.
Напишу простыми словами
Сейчас индикатор показывает на графике максимальное значение, минимальное значение и текущее.
Мне необходимо получить верх и низ
что бы задать условие относительно текущей точки.
А так как верх и низ изменяется на каждой свече и у меня нет этих значений, я не могу оперировать значениями.
В дальнейшем я хочу сделать своего рода условные уровень (80% и 20%) при пересечении которого срабатывает уведомление.
Из преведенного ранее ответа
//+------------------------------------------------------------------+ //| Функция получает значение минимума графика в главном окне или | //| подокне. | //+------------------------------------------------------------------+ double ChartPriceMin(const long chart_ID=0,const int sub_window=0) { //--- подготовим переменную для получения результата double result=EMPTY_VALUE; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetDouble(chart_ID,CHART_PRICE_MIN,sub_window,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return(result); }я получаю значения но оно постоянно = 0
Поэтому я и уточнила что я не верно сделала используя данный ответ. (Т.е. где я не верно применила функцию, что не указала)
Напишу простыми словами
Сейчас индикатор показывает на графике максимальное значение, минимальное значение и текущее.
Мне необходимо получить верх и низ
что бы задать условие относительно текущей точки.
А так как верх и низ изменяется на каждой свече и у меня нет этих значений, я не могу оперировать значениями.
В дальнейшем я хочу сделать своего рода условные уровень (80% и 20%) при пересечении которого срабатывает уведомление.
Из преведенного ранее ответа
я получаю значения но оно постоянно = 0Поэтому я и уточнила что я не верно сделала используя данный ответ. (Т.е. где я не верно применила функцию, что не указала)
Перед принтом, в функции int start()
вставьте это
ChartPriceMin(0,ChartWindowFind(0,"DCE"+Period1+","+Period2)); ChartPriceMax(0,ChartWindowFind(0,"DCE"+Period1+","+Period2));
В дальнейшем я хочу сделать своего рода условные уровень (80% и 20%) при пересечении которого срабатывает уведомление.
Так неправильно делать. Мин/Макс будет изменяться в зависимости от текущего размера подокна, в зависимости от данных в окне и от разрешения экрана.
Растянете окно влево/вправо и пересечения "поедут", нажмете +/- и пересечения "поедут", откроете чарт на другом компьютере (с большим/меньшим разрешением) и пересечения "поедут", появится новый мин/макс и снова всё "поедет".
Нет смысла в таких сигналах.
Так неправильно делать. Мин/Макс будет изменяться в зависимости от текущего размера подокна, в зависимости от данных в окне и от разрешения экрана.
Растянете окно влево/вправо и пересечения "поедут", нажмете +/- и пересечения "поедут", откроете чарт на другом компьютере (с большим/меньшим разрешением) и пересечения "поедут", появится новый мин/макс и снова всё "поедет".
Нет смысла в таких сигналах.
А как это избежать?
Как сделать то, что я хочу?
Т.е. получить сигнал текущая точка опустилась ниже моего уровня?
А как это избежать?
Как сделать то, что я хочу?
Т.е. получить сигнал текущая точка опустилась ниже моего уровня?
Как видите значения не меняются. Изменения будут только в случае изменения максимального и минимального значений индикатора на видимом участке графика.
Но и в таком положении индикатора предложенный код получит правильные, текущие значения.
Пыталась изучить функцию
но не получается. Выдает неизвестные мне числа.
arr[ArrayMaximum(arr)]

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Столкнулась не с проблемой, а просто с чем-то для себя новым.
Уверена, что ответы есть, но как задать правильно вопрос....
Поэтому прошу помочь либо советом как это реализовать, либо просто наводкой где это поискать и что изучить. Так как по сути, перед тем как задавать вопросы я всегда стараюсь самостоятельно 500 раз изучить. Но ту не пошло к сожалению.
Так вот задача по сути не сложная (для тех у кого есть больше практики и опыта чем у меня)
есть индикатор (подвальный) показывает линию (производная из нескольких МА деленное само на себя и т.д.) но уровень Максимум и Минимум постоянно меняется.
И поэтому не получается установить уровень для того, что бы отследить его переход.
Хотелось бы понять как я могу получить на 1 свече (на на текущей 0) получить максимальное и минимальное значение.
Пыталась изучить функцию
ArrayMaximum(
но не получается. Выдает неизвестные мне числа. Понимаю, что она выдает что-то логичное, но не то, что я ожидаю, так как запрос скорее всего не верный.
Ниже приведу код индикатора (благо он очень маленький) и снимок.
Подскажите пожалуйста как найти максимум и минимум.