Rosh писал:
Мой вариант дает другие значения.
______________
Рош, а где другой вариант?
Rosh писал:
Мой вариант дает другие значения.
______________
Рош, а где другой вариант?
//+------------------------------------------------------------------+ //| ADX Wilder.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| https://www.metaquotes.net/ru| //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "https://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); } //+------------------------------------------------------------------+
Мой вариант дает другие значения.
SMMA... или вопрос в другом?
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;
}
И в начале надо усреднять по простой средней.
Rosh, в твоем коде отсутствует описание еще 2-х паттернов для DM+ и DM-:
И в начале надо усреднять по простой средней.
Я делал индикатор строго по описанию автора. Книга есть на пауке.
Кстати, твоя с исправлениями и моя обновленная версия полностью совпадают.
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
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 или ещё кто-нибудь может скинуть линк на оригинальное описание Вайлдера? Или есть пофиксенная версия?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
WildersDMI_v1:
Author: John Smith