시스템트레이딩 게시글

실시간 최적화 결과 시각화 - MetaTrader 5를 위한 EA 활용법

첨부파일
914.zip (13.48 KB, 다운로드 0회)

MetaTrader 5의 전략 테스터를 사용하면 거래 시스템의 통계적 매개변수를 각 테스트 진행 후에 확인할 수 있습니다.

통계적 매개변수는 TesterStatistics() 함수를 통해 얻을 수 있으며, 이 함수는 OnTester()OnDeinit() 함수 내에서 호출됩니다.

최적화 결과를 처리하는 함수들(FrameFirst(), FrameFilter(), FrameNext(), FrameInputs(), FrameAdd())이 도입되면서, 트레이더들은 이제 시각적 최적화를 수행할 수 있게 되었습니다. 필요한 데이터는 EA 최적화나 수학적 문제 해결 중에 바로 처리되고 표시될 수 있습니다.

우리는 "MetaTrader 5 테스터에서 전략 시각화하기" 라는 글에서 설명된 예제를 통해 EA 테스트 결과의 시각화에 대한 세부 사항을 살펴보겠습니다.


1. 최적화 과정에서의 잔고 동향 시각화

1.1. 파일 다운로드

Moving Averages_With_Frames.mq5 EA 파일을 terminal_data_folder\MQL5\Experts에 복사해야 합니다.

EA 작동에 필요한 파일은 다음과 같습니다:

  1. FrameGenerator.mqh - 최적화 결과 표시를 위한 CFrameGenerator 클래스;
  2. SpecialChart.mqh - 여러 잔고 차트를 그리기 위한 CSpecialChart 클래스;
  3. SimpleTable.mqh - 두 개의 열을 가진 간단한 테이블을 위한 CSimpleTable 클래스;
  4. ColorProgressBar.mqh - 두 가지 색상을 사용하는 진행률 표시줄을 위한 CColorProgressBar 클래스.

이 파일들은 terminal_data_folder\MQL5\Include에 복사해야 합니다.

코드 베이스 프로그램은 MetaTrader 5 터미널을 통해 자동으로 다운로드할 수 있습니다(툴박스 창의 CodeBase 탭에서). "다운로드"를 선택하면 모든 코드가 다운로드되어 해당 폴더에 배치됩니다.

Fig. 1. MetaTrader 5 터미널을 통해 CodeBase 프로그램 다운로드

Fig. 1. MetaTrader 5 터미널을 통해 CodeBase 프로그램 다운로드


1.2. EA 테스트하기

Moving Averages_With_Frames.mq5 EA 파일을 전략 테스터에서 실행해야 합니다.

테스트 설정:

Moving Averages_With_Frames.mq5 테스트 설정

Fig. 2. Moving Averages_With_Frames.mq5 테스트 설정

최적화 옵션:

Moving Averages_With_Frames.mq5 최적화 매개변수

Fig. 3. Moving Averages_With_Frames.mq5 최적화 매개변수


최적화 중에 EA는 잔고 동향과 최적화 진행 통계 데이터를 표시합니다:

Fig. 4. Moving Averages_With_Frames.mq5 최적화

Fig. 4. Moving Averages_With_Frames.mq5 최적화

최적화 과정:




1.3. EA 작동 원리

Moving Averages_With_Frames.mq5 EA는 표준 MetaTrader 5 터미널 패키지에 포함된 Moving Averages.mq5를 기반으로 생성되었습니다 (MQL5\Experts\Examples\Moving Average).

결과 시각화를 위한 다음 코드가 추가되었습니다:

//--- 최적화 결과 처리 관련 코드 연결
#include <FrameGenerator.mqh>
//--- 프레임 생성기
CFrameGenerator fg;
//+------------------------------------------------------------------+
//| 테스터 함수                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//--- 여기에 최적화 기준 계산 함수를 삽입하세요
   double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT));
   TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia);
//--- 각 테스트 후 호출하여 최적화 기준을 매개변수로 제출합니다
   fg.OnTester(TesterCritetia);
//---
   return(TesterCritetia);
  }
//+------------------------------------------------------------------+
//| TesterInit 함수                                                  |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- 여러 잔고 라인을 표시하기 위한 차트 준비
   fg.OnTesterInit(3); // 매개변수는 차트에 표시할 잔고 라인 수를 설정합니다
  }
//+------------------------------------------------------------------+
//| TesterPass 함수                                              |
//+------------------------------------------------------------------+
void OnTesterPass()
  {
//--- 획득한 테스트 결과를 처리하고 그래픽을 표시합니다
   fg.OnTesterPass();
  }
//+------------------------------------------------------------------+
//| TesterDeinit 함수                                            |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- 최적화 종료
   fg.OnTesterDeinit();
  }
//+------------------------------------------------------------------+
//|  차트 이벤트 처리                                           |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- 최적화 종료 후 헤더를 클릭하면 프레임 표시 시작
   fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100은 샷 간의 ms 대기 시간입니다
  }
//+------------------------------------------------------------------+

이 코드는 다른 EA에서도 유사하게 사용할 수 있습니다.

CFrameGenerator 클래스는 최적화 결과 작업을 위해 사용됩니다. 이 클래스는 전략 테스터 이벤트(OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit())와 차트 이벤트(OnChartEvent())를 처리하는 메서드를 포함하고 있습니다. 사용되는 그래픽 객체는 CFrameGenerator 클래스의 OnTesterInit() 메서드에서 준비됩니다.

CFrameGenerator 클래스의 OnTester() 메서드는 각 테스트 진행 후 테스트 에이전트에서 호출됩니다. 이 메서드는 거래 결과를 기반으로 잔고 곡선 동향을 계산합니다. 잔고 곡선 차트는 수행된 거래 수에 따라 길이가 결정되는 일차원 배열입니다.

그 후, TesterStatistics() 함수를 사용하여 통계 데이터를 요청하고(순이익, 수익률, 회복 비율, 거래 수, 거래 건수, 최대 자본 감소 비율, 사용자 정의 최적화 기준 값 등) 프레임(테스트 진행 데이터 배열)이 생성되어 FrameAdd() 함수를 사용하여 터미널로 전송됩니다.

프레임은 CFrameGenerator 클래스의 OnTesterPass() 메서드에서 수신 및 처리됩니다. 프레임 읽기 작업은 FrameNext() 함수를 통해 수행됩니다. 프레임이 생성된 EA의 입력 매개변수를 요청하는 작업은 FrameInputs() 함수를 사용하여 수행됩니다.

데이터를 획득한 후, CSimpleTable, CColorProgressBar 및 CSpecialChart 클래스의 메서드를 사용하여 표시되고 업데이트됩니다.

OnTester() 처리 함수의 실행은 테스트 에이전트에서 다른 현재 최적화 진행이 완료된 후 수행됩니다. 이는 MQL5 클라우드 네트워크의 분산 네트워크 용량을 활용하여 복잡한 수학적 계산을 수행할 수 있게 합니다. 이를 위해 계산 부분을 OnTester 이벤트 핸들러에 배치하십시오.

최적화를 사용하여 수학적 계산을 가속화하는 예제(웨이어스트라스 함수의 연속 웨이브렛 변환)는 "실시간 최적화 프로세스 관리 및 에이전트에서 MetaTrader 5로 대량 데이터 전송" 주제에서 확인할 수 있습니다.


2. CSimpleTable, CColorProgressBar 및 CSpecialChart 클래스와 작업하기 위한 예제

첨부된 Test_SimpleTable.mq5 및 Test_CSpecialChart.mq5 스크립트에는 CSimpleTable, CColorProgressBar 및 CSpecialChart 클래스와 작업하기 위한 예제가 포함되어 있습니다. 이 파일들을 terminal_data_folder\MQL5\Scripts에 복사해야 합니다.

Fig. 5. Test_SimpleTable.mq5 스크립트 작업 결과

Fig. 5. Test_SimpleTable.mq5 스크립트 작업 결과

Fig. 6. Test_CSpecialChart.mq5 스크립트 작업 결과

Fig. 6. Test_CSpecialChart.mq5 스크립트 작업 결과


연관 포스트

댓글 (0)