Как узнать бар или время стрелки индикатора в советнике?
На баре нет стрелки = EMPTY_VALUE
А почему бы не перебирать бары справа налево? Если я правильно понял, то требуется найти наиболее позднюю стрелку.
Также непонятно, почему результат записывается в элемент массива j, а значение проверяется в предыдущей ячейке массива?
Ну и самое главное - зачем нужен вызов iBarShift, если изначально уже имеется индекс бара?
А почему бы не перебирать бары справа налево? Если я правильно понял, то требуется найти наиболее позднюю стрелку.
Пробовал и так for(j=0; j<limit; j++)
Да, требуется найти самую последнюю стрелку
Также непонятно, почему результат записывается в элемент массива j, а значение проверяется в предыдущей ячейке массива?
Сложно с массивами, плохо понимаю их))
Ну и самое главное - зачем нужен вызов iBarShift, если изначально уже имеется индекс бара?
Ну вообще требуется кол-во баров знать от текущего до стрелки
Если долго мучиться что-нибудь получится))
Нашёл время последнего сигнала стрелки!!
datetime t=0; double arrow=EMPTY_VALUE; int i=1; while(arrow==EMPTY_VALUE) { arrow=Ind(0,i); i++; } i--; t=Time[i];
Если долго мучиться что-нибудь получится))
Нашёл время последнего сигнала стрелки!!
Посмотрите это:
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 13.08.2008 | //| Описание : Возвращает номер бара фрактала по его номеру. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий ТФ) | //| nf - номер фрактала ( 0 - последний) | //+----------------------------------------------------------------------------+ int GetFractalBar(string sy="0", int tf=0, int nf=0) { if (sy=="" || sy=="0") sy=Symbol(); double f=0; int i, k=iBars(sy, tf), kf; for (i=2; i<k; i++) { f=iFractals(sy, tf, MODE_LOWER, i); if (f!=0) { kf++; if (kf>nf) return(i); } f=iFractals(sy, tf, MODE_UPPER, i); if (f!=0) { kf++; if (kf>nf) return(i); } } Print("GetFractalBar(): Фрактал не найден"); return(-1); }
Посмотрите это:
Зачем мне поиск фрактала?
Есть теперь компактное и эффективное решение, верный поиск ближайшего сигнала пользовательского индикатора.
//+------------------------------------------------------------------+ //| Индикатор | //-------------------------------------------------------------------+ double Ind(int buff, int bar) { double ind=iCustom(Symbol(),0,"Indicator", Period1,Period2,Period3, buff,bar); return(ind);} //+------------------------------------------------------------------+ //| Поиск ближайшего бара сигнала стрелки индикатора | //+------------------------------------------------------------------+ int BarSignalIndicator(int buff) { double arrow=EMPTY_VALUE; int bar=1; while(arrow==EMPTY_VALUE) { arrow=Ind(buff,bar); bar++; } bar--; return(bar);}
Зачем мне поиск фрактала?
Есть теперь компактное и эффективное решение, верный поиск ближайшего сигнала пользовательского индикатора.
Только его нужно допилить. Например, что будет, если дошли до конца истории, а стрелка так и не найдена? В примере с фракталами это учтено.
Как узнать бар или время стрелки индикатора в советнике?
Как узнать бар или время стрелки индикатора в советнике?
BarBuy+N
Только его нужно допилить. Например, что будет, если дошли до конца истории, а стрелка так и не найдена? В примере с фракталами это учтено.
Что имеется ввиду?
Можно пальцем тыкнуть?))
Что имеется ввиду?
Можно пальцем тыкнуть?))
for (i=2; i<k; i++)
А в Вашем подходе:
while(arrow==EMPTY_VALUE)
Если стрелки нет на всей истории, то цикл продолжится, но уже на барах, которых в природе не существует. Получится зависание.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как узнать бар или время стрелки индикатора в советнике?