Определение параллельности разнопериодных Moving Average - страница 5

 

Мужики, спасибо за такое активное обсуждение!

Integer, отдельный пламенный стариковский привет! ) 

Тема действительно интересная и раз уж здесь оказалось столько неравнодушных, то расскажу зачем мне это нужно.  Но сделаю это не здесь, а на своем сайте, чтобы не на пальцах, а подробно. Даже скорее всего сделаю небольшое видео, чтобы не рисовать слишком много нюансовых картинок.

А здесь пока скажу в двух словах:

параллельность разнопериодных МА - это индикатор СИЛЫ ТРЕНДА.

Работающий настолько сильно, что ломает и диверы, и даже разворотные паттерны

Только до выхода видео вы не спешите делать выводы ;) 

____________

PS: мне нравится позиция Vladivir1974 - пусть вместо споров будут РАЗНЫЕ методы. А там видно будет по реализации - и по рессурсам, и по удобству, и т.п. Может кто-то не самый лучший способ реализует так, что результат всем понравится. 

 
#property   copyright "Copyright 2012, Тарабанов А.В."
#property   link      "alextar@bk.ru"
#property   indicator_separate_window  // Атрибуты индикатора
#property   indicator_buffers 3
#property   indicator_color1 Blue      // Атрибуты буферов
#property   indicator_width1 1
#property   indicator_style1 STYLE_DOT
#property   indicator_color2 Blue
#property   indicator_width2 1
#property   indicator_style2 STYLE_DASH
#property   indicator_color3 Blue
#property   indicator_width3 1
#property   indicator_style3 STYLE_SOLID
#define     Version  "Mashki"          // Константы
#define     MyError  4999
double      MA1[], MA2[], MA[];        // Буферные массивы
extern int  Period1     =20,           // Внешние переменные
            Period2     =40,
            ScaleDigits =0;
extern bool ShowDetails =false;
//+------------------------------------------------------------------+
int init(){
   int Draw=DRAW_NONE;
   if( ShowDetails ) Draw=DRAW_LINE;
   IndicatorShortName(Version);        // Атрибуты индикатора
   IndicatorDigits(ScaleDigits);
   SetIndexLabel(0,"MA "+Period1);     // Атрибуты буферов
   SetIndexStyle(0,Draw);
   SetIndexBuffer(0,MA1);
   SetIndexLabel(1,"MA "+Period2);
   SetIndexStyle(1,Draw);
   SetIndexBuffer(1,MA2);   
   SetIndexLabel(2,"MA "+Period1+" - MA "+Period2);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,MA);   
   if( Period1<0 ) Period1=-Period1;   // Контроль внешних переменных
   if( Period2<0 ) Period2=-Period2;
   if( Period1<1 || Period2<1 ) Alert("Ошибка исходных данных");
   if( ScaleDigits>8 ) ScaleDigits=8;
   if( ScaleDigits<0 ) ScaleDigits=-ScaleDigits;
   return(0);
}
//+------------------------------------------------------------------+
int start(){
   double v1, v2;
   int Error, i1, i2, History=Bars-1;
   int j=History-IndicatorCounted();   // Рассматриваемые бары
   while( j>=0 ){
      i1=j+Period1;
      i2=j+Period2;
      if( i1<=History ) v1=(Close[j]-Close[i1])/Period1;
      if( i2<=History ) v2=(Close[j]-Close[i2])/Period2;
      // Приведение к заданной шкале и отображение:
      MA1[j]=NormalizeDouble(v1/Point,ScaleDigits);
      MA2[j]=NormalizeDouble(v2/Point,ScaleDigits);
      MA[j] =MA1[j]-MA2[j];
      if( ( MA[j]>=0
       &&   MA[j+1]<0 )
       || ( MA[j]<0
       &&   MA[j+1]>0 ) ) Error=fVLine("Break",j);
      j--;
   }
   return(0);
}
//-----------------------------------------------------------------------------
// Формирование вертикальной линии
int fVLine(string Name,
           int    Bar,
           color  Цвет=Black,
           bool   Фон=true,
           int    Стиль=STYLE_DOT,
           int    Видимость=0){
   int Error;
   if( Bar<0 ) return(MyError);
   Name=Name+Time[Bar];
   Error=fObjectDelete(Name);
   if( Error>0 && Error<MyError ) return(Error);
   if( ObjectCreate(Name,OBJ_VLINE,0,Time[Bar],0) ){
      if( !ObjectSet(Name,OBJPROP_COLOR,Цвет)
       || !ObjectSet(Name,OBJPROP_BACK,Фон)
       || !ObjectSet(Name,OBJPROP_STYLE,Стиль)
       || !ObjectSet(Name,OBJPROP_TIMEFRAMES,Видимость) ){
         Error=GetLastError();
         Print("***** "+Name+" - ошибка модификации параметров "+Error);
   }  }
   else{
      Error=GetLastError();
      Print("***** "+Name+" - объект не создан, ошибка "+Error);
   }
   return(Error);
}
//-----------------------------------------------------------------------------
// Удаление графического объекта
int fObjectDelete(string Name){
   int Error;
   if( ObjectFind(Name)==0 ){
      if( !ObjectDelete(Name) ){
         Error=GetLastError();
         Print("***** "+Name+" - ошибка при попытке удаления "+Error);
   }  }
   else{
      Error=MyError;
   }
   return(Error);
}
Простейший вариант. Через день-два будет распознавание "параллельных" участков, пока - только точки параллельности (вертикальные прямые). Мусор не чистит - работать некогда:(
 
Андрей, напишете интересность на 5-ке? Анатомия тренда:) 
 
tara:
Андрей, напишете интересность на 5-ке? Анатомия тренда:) 
Возможно. Но после НГ. Вы уже не первый раз дразнитесь.
 
TheXpert:
Возможно. Но после НГ. Вы уже не первый раз дразнитесь.

Прошу прощения... Сам хотел, но это малореально:(
 

Алексей, обязательно нужно делать переключение метода расчета МА - у всех ведь вкусы и привычки разные. Можешь забить по умолчанию мои, ты же их знаешь (напомню - ЕМА30 и WMA97, потом, если можно, добавить еще и отключаемую ЕМА222)

Или хотя бы написать какие вставлены, чтобы не гадать.

 
EVladMih:

Алексей, обязательно нужно делать переключение метода расчета МА - у всех ведь вкусы и привычки разные. Можешь забить по умолчанию мои, ты же их знаешь (напомню - ЕМА30 и WMA97, потом, если можно, добавить еще и отключаемую ЕМА222)

Или хотя бы написать какие вставлены, чтобы не гадать.

Сделаю, конечно. Сейчас программа обязана быть предельно простой. Я вообще не хочу задавать настройки параметров распознавания псевдопараллельности - это, имхенько, пока главненькое:) 
 
tara:
Сделаю, конечно. Сейчас программа обязана быть предельно простой. Я вообще не хочу задавать настройки параметров распознавания псевдопараллельности - это, имхенько, пока главненькое:) 

Если хочешь чтобы в этом и я поучаствовал, то у меня только один метод контроля соответствия индикации желаемому результату - визуальный. Значит я должен сравнивать показания индикатора с тем, что вижу на своих МА. Если у тебя есть другой способ и моя помощь не нужна - "баба с возу", буду ждать готовый пряник. ))  

Алексей, с 55-летием! 

Здоровья, счастья, всяческих успехов и Удачи! 

 
Спасибо! И да помогут нам машки:)
 
tara:

Присоединяюсь! Желаю здоровья!

//Коротко, без похоронного пафоса :)
//Честно говоря, не так и много адекватных людей, с которыми приятно общаться, которые ничего от тебя не хотят, не троллят и не обливают грязью.

Причина обращения: