기고글 토론 "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 #:

안녕하세요, 모하메드입니다,

대신에:

이 정도면 충분하지 않을까요?

안부,

Juan Luis

안녕하세요 후안님,

맞습니다. 말씀하신 것과 같을 수도 있습니다.


감사합니다,

 
좋은 기사: 제가 지금 만들고 있는 EA의 다리 중 하나입니다.
고마워요 모하메드. 🏅🏅🏅

 
당신은 훌륭한 기사를 가지고 있습니다. 나는 내 스캘핑에 ADX를 사용하는 것을 좋아합니다. 나는 25 위의 ADX 라인과 dmi 플러스가 dmi 마이너스를 교차 할 때 양초의 색이 녹색이되면 추세가 강세임을 나타내고 그 반대의 경우도 마찬가지라는 생각을 가지고 있으며 코딩을 시도하고 있지만 지금까지 운이 좋지 않았습니다.
 
1
 

훌륭한 글입니다! 하지만 그 중 하나에서 오류를 발견했고, 팁을 줄 수 있는 기회도 발견했습니다. 오류는 복사 버퍼와 동일한 핸들에 대해 동일한 버퍼 인덱스를 사용하는 것입니다. MQL5의 표시기 핸들은 복사 버퍼() 함수 호출에서 해당 고유 버퍼 인덱스를 사용하여 특정 버퍼에만 액세스할 수 있습니다.


따라서

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, ...)를 사용하면 데이터를 복사할 해당 핸들과 연결된단일 버퍼를 지정하는 것입니다 .
  • 다중 호출: 인디케이터에 데이터 버퍼가 여러 개 있는 경우(예: 채널의 상위 밴드와 하위 밴드) 동일한 핸들을 사용하지만 버퍼 인덱스가 다른(예: 상위 밴드는 인덱스 0, 하위 밴드는 인덱스 1) CopyBuffer()를 여러 번 호출해야 합니다.
인덱스는 해당 핸들 내의 데이터 시리즈에 대한 고유 식별자이므로 동일한 핸들 내에서 동일한 버퍼 인덱스에 대해 어떻게든 다른 데이터를 가리키는 두 개의 개별 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);