기고글 토론 "하나의 차트에 여러 개의 지표 넣기(파트 04): Expert Advisor 만들기"

 

새로운 기고글 하나의 차트에 여러 개의 지표 넣기(파트 04): Expert Advisor 만들기 가 게재되었습니다:

이전 글에서 사용자 지정 지표를 사용할 때 여러 개의 하위 창으로 지표를 만드는 방법을 설명했습니다. 이번에는 Expert Advisor에 여러 개의 창을 추가하는 방법을 알아보겠습니다.

OOP(객체 지향 프로그래밍)를 사용하여 새로운 것을 만들기로 결정했을 때 보안이나 상속을 포함하여 이 접근 방식을 사용하면 큰 이점이 있다는 것을 이미 알고 있었기 때문에 이 작업을 수행했습니다. 다형성도 있지만 다형성은 나중에 교차 주문 시스템을 만들 때 사용합니다. 이 경우 우리는 OOP의 장점 중 하나인 상속을 사용할 것입니다. C_TemplateChart는 이미 완전한 기능을 갖춘 클래스입니다. 이것을 보면 모든 것을 다시 프로그래밍하는 번거로움을 겪거나 클래스에 코드를 추가하는 위험을 감수하고 싶지 않을 것입니다. 해결책은 원래 코드를 전혀 변경하지 않고 새 코드나 기능을 추가할 수 있는 상속을 사용하는 것입니다.

상속을 사용하면 다음과 같은 사항을 포함하여 많은 이점이 있습니다: 이미 테스트된 코드는 테스트된 상태로 유지됩니다; 복잡하게 확장 되더라도 코드의 크기가 그만큼 증가하는 것은 아닙니다; 새로운 기능만 테스트하면 됩니다; 변하지 않는 것들은 상속되어 안정성을 제공합니다. 다시 말해 최소한의 노력을 들여 최대의 보안을 만드는 식으로 프로그램이 개선됩니다. 이를 이해하기 위해 아래 다이어그램을 살펴보겠습니다.

작성자: Daniel Jose

 
안녕하세요, Daniel 님의 글을 잘 보고 있는데요, 파트 03은 어떤 내용인가요?
 
Mateus Lopes #:
안녕하세요, 다니엘 님, 기사를 잘 보고 있는데 파트 03은 어떻게 되나요?

출판을 위해 릴리스를 요청할 때 작은 문제가 있었지만 이미 Part 03의 출판을 승인했으며 곧 사용할 수있을 것입니다.이 문제는 내가 이미 보낸 기사의 수로 인해 더 많이 발생했습니다 ... 현재 분석 할 기사가 15 개 더 있으며, 모두이 EA 개발에 참여하고 있으며 각 기사가 점점 더 복잡해집니다 .... 하지만 시리즈를 팔로우 해주셔서 감사합니다 ... 기사 05부터 많은 새로운 것들을 기대하세요, 그때부터는 정말 큰 일이 될 것이기 때문에 정말 가치가있을 것입니다...😁👍이 처음 몇 개는 앞으로 나올 것을 소개하기위한 것입니다.

 

안녕하세요 다니엘,

여러 가지 색상의 인디케이터에 문제가 있으며 귀하의 기사를 통해 해결책을 알고있을 수 있습니다.

