MQL4 - automated forex trading   /  

Code Base

Code Base  Индикаторы  WildersDMI_v1 Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый код

Этот скрипт для
MetaTrader 4

Мобильный трейдинг!
Купите лицензию и торгуйте мобильно

Имя:
WildersDMI_v1 [ en | cn ]
Автор: Scriptor (06.03.2008 10:31)
Скачано: 1334
Скачать:
 ADX_WildersDMI_v1m.mq4 (5.0 Kb) View
Автор: igorad

Индикатор WildersDMI_v1.


10 комментариев  Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый комментарий

Apparently all these versions having obvious bugs (see data on the left).

Igorad or someone else, care to point us to the original Wilder's description? Maybe there is more recent fixed version?

Извиняюсь, перевод:

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

Может, igorad или ещё кто-нибудь может скинуть линк на оригинальное описание Вайлдера? Или есть пофиксенная версия?

10.09.2009 16:20 pisara

Apparently all these versions having obvious bugs (see data on the left).

Igorad or someone else, care to point us to the original Wilder's description? Maybe there is more recent fixed version?



from top to bottom: MT4 version from year 2004; ADX Wilder by Rosh; WildersDMI, fixed v1.1 from igorad

10.09.2009 16:15 pisara
Вот картинка с описанием по этим двум паттернам из оригинала:


Кстати, твоя с исправлениями и моя обновленная версия полностью совпадают.


12.05.2008 12:04 igorad
igorad писал(а):

Rosh, в твоем коде  отсутствует  описание еще 2-х паттернов для DM+ и DM-:

   

И в начале надо усреднять по простой средней.

   


 Я делал индикатор строго по описанию автора. Книга есть на пауке.
10.05.2008 21:14 Rosh

Rosh, в твоем коде  отсутствует  описание еще 2-х паттернов для DM+ и DM-:

      else
      if (dm_plus > dm_minus)
         {  
         dm_plus=dm_plus;
         dm_minus=0;
         }
      else
      if (dm_plus < dm_minus)
         {  
         dm_plus=0;
         dm_minus=dm_minus;
         }

И в начале надо усреднять по простой средней.

   

10.05.2008 13:52 igorad

SMMA...   или вопрос в другом?

26.03.2008 03:14 fxxx
Rosh писал(а):
Мой вариант дает другие значения.



26.03.2008 03:10 fxxx
fxxx писал(а):

Rosh писал:
Мой вариант дает другие значения.

______________

Рош, а где другой вариант?

Да вот:
//+------------------------------------------------------------------+
//|                                                   ADX Wilder.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                         http://www.metaquotes.net/ru/|
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/ru/"
/* written by Rosh*/
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 MediumSeaGreen
#property indicator_color2 DodgerBlue
#property indicator_color3 Coral
#property indicator_color4 Brown
 
//---- input parameters
extern int       Period_ADX=14;
//---- buffers
double ADXBuffer[];
double PlusDiBuffer[];
double MinusDiBuffer[];
double ADXR_Buffer[];
 
