Я думаю многие заметили, что индикаторы CC, CCFp и CFP не обновляются автоматически. Я их немного подправил - теперь всё нормально.
Что нужно сделать:
ищем в самом начале функции start() код:
int counted_bars = IndicatorCounted(); //---- проверка на возможные ошибки if(counted_bars < 0) return(-1); //---- последний посчитанный бар будет пересчитан if(All_Bars < 1) All_Bars = Bars; if(counted_bars > 0 && Last_Bars > 0) counted_bars -= Last_Bars; limit = All_Bars - counted_bars;
и заменяем его на следующий:
if (IndicatorCounted()<0) return(-1); limit=Bars-IndicatorCounted(); if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count;
Теперь в начале файла ищем объявление параметров:
extern int All_Bars = 0; extern int Last_Bars = 0;
Они нам теперь не нужны, вместо них вставим строчку:
extern int Bars.Count = 0;
Всё, теперь никаких проблем не будет. Это применимо для всех трёх индикаторов.
Для тех, кому неохота ковырять код - вот уже исправленные индикаторы: (это не картинка, это ZIP архив) ===>
PS: Семён Семёныч, спасибо за проделанную работу!
Если не трудно, помогите понять, что здесь происходит (см. Индикаторы CCFp и CFP)
Здесь вызываем
if(EUR)
{
double EURUSD_Fast = ma("EURUSD", Fast, MA_Method, Price, i);
double EURUSD_Slow = ma("EURUSD", Slow, MA_Method, Price, i);
if(!EURUSD_Fast || !EURUSD_Slow)
break;
}
========================================================
Отсюда вызываем
//+------------------------------------------------------------------+
//| Subroutines |
//+------------------------------------------------------------------+
double ma(string sym, int per, int Mode, int Price, int i)
{
double res = 0;
int k = 1;
int ma_shift = 0;
int tf = 0;
switch(Period())
{
case 1: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
k += 5;
case 5: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
k += 3;
case 15: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
k += 2;
case 30: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
k += 2;
case 60: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
k += 4;
case 240: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
k += 6;
case 1440: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
k += 4;
case 10080: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
k +=4;
case 43200: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
}
return(res);
}
================================================
Вроде как получается, сумма неких ма с разных ТФ?
Если нетрудно, очень хотелось бы понять математику (простым математическим языком) вызываемого блока.
Заранее признателен!
С Уважением! :)
А никто не пробовал вместо машки цифровые фильтры подсунуть? Хочу поробовать, но боюсь тормазня будет страшная...
Я думаю многие заметили, что индикаторы CC, CCFp и CFP не обновляются автоматически. Я их немного подправил - теперь всё нормально.
Что нужно сделать:
ищем в самом начале функции start() код:
int counted_bars = IndicatorCounted(); //---- проверка на возможные ошибки if(counted_bars < 0) return(-1); //---- последний посчитанный бар будет пересчитан if(All_Bars < 1) All_Bars = Bars; if(counted_bars > 0 && Last_Bars > 0) counted_bars -= Last_Bars; limit = All_Bars - counted_bars;
и заменяем его на следующий:
if (IndicatorCounted()<0) return(-1); limit=Bars-IndicatorCounted(); if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count;
Теперь в начале файла ищем объявление параметров:
extern int All_Bars = 0; extern int Last_Bars = 0;
Они нам теперь не нужны, вместо них вставим строчку:
extern int Bars.Count = 0;
Всё, теперь никаких проблем не будет. Это применимо для всех трёх индикаторов.
Для тех, кому неохота ковырять код - вот уже исправленные индикаторы: (это не картинка, это ZIP архив) ===>
PS: Семён Семёныч, спасибо за проделанную работу!
Я думаю многие заметили, что индикаторы CC, CCFp и CFP не обновляются автоматически. Я их немного подправил - теперь всё нормально.
Что нужно сделать:
ищем в самом начале функции start() код:
int counted_bars = IndicatorCounted(); //---- проверка на возможные ошибки if(counted_bars < 0) return(-1); //---- последний посчитанный бар будет пересчитан if(All_Bars < 1) All_Bars = Bars; if(counted_bars > 0 && Last_Bars > 0) counted_bars -= Last_Bars; limit = All_Bars - counted_bars;
и заменяем его на следующий:
if (IndicatorCounted()<0) return(-1); limit=Bars-IndicatorCounted(); if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count;
Теперь в начале файла ищем объявление параметров:
extern int All_Bars = 0; extern int Last_Bars = 0;
Они нам теперь не нужны, вместо них вставим строчку:
extern int Bars.Count = 0;
Всё, теперь никаких проблем не будет. Это применимо для всех трёх индикаторов.
Для тех, кому неохота ковырять код - вот уже исправленные индикаторы: (это не картинка, это ZIP архив) ===>
PS: Семён Семёныч, спасибо за проделанную работу!
ссылка дохлая
Для тех, кому неохота ковырять код - вот уже исправленные индикаторы: (это не картинка, это ZIP архив) ===>
PS: Семён Семёныч, спасибо за проделанную работу!
ссылка дохлая
Нет не дохлая только-что скачал.
Там скачивается фотка весом 8 кб меняем расширение на Zip и получаем 3 индюка в архиве...
Вот праямая ссылка если так проще Тык
Ну или ниже прикрепил уже сам архив.
Вот только что наткнулся на эти индюки.
Сразу вопрос возник. В CCFp специально ввели ошибку в оператор Switch()?
/+------------------------------------------------------------------+
//| Subroutines |
//+------------------------------------------------------------------+
double ma(string sym, int per, int Mode, int Price, int i)
{
.......................................
switch(Period())
{
case 1: res += iMA(sym, tf, per*k, ma_shift, Mode, Price, i);
k += 5;
....................
}
Дело в том, что вообще-то строка выбора case, оператора switch() должна завершаться оператором break
Если эту ошибку устранить, индюк начинает рисовать совсем другое.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Практическое применение кластерных индикаторов на рынке FOREX:
Author: Simeon Semenych