속성 옵션을 사용하지 않고 모든 표시기 속성을 설정하는 함수를 만들고 싶습니다(예: #property indicator_color1 clrCrimson, clrWhite, clrLime).

아래 테스트 프로그램에서 발견한 것은 #property indicator_color1 clrCrimson,clrWhite,clrLime을 포함하면 프로그램이 제대로 작동하는 반면, 이를 주석으로 처리하면 프로그램이 제대로 작동하지 않는다는 것입니다.이 경우 "더 높은?" 시간 프레임을 사용하거나 여러 데이터 포인트를 건너뛰는 것처럼 일부 데이터 포인트만 표시하는 것 같습니다. 여러 색상을 지정할 때 속성 색상 지시문이 제가 확인하지 않은 속성을 더 설정하고 있다고 생각합니다.

두 번째 문제는 제가 다중 색상 플롯 사용의 세부 사항과 요구 사항을 이해하지 못한다는 것입니다. 문서를 검색했지만 다중 색상 표시기를 사용하는 방법에 대한 개요를 제공하는 문서를 찾지 못했습니다. 첫 번째 플롯은 색상이 올바르게 변경되지만 최저값을 표시하는 두 번째 플롯은 제 함수 호출에 따라 색상이 변경되지 않습니다. 이 플롯이 제대로 작동하려면 유형2, 색상2 및 너비2의 세 가지 속성이 모두 필요합니다. 또한 속성 선언에 3 대신 2를 사용하는 이유도 당황스럽습니다. Mladen의 라구에르 적응 필터 표시기를 사용하여 속성 표시기가 표시기 번호 3이 아닌 플롯 번호 2를 사용하여 올바르게 표시되는지 확인했습니다.

어떤 제안, 참조 또는 도움을 주시면 대단히 감사하겠습니다.

안부, 케이프 코다

파일:
 
CapeCoddah 표시기를 사용하는 방법에 대한 개요를 제공하는 문서를 찾지 못했습니다. 첫 번째 그래프는 색상이 올바르게 변경되지만, 저점을 추적하는 두 번째 그래프는 함수 호출에 따라 색상이 변경되지 않습니다. 이 그래프가 제대로 작동하려면 유형2, 색상2, 너비2의 세 가지 속성이 모두 필요합니다. 또한 속성 선언에 3 대신 2를 사용하는 이유도 의아합니다. Mladen의 라구에르 적응형 필터 표시기를 사용하여 속성 표시기가 표시기 번호 3이 아닌 차트 번호 2를 사용하여 올바르게 표시되는 것을 확인했습니다.

어떤 제안, 참조 또는 도움을 주시면 대단히 감사하겠습니다.

진심으로, 케이프 코다

약간 혼란스럽다는 것은 이해할 수 있지만 모든 혼란은 코드의 세부 사항을 실제로 보지 않고 있다는 사실에 있습니다. 댓글에있는 몇 가지 세부 사항을 설명한 다음 코드에 대해 조금 이야기하겠습니다....

첫 번째 요점은 #property indicator_colorN을 사용하지 않고도 여러 색상의 표시기를 생성 할 수도 있지만 사용자와 사용자에게도 코드를 이해하고 수정하는 것이 더 실용적이고 안전하며 간단하다는 것입니다. 왜냐하면 속성으로 이동하기 만하면 거기에있는 색상을 수정하기 만하면되고 사용자에게는 MT5가 표시기를 위해 생성하는 표준 창에서 수정할 색상을 선택하고 변경하기 만하면되기 때문에 더 간단하기 때문입니다. 색상 변경을 생성하기 위해 PlotIndexSetInteger 명령을 사용할 때 어떻게 든 이미 올바른 작업을 수행하고 있으며, 이것은 #property indicator_colorN을 사용하지 않을 때의 방법이지만 속성을 사용할 때 다른 색상을 설정하기 위해 PlotIndexSetInteger 명령을 사용하는 것이 합리적이지 않은 경우가 종종 있습니다, 이는 유지 관리가 더 복잡하고 사용자가 색상 표준이 무엇을 말하려는지 제대로 이해하지 못할 수 있기 때문에 사용자에게 더 혼란스러울 수 있으며, 코드가 사용자 코드이고 표시기를 사용하는 유일한 사람이 되더라도 동적 색상 패턴을 만드는 드문 경우를 제외하고는 큰 의미가 없기 때문입니다.

이제 두 번째 요점에 대해 설명하겠습니다: 이 경우 문제는 표시기가 플롯 할 항목 수 (2 개의 선의 경우 2 개)와 개체 속성 (이 경우 선)을 혼동하고 있으며 선을 플롯하려면 실제로 최소 3 개의 정보를 선언해야하며, 여기서 N은 개체의 수를 나타내는 TypeN, ColorN, WidthN, 연습과 시간을 통해 표시기 속성과 그가 사용하는 개체 속성 간의 이러한 작은 차이를 이해하게 될 것입니다.... 포기하지 마세요... 계속 공부하면 곧 상황이 더 명확해질 것입니다 ... 😁👍

이제 코드 일부를 보겠습니다... 나는 그것을 고치는 방법을 정확히 보여주지 않을 것입니다 (내가 이렇게하면 재미 없을 것입니다... .... 😁👍✌ ) 다음 사실에주의를 기울이시기 바라며 이것은 중요합니다:

      Buf=Set_IndexBuffer5(Buf, dataHi, INDICATOR_DATA , DRAW_COLOR_LINE , 4 ,
"High" , clrYellow , clrWhite , clrDodgerBlue );
      Buf=Set_IndexBuffer5(Buf, dataHic, INDICATOR_COLOR_INDEX );
      Buf=Set_IndexBuffer5(Buf, dataLo, INDICATOR_DATA , DRAW_COLOR_LINE , 4 ,
"Low" , clrYellow , clrWhite , clrDodgerBlue );
      Buf=Set_IndexBuffer5(Buf, dataLoc, INDICATOR_COLOR_INDEX );

코드에 두 가지를 표시했습니다... 이제 그래프에서 재생 될 때 어떤 일이 발생하는지 살펴 보겠습니다....


레이블 중 하나만 코드에서 선언 한대로 HIGH .... 와 LOW ?!!! 그녀는 어디에 있습니까 ?!!! LOW 태그가 표시되지 않는다는 사실은 사용중인 색상 패턴이 #property indicator_color2에 선언 된 것임을 나타내므로이 시점에서 오류가 발생했습니다. 즉, 나머지 코드를 유지하더라도 실제로 LOW 라인을 생성하는 표시기 2의 속성을 제거하려고하면 HIGH 라인은 표시되지만 LOW 라인은 표시되지 않기 때문에이 점이 수정해야 할 첫 번째 요점입니다.... 왜요?!! 실제로는 PlotIndexSetInteger 호출을 사용하여 동적으로 LOW 라인을 그리는 데 필요한 정보를 정의하지 않기 때문입니다... 이상하게 보이지만 이것이 일어나고있는 일입니다. ....

이 문제를 해결하면 필요한 데이터가 동적으로 설정되므로 PlotIndexSetInteger를 사용하여 행 개체의 데이터를 선언하는 동적 방법을 정말로 사용하려는 경우 장면에서 #property indicator_color 컴파일 명령을 제거 할 수 있지만 그러한 노력을 기울이고 싶지 않다면 괜찮습니다.....

이제 위의 이미지를보고 #property indicator_color에서 사용중인 색상과 비교해 보겠습니다 ...이 색상을 매우주의 깊게보십시오 .... 이렇게하면 이상한 점을 발견하게 될 것입니다 .... 다시 재미를 잃지 말라고 말하지 않고 반복하지 않고 다른 색상을 사용해보십시오... 반복하면 실수가 어디에 있는지 이해하기가 더 어려워집니다 .... 😁👍

이제 마지막 세부 사항입니다: 그가 일부 포인트만 그리고 다른 포인트를 건너뛰고 있다고 생각하는 것은 두 가지 이유 때문일 수 있습니다: 색상 패턴이 그래프의 배경과 대조되지 않고 그래프의 배경과 대조되는 색상을 사용하려고 시도하고 두 번째는 실제로는 그렇지 않다고 생각하지만 OnCalcule 이벤트에 오류가있을 수 있으며 -1 또는 i 값을 반환하고 있으며 올바른 것은 rates_total을 반환하는 것이므로 코드에서이를 변경하여 향후 문제를 방지하십시오....

 

안녕하세요 다니엘,

혼란스러웠습니다. 드로잉 특성은 MQ4와 같은 버퍼 사양을 사용하여 정의되는 반면, 적어도 DRAW_COLOR... 사양의 경우 순차적 플롯 식별자를 사용하여 드로잉 특성이 정의되는 것으로 생각했습니다. DRAW_LINE 등에도 플롯 사양이 필요한지는 확인하지 못했습니다. 또한 indicator_colorX 속성에는 실제로 두 가지 기능이 있는데, 먼저 색상 수를 세고 설정한 다음 지정된 각 색상을 적절한 배열 위치에 설정하는 것입니다.더 많은 개선이 필요하지만 현재 올바르게 작동하는 색상 테스트와 약간 수정 된 MLADEN의 MACD Original2_1 두 파일을 첨부합니다. Mladen의 프로그램은 두 개의 플롯을 정의했지만 하나의 색상 인덱스 버퍼 만 사용하기 때문에 흥미 롭습니다.


도움을 주셔서 감사합니다.

파일: