Обсуждение статьи "Разработка торговой системы на основе индикатора ADX" - страница 2

 
Привет. я только начал изучать adx и dmi в течение нескольких месяцев. и я хотел бы иметь ea для этого. так как это запаздывающий индикатор. может быть таймфрейм M15 лучше подходит. вы можете сделать его? где я могу связаться с вами для условий и сроков? спасибо.
 

Здравствуйте, Мохамед,

Вместо:

   double ADXArray0[];
   double ADXArray1[];
...
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);

Не будет ли этого достаточно?

      double ADXArray[];
...
      double ADXValue=NormalizeDouble(ADXArray[0],2);
      double ADXValueLast=NormalizeDouble(ADXArray[1],2);

С уважением,

Хуан Луис

Learn how to design a trading system by ADX
Learn how to design a trading system by ADX
  • www.mql5.com
In this article, we will continue our series about designing a trading system using the most popular indicators and we will talk about the average directional index (ADX) indicator. We will learn this indicator in detail to understand it well and we will learn how we to use it through a simple strategy. By learning something deeply we can get more insights and we can use it better.
 
Juan Luis De Frutos Blanco #:

Здравствуйте, Мохамед,

Вместо:

Разве этого не достаточно?

С уважением,

Хуан Луис

Здравствуйте, Хуан,

Вы правы, это может быть похоже на то, что вы упомянули.


С уважением,

 
Хорошая статья: одна из основ советника, который я строю в данный момент.
Спасибо, Мохамед. 🏅🏅🏅

 
У вас отличная статья. Я люблю использовать ADX для скальпинга. У меня есть идея, что когда линия ADX выше 25 и dmi plus пересекает dmi minus, цвет свечи становится зеленым, что указывает на бычий тренд и наоборот. Я пытаюсь закодировать, но пока не получается.
 
1
 

Отличная статья! Однако в одной из них я заметил ошибку, а также возможность для подсказки. Ошибка связана с CopyBuffers и использованием одного и того же индекса буфера для одного и того же хэндла. Хэндл индикатора в MQL5 может получить доступ к определенному буферу только через соответствующий уникальный индекс буфера в вызове функции CopyBuffer().


Поэтому, когда вы ставите:

CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);


Это должно быть так:

CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,1,0,2,ADXArray1);
CopyBuffer(ADXDef,2,0,3,PDIArray);
CopyBuffer(ADXDef,3,0,3,NDIArray);


Ключевыми моментами, касающимися индикаторных хэндлов и буферов, являются:
  • Уникальная индексация: Каждый хэндл индикатора управляет набором внутренних буферов, каждый из которых идентифицируется уникальным индексом (начиная с 0).
  • Один хэндл, один индекс: Когда вы используете CopyBuffer(handle, buffer_index, ...) , вы указываете, изкакого именно буфера , связанного с этим хэндлом , вы хотите скопировать данные.
  • Множественные вызовы: Если индикатор имеет несколько буферов данных (например, старшая и младшая полосы канала), вы должны вызвать CopyBuffer() несколько раз, используя один и тот же хэндл, но с разными индексами буферов (например, индекс 0 для верхней полосы, индекс 1 для нижней полосы).
Вы не можете иметь два отдельных вызова CopyBuffer для одного и того же индекса буфера в одном и том же хэндле, которые каким-то образом указывают на разные данные, поскольку индекс является уникальным идентификатором для серии данных в этом хэндле.


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


Теперь о маленьком совете...

Это не очень важно, но определенно сэкономит вам несколько лишних нажатий клавиш при написании текста:


 Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);


Есть несколько лишних кавычек, которые вам не нужны. Чтобы упростить, вы можете сделать вот так:


 Comment("Simple ADX System - Signal is ",signal,"\nADX Value is ", ADXValue,
   "\nADX Value Last is ", ADXValueLast, "\n+DI Value is ", PDIValue,
   "\n-DI Value is ", NDIValue);


В остальном статья показалась мне очень информативной и подробной.


 

Единственное, что я бы добавил сюда, это обработку ошибок в OnInit() и DeOnit(), и измените название переменной с ADXDef на h_ADXDef (или handle_ADXDef), так будет понятнее при чтении кода и просто сделает ее более точным идентификатором, показывающим ее конкретное назначение.

В OnInit():


  if(h_ADXDef == INVALID_HANDLE)
   {
      Print("Error creating indicator handles: ", GetLastError());
      return(INIT_FAILED);
   }


И, в DeOninit():


if(h_ADXDef != INVALID_HANDLE) IndicatorRelease(h_ADXDef);