double DX_Buffer[];
double Plus_DMBuffer[];
double Minus_DMBuffer[];
double TR_Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(8);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ADXBuffer);
   SetIndexDrawBegin(0,2*Period_ADX);
   SetIndexLabel(0,"ADX");
   SetIndexEmptyValue(0,EMPTY_VALUE);
   
   SetIndexStyle(1,DRAW_LINE,STYLE_DOT);
   SetIndexBuffer(1,PlusDiBuffer);
   SetIndexDrawBegin(1,Period_ADX);
   SetIndexLabel(1,"+DI");
   SetIndexEmptyValue(1,EMPTY_VALUE);
 
   SetIndexStyle(2,DRAW_LINE,STYLE_DOT);
   SetIndexBuffer(2,MinusDiBuffer);
   SetIndexDrawBegin(2,Period_ADX);
   SetIndexLabel(2,"-DI");
   SetIndexEmptyValue(2,EMPTY_VALUE);
 
   SetIndexStyle(3,DRAW_LINE,STYLE_DASH);
   SetIndexBuffer(3,ADXR_Buffer);
   SetIndexDrawBegin(3,3*Period_ADX);
   SetIndexLabel(3,"ADXR");
   SetIndexEmptyValue(3,EMPTY_VALUE);
 
   SetIndexBuffer(4,DX_Buffer);
   SetIndexBuffer(5,Plus_DMBuffer);
   SetIndexBuffer(6,Minus_DMBuffer);
   SetIndexBuffer(7,TR_Buffer);
 
   IndicatorDigits(0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int   i,counted_bars=IndicatorCounted();
   int   limit1,limit2,limit3,limit4;
   double dm_plus, dm_minus,tr,TR14;
   double num1,num2,num3,summ;
   
   int counter1,counter2,counter3,counter4;
//----
   if (counted_bars==0)
      {
      limit1=Bars-2;
      limit2=Bars-1-Period_ADX;
      limit3=limit2-Period_ADX;
      limit4=limit3-Period_ADX;
      ArrayInitialize(Plus_DMBuffer,0);
      ArrayInitialize(Minus_DMBuffer,0);
      ArrayInitialize(TR_Buffer,0);
      ArrayInitialize(PlusDiBuffer,0);
      ArrayInitialize(MinusDiBuffer,0);
      ArrayInitialize(DX_Buffer,0);
 
      }   
 
   if (counted_bars>0)
      {
      limit1=Bars-counted_bars-1;
      limit2=limit1;
      limit3=limit1;
      limit4=limit1;
      }   
   for (i=limit1;i>=0;i--)
      {
      if (High[i]>High[i+1])  dm_plus=High[i]-High[i+1]; else dm_plus=0;
      if (Low[i+1]>Low[i])  dm_minus=Low[i+1]-Low[i]; else dm_minus=0;
      if (dm_plus==dm_minus)
         {
         dm_plus=0;
         dm_minus=0;
         }
      num1=MathAbs(High[i]-Low[i]);
      num2=MathAbs(High[i]-Close[i+1]);
      num3=MathAbs(Low[i]-Close[i+1]);
      tr=MathMax(num1,num2);
      tr=MathMax(tr,num3);
      Plus_DMBuffer[i]=dm_plus;
      Minus_DMBuffer[i]=dm_minus;
      TR_Buffer[i]=tr;
      
      counter1++;
      }
   for (i=limit2;i>=0;i--)
      {
      TR14=iMAOnArray(TR_Buffer,0,Period_ADX,0,MODE_SMMA,i);
      if (TR14!=0)
         {
         PlusDiBuffer[i]=iMAOnArray(Plus_DMBuffer,0,Period_ADX,0,MODE_SMMA,i)/TR14*100.0;
         MinusDiBuffer[i]=iMAOnArray(Minus_DMBuffer,0,Period_ADX,0,MODE_SMMA,i)/TR14*100.0;
         }
      else
         {
         PlusDiBuffer[i]=0.0;
         MinusDiBuffer[i]=0.0;
         }
      summ=PlusDiBuffer[i]+MinusDiBuffer[i];   
      if (summ!=0)DX_Buffer[i]=MathAbs(PlusDiBuffer[i]-MinusDiBuffer[i])/summ*100.0; else DX_Buffer[i]=0;
 
      if (counter2<5*Period_ADX) Print(Bars-1-i,"   ",DoubleToStr(PlusDiBuffer[i],Digits),"  ",DoubleToStr(MinusDiBuffer[i],Digits),"  ",DoubleToStr(TR14,Digits));
      counter2++;
      }
   for (i=limit3;i>=0;i--)  ADXBuffer[i]=iMAOnArray(DX_Buffer,0,Period_ADX,0,MODE_SMMA,i);
   for (i=limit4;i>=0;i--)  ADXR_Buffer[i]=(ADXBuffer[i]+ADXBuffer[i+Period_ADX])/2.0;
//----
   return(0);
  }
//+------------------------------------------------------------------+

24.03.2008 09:47 Rosh

Rosh писал:
Мой вариант дает другие значения.

______________

Рош, а где другой вариант?

23.03.2008 08:05 fxxx
Мой вариант дает другие значения.


06.03.2008 10:41 Rosh