Хорошие индикаторы по теории Демарка - страница 3

 
По порядку - как далеко искать точку и нужно ли это. Если торгуем по стратегии Демарка, то нужно - поскольку именно для этого варианта была проведена статистика, для других вариантов нужно статистически исследовать самостоятельно - Вы уверены, что пропуск точек входа оставил систему профитной ? Я, например, нет. Если бы у Вас был полный набор сигналов и Вы хотели бы некоторые отфильтровать - это было бы другое дело, а так возможно самые профитные Вы пропустите не по условиям фильтра, а просто потому, что неверно строится линия тренда, ну а лоссовые так и останутся - при этом система из профитной легко может превратиться в убыточную, а потом придется рассказывать, что ВСЕ индикаторы по Демарку не работают, как это сделали в начале данной ветки :).
Что такое массив физически - набор однотипных переменных расположеных друг за другом с одного адреса - только не спрашивайте больше, если Вы не в курсе как организована память в ЭВМ, то начинать нужно будет с организации адресации - просто считайте, что все ячейки идут подряд - это примерно соотвествует действительности.
У Вас в алгоритме есть еще одна существенная ошибка, которая к счастью легко исправляется - я этого делать не стал - потому как алгоритм не мой. А именно при поиске локальных экстремумов у Вас в расчетах участвует последний бар, нулевой (когда shift=1, тогда shift-1 = 0), а этого быть не должно, поскольку для последнего бара единственно достоверно известная цена - это его открытие, ни хай, ни лоу не известны - то есть они могут меняться. Для того, чтобы это исправить в цикле for(shift=Bars-1;shift>=1;shift--) замените нестрогое неравенство на строгое, то есть на "shift>1", тогда последний бар для которого будет произведен поиск экстремума будет не 1, а 2 и все станет нормально.
В чистом виде Демарка не использую субъективно - не нравится соотношение профит\лосс, хотя торговля по этому индюку, что я выкладывал, профитная - торговал сам и знаю достаточно большое количество народа, которые так и продолжают торговать. ИМХО - его сигналы нужно фильтровать я, например, сейчас пытаюсь добавить трендовый фильтр по Ганну. Вроде все.

Удачи.
 
А как сделать чтобы прорисовывались линии прорыва?



Я обязательно проанализирую твой индикатор,но для этого нужно время, как ты сам видишь их вывод решения сильно отличаются, а представленную мною версии я использую.
 
По поводу линий прорыва не понял. Я Ваш индикатор не тестировал - просто перевел, глянул, что МТ3 и МТ4 рисуют похоже и все. Что за линии прорыва ?

Удачи.
 
Под линиями прорыва я подразумеваю уровень до которого должна дойти цена после прорыва TD-линии. На графике должна прорисовываться пунктирная линия.

ObjectCreate("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJ_HLINE, 0, TimeofMaximum[0][0], TargetPriceUp,TimeofMaximum[1][0], TargetPriceUp);
ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_STYLE, STYLE_DOT);
ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_COLOR, Blue);
ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_WIDTH, 1);
 
Понял - это то, что у Демарка называется ценовым проектором. Не смотрел. Будет время попытаюсь разобрать код. Пока переводил на скорую руку.

Удачи.
 
В оригинале для меня вроде все понятно, кроме одного. Ценовой проектор бывает "скачет" (меняет свое местоположение и снова возвращается). Ты можешь объяснить почему? Мне кажется, причина где-то здесь.

