Скачать MetaTrader 5

Примеры: Практическое применение кластерных индикаторов на рынке FOREX

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
182642
MetaQuotes Software Corp.  

New article Практическое применение кластерных индикаторов на рынке FOREX has been published:

Кластерные индикаторы – это набор индикаторов, разделяющих валютные пары на отдельные валюты. Индикаторы позволяют следить за колебаниями валют относительно друг друга, определять потенциал зарождения новых валютных трендов, получать торговые сигналы и сопровождать среднесрочные и долгосрочные позиции.

Author: Simeon Semenych

Crazy_Fox
120
Crazy_Fox  

Я думаю многие заметили, что индикаторы 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: Семён Семёныч, спасибо за проделанную работу!

MQL4 Comments
16319
MQL4 Comments  

Если не трудно, помогите понять, что здесь происходит (см. Индикаторы 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);
}

================================================

Вроде как получается, сумма неких ма с разных ТФ?

Если нетрудно, очень хотелось бы понять математику (простым математическим языком) вызываемого блока.

Заранее признателен!

С Уважением! :)

Левитин Сергей В.
5163
Левитин Сергей В.  

А никто не пробовал вместо машки цифровые фильтры подсунуть? Хочу поробовать, но боюсь тормазня будет страшная...

MQL4 Comments
16319
MQL4 Comments  
Спасибо! Хорошая информация, есть что перенять с этого:)
MQL4 Comments
16319
MQL4 Comments  
Crazy_Fox:

Я думаю многие заметили, что индикаторы 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: Семён Семёныч, спасибо за проделанную работу!

MQL4 Comments
16319
MQL4 Comments  
Crazy_Fox:

Я думаю многие заметили, что индикаторы 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: Семён Семёныч, спасибо за проделанную работу!


ссылка дохлая
Алексей
450
Алексей  
MIM0:
Crazy_Fox:

Для тех, кому неохота ковырять код - вот уже исправленные индикаторы: (это не картинка, это ZIP архив) ===> 

PS: Семён Семёныч, спасибо за проделанную работу!


ссылка дохлая

Нет не дохлая только-что скачал.

Там скачивается фотка весом 8 кб меняем расширение на Zip и получаем 3 индюка в архиве...

Вот праямая ссылка если так проще Тык

Ну или ниже прикрепил уже сам архив.

Alexey_74
165
Alexey_74  

Вот только что наткнулся на эти индюки.

Сразу вопрос возник. В 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

Если эту ошибку устранить, индюк начинает рисовать совсем другое.

Stanislav Korotky
18235
Stanislav Korotky  
А в тестере эти индикаторы должны нормально отрисовываться, в том числе в визуальном режиме? Беру эксперт пустышку, в режиме паузы набрасываю туда индикатор, например, CFP - он нормально отрисовыватся вплоть до последнего бара, отключаю паузу - и индикатор как-бы замораживается: последние Last_Bars (или Bars.Count в модифицированно версии - без разницы) баров пересчитываются в те самые значения, которые имели Last_Bars во время паузы. Т.е. картинка индикатора стоит на месте, несмотря на то, что бары движутся справа налево. Добавил отладочные Print-ы, чтобы убедиться, что номера баров, времена, и значения машек изменяются. И вот бары и время идёт, но значения считаются одни и те же. Что за фигня? Заранее спасибо.
NIKILMEN
174
NIKILMEN  
В архиве не работает индикатор Complex_pairs1
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий