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 작동에 필요한 파일은 다음과 같습니다:
- FrameGenerator.mqh - 최적화 결과 표시를 위한 CFrameGenerator 클래스;
- SpecialChart.mqh - 여러 잔고 차트를 그리기 위한 CSpecialChart 클래스;
- SimpleTable.mqh - 두 개의 열을 가진 간단한 테이블을 위한 CSimpleTable 클래스;
- ColorProgressBar.mqh - 두 가지 색상을 사용하는 진행률 표시줄을 위한 CColorProgressBar 클래스.
이 파일들은 terminal_data_folder\MQL5\Include에 복사해야 합니다.
코드 베이스 프로그램은 MetaTrader 5 터미널을 통해 자동으로 다운로드할 수 있습니다(툴박스 창의 CodeBase 탭에서). "다운로드"를 선택하면 모든 코드가 다운로드되어 해당 폴더에 배치됩니다.

Fig. 1. MetaTrader 5 터미널을 통해 CodeBase 프로그램 다운로드
1.2. EA 테스트하기
Moving Averages_With_Frames.mq5 EA 파일을 전략 테스터에서 실행해야 합니다.
테스트 설정:

Fig. 2. Moving Averages_With_Frames.mq5 테스트 설정
최적화 옵션:

Fig. 3. Moving Averages_With_Frames.mq5 최적화 매개변수
최적화 중에 EA는 잔고 동향과 최적화 진행 통계 데이터를 표시합니다:

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. 6. Test_CSpecialChart.mq5 스크립트 작업 결과