If Close[shift] > TrendPriceUp[2,1] AND Close[shift+1] <= TrendPriceUp[1,1]
AND TrendPriceUp[1,1] >= TrendPriceUp[2,1]
Then {MinPrice = Low[Lowest(MODE_LOW, shiftofMaximum[1,1], shiftofMaximum[1,1] - shift)];
TargetPriceUp = (TrendPriceUp[2,1] - MinPrice) + TrendPriceUp[2,1];
 
Конечно могу - в расчетах участвует текущая цена, когда shift=0, то Close[0] есть ни что иное как Бид. Эта переменная должна участвовать в расчетах только при выподнении условий первого или второго квалификаторов пробоя и тогда скакать будет, но вероятность ложных пробоев сильно уменьшится.
Пока застрял со своими программами - попозже смогу заняться твоим Демарком, если еще будет актуально.

Удачи.
 
Владислав, объясню почему для меня актуален этот именно индикатор. Я теперь понял , вроде бы, отличие моей работы от теории Демарка. По Демарку ждешь когда пробивает TD-линию и тогда ставишь в направлении прорыва до ценового проектора. Я же читаю информацию иначе. Меня не волнует прорыв, он нужен мне только для расчета проектора. Самое главное для меня в этом деле, это проекторы. Когда они оба находятся по одну сторону от котировки, то это важный сигнал к возможно скорому развороту движения цены. Как ты сам уже видел, описание индикатора упрощенное от Демарка, соответственно проекторы рисуются иначе. Я не говорю что это правильно, тут еще возможно дорабатывать и дорабатывать, но это нужно делать постепенно. Твой же индикатор, мне действительно интересен. На глаз он действительно должен работать, хотя нужно еще думать как стоп ставить. В моем случае, твой индикатор мне интересен с точки зрения доработки моего.
У Демарка мне что-то нравиться, а что-то нет, а что-то я не понимаю почему именно так и какие-то его разработки приходится брать за правило (например формулы расчета ценовых проекторов).

Владислав, кинь ссылку на ветку по Демарку в пауке. Выложенный здесь второй перевод твоего индикатора не прорисовывает ценовой прорыв, наверное где-то опечатка. Выложи, пожалуйста, еще раз здесь твоего Демарка с правильным переводом и так чтобы ценовые проекторы прорисовывались всегда (вне зависимости от прорвана или нет TD-линия).
 
Выкладываю последнюю версию моей корректировки. UPTrend прорисовывается на отдельных таймфреймах, но не на всех и неправильно. Ценовой прорыв тоже прорисовывается не на всех таймфреймах и тоже неправильно (по крайней мере иначе чем в МТ3). Я не понимаю почему, вроде все правильно переведено.

//+------------------------------------------------------------------+
//|                                        DMTrendLines&PricesUp.mq4 |
//|                                        Copyright © 2003, Company |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2003, Company"
#property link      "http://www.company.com/"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
double ExtMapBuffer1[];


//---- input parameters
//Variable : shift(0);
//Variable : KUp(0), BUp(0), n(0),MinPrice(0),TargetPriceUp(0);
//Array : TrendPriceUp[2,1](0);
//Arrays : Maximum[2,1](0), TimeofMaximum[2,1](0), shiftofMaximum[2,1](0);
int shift=0;
double   TrendPriceUp[3][2],// ???????? зачем объявлять реально одномерный массив как 2-мерный ?
         KUp = 0.0, 
         BUp = 0.0, 
         MinPrice = 0.0,
         TargetPriceUp = 0.0,
         Maximum[3][2];// ???????? зачем объявлять реально одномерный массив как 2-мерный ?
         //MaxMinPriceimum[2][1];// ???????? зачем объявлять реально одномерный массив как 2-мерный ?
int      n = 0,
         shiftofMaximum[3][2];// ???????? зачем объявлять реально одномерный массив как 2-мерный ?

datetime TimeofMaximum[3][2];// ???????? зачем объявлять реально одномерный массив как 2-мерный ?
//string   buff_str="";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexArrow(0,217);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
  
   
//----
	for(int i=0; i<=2; i++){
   for(int j=0; j<=1; j++){
     TrendPriceUp[i][j]= 0;
     Maximum[i][j]     = 0;
     shiftofMaximum[i][j] = 0;
     TimeofMaximum[i][j]  = 0;
    }
    }
	
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
  Comment(" ");   
ObjectsDeleteAll();
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  // int    counted_bars=IndicatorCounted();
//---- 
for( shift = Bars-1; shift>= 1;shift--)  { //For shift = Bars-1 Downto 1 Begin

   TrendPriceUp[1][1] = TrendPriceUp[2][1];

   TrendPriceUp[2][1] = KUp*(shift) + BUp;
   ExtMapBuffer1[shift]     = TrendPriceUp[2][1];//SetIndexValue(shift, TrendPriceUp[2,1]);
   
   if( (High[shift] >  High[shift-1]) //Если точка - максимум, запоминаются ее координаты
    && (High[shift] >= High[shift+1]) 
       ) {
      Maximum[1][1] = Maximum[2][1]; 

      TimeofMaximum[1][1]  = TimeofMaximum[2][1];
      shiftofMaximum[1][1] = shiftofMaximum[2][1];
      shiftofMaximum[2][1] = shift;
      Maximum[2][1]        = High[shift];
      TimeofMaximum[2][1]  = Time[shift];


      KUp = (Maximum[2][1]-Maximum[1][1])/(shiftofMaximum[2][1]-shiftofMaximum[1][1]);
      BUp = Maximum[1][1] - KUp*shiftofMaximum[1][1];

      TrendPriceUp[2][1] = KUp*(shift) + BUp;
          
          if( Maximum[1][1] >= Maximum[2][1]) {  //Если тренд вниз, 

         for( n=shiftofMaximum[1][1];n>= shiftofMaximum[2][1];n--){  //Then {For n = shiftofMaximum[1,1] DownTo shiftofMaximum[2,1] Begin  вычисляется цена по новому тренду, начиная с его начала
             TrendPriceUp[2][1] = KUp*(n) + BUp;
             ExtMapBuffer1[n] = TrendPriceUp[2][1];//SetIndexValue(n, TrendPriceUp[2,1]);
             }
             
          
                 //MoveObject("UpTrend", OBJ_TRENDLINE, TimeofMaximum[1,1], Maximum[1,1], TimeofMaximum[2,1], Maximum[2,1], Blue, 1, STYLE_SOLID);
         //buff_str = "UpTrend";
            ObjectCreate("UpTrend", OBJ_TREND, 0, TimeofMaximum[1][1], Maximum[1][1],TimeofMaximum[2][1], Maximum[2][1]);
            ObjectSet("UpTrend", OBJPROP_STYLE, STYLE_SOLID);
            ObjectSet("UpTrend", OBJPROP_COLOR, Blue);
            ObjectSet("UpTrend", OBJPROP_WIDTH, 1);   //Новый тренд вниз прорисовывается
          
         }//If Maximum[1,1] >= Maximum[2,1]

      }// if High[shift] > High[shift - 1] AND High[shift] >= High[shift + 1]
      
      if( (Close[shift]>TrendPriceUp[2][1]) 
    && (Close[shift+1] <= TrendPriceUp[1][1])    
    && (TrendPriceUp[1][1] >= TrendPriceUp[2][1])  //и тренд направлен вниз, рассчитывается цена прорыва.
      ) {
       MinPrice = Low[Lowest(NULL,0,MODE_LOW, shiftofMaximum[1][1] - shift,shiftofMaximum[1][1])];
       TargetPriceUp = (TrendPriceUp[2][1] - MinPrice) + TrendPriceUp[2][1];
       
 
    
	//MoveObject("TargetPriceUp"+Mod(shift,1), OBJ_HLINE, TimeofMaximum[1,1], TargetPriceUp, TimeofMaximum[2,1], TargetPriceUp, Blue, 1, STYLE_DOT);
         //buff_str = "TargetPriceUp"+DoubleToStr(MathMod(shift,1),5);
            ObjectCreate("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJ_HLINE, 0, TimeofMaximum[1][1], TargetPriceUp,TimeofMaximum[2][1], TargetPriceUp);
            ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_STYLE, STYLE_DOT);
            ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_COLOR, Blue);
            ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_WIDTH, 1);
         
       }//If Close[shift] > TrendPriceUp[2,1] AND Close[shift+1] <= TrendPriceUp[1,1]

   }//For shift = Bars-1 Downto 1 Begin


         
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Вообще, хочу высказать тебе благодарность. Я слегка начал понимать МЕ4. Ты раскрыл мне глаза на некоторые мысли Демарка, хотя касаемо темы ценовых прорывов вопросы еще возникнут.

Я считаю тему Демарка, возможно очень, перспективной, и надеюсь с твоей помощью довести ее до ума.
Причина обращения: