
MetaTrader 5 터미널의 Strategy Tester 내 틱 생성 알고리즘
Expert Advisors 만들기 - MQL5의 자동화된 거래 시스템
MetaTrader 5 터미널에는 사람의 개입 없이 거래를 수행할 수 있는 완전 자동화된 전략(거래 로봇) 개발을 위한 통합 개발 환경이 포함되어 있습니다. 이러한 거래 로봇의 또 다른 이름은 Expert Advisors입니다. MetaTrader 5 터미널에 대한 Expert Advisors 및 기술 지표는 최신 프로그래밍 언어의 모든 장점을 포함하는 MQL5 언어를 사용하여 작성되었습니다.
- 실행 속도;
- 객체 지향 프로그래밍(OOP) 지원;
- 디버깅 능력.
MQL5에서 프로그램을 디버깅하는 기능을 사용하면 가능한 최대 보안 수준으로 코드를 생성할 수 있지만, 이것이 필요하긴 하지만 수익성 있는 거래 시스템 개발에 필요한 유일한 조건은 아닙니다. 오랜 기간 동안의 과거 데이터에서 긍정적인 결과를 보여줄 수 있는 거래 시스템을 로버스트(robust)라고 합니다.
거래 전략 테스트
귀하의 자본을 Expert Advisor에게 맡기기 전에 자금 관리 규칙뿐만 아니라 포지션 개설 및 마감에 대한 규칙이 이익 기대치를 허용하는지 확인해야 합니다. 이를 테스트하는 가장 간단한 방법은 사용 가능한 기록 데이터를 사용하여 Advisor의 작업을 시뮬레이션하는 것입니다.
MetaTrader 5 클라이언트 터미널에는 기록 데이터에 대한 Advisor의 작업 결과를 얻기 위한 전략 테스터인 특수 통합 구성 요소가 있습니다. 날짜 간격으로 Expert Advisor를 한 번 실행하는 프로세스를 Expert Advisor 테스트라고 합니다. 이 일회성 테스트는 Expert Advisor의 견고성에 대한 결론을 도출하는 데 필요한 많은 양의 유용한 정보를 제공합니다.
그러나 이러한 결과를 신뢰할 수 있으려면 테스트 프로세스가 Expert Advisor가 실행되는 실제 현재 환경을 최대한 가깝게 모델링해야 합니다. MetaTrader 5 테스터는 거래 작업이 발생하는 각 상품에 대한 스프레드의 과거 값을 사용하여 가격의 틱 모델링에 의한 틱을 사용합니다.
전략 테스터에 대한 약간의 역사
MetaTrader 3
- 4가지 가격 모델 - 가격은 강세 캔들스틱의 경우 시가, 저가, 고가 및 종가 단계를 연속적으로 거치고 약세 캔들스틱의 경우 시가, 고가, 저가 및 종가를 거쳤습니다.
- "1점마다" 모델 - 가격이 연속적으로 3파동, 5파동, 다른 3파동을 거쳐 1포인트씩 증가하는 웨이브 모델 3-5-3을 사용합니다.
- 모델 "Spread / 2" - "1점마다"와 동일한 모델을 사용하지만 가격 증분은 사용자가 표시하는 스프레드의 절반입니다.
가격 모델링은 항상 테스트된 기간의 바를 기반으로 했으며 더 낮은 기간의 정보는 사용되지 않았습니다. MetaTrader 3 단말의 테스터는 느린 테스팅 속도, 낮은 정확도, 입력 매개변수에 의한 Expert Advisor 최적화 부족 등 많은 단점이 있었습니다.
MetaTrader 4
MetaTrader 4 터미널은 세 번째 터미널을 대체하고 새로운 컴파일 언어 MQL4 (이전 MQL-II가 해석됨)를 포함했을 뿐만 아니라 테스트에 대한 완전히 새로운 접근 방식을 취했습니다. 이제 테스트는 세 가지 모드로 수행할 수 있습니다.
- 모든 틱(Every Tick) - 캔들 내의 틱 생성을 통해 테스트 환경 내에서 Expert Advisor의 작업을 실제 거래에 최대한 가깝게 모델링할 수 있습니다.
- 체크포인트(제어 포인트) - 정확성과 테스트 속도 간의 절충안;
- 공개 가격(공개 가격) - Expert Advisor의 출시는 캔들스틱이 시작될 때만 이루어지므로 전략을 매우 빠르게 평가할 수 있습니다.
세 번째 단말의 테스터와 중요한 차이점은 MetaTrader 4 단말의 테스팅 전략이 거래 시뮬레이션을 위해 사용 가능한 가장 어린 시간대의 가격 데이터를 사용했다는 것입니다. 따라서 분 이력이 있으면 테스트 간격 전체에 걸쳐 테스트 결과가 온라인에서 얻은 결과에 최대한 가깝습니다. 기본 시간 프레임이 없는 경우 MetaTrader 3의 테스터 터미널에서와 동일한 방식으로 바 내 가격 전개 시뮬레이션이 생성됩니다.
또한 유전 알고리즘을 사용함과 동시에 입력 매개변수를 직접 열거하여 최적화를 수행할 수 있는 기회를 얻었습니다. 이는 특히 입력 매개변수가 많은 전략의 경우 최적화 프로세스를 크게 가속화할 수 있는 기회를 제공했습니다. 이제 시각 영역에서 실제 테스트를 수행할 수 있습니다. 이것은 거래자들이 높이 평가한 거대한 단계였습니다.
5세대의 새로운 MetaTrader 터미널은 이전 터미널의 설계에서 얻은 경험을 기반으로 하며 이는 전략 테스터에 적용됩니다. 이제 다중 통화 전략, 즉 여러 상품에서 동시에 거래되는 전략을 테스트할 기회가 있습니다.
이제 사용 가능한 모든 프로세서 코어뿐만 아니라 LAN 및 글로벌 인터넷 네트워크의 다른 컴퓨터에 있는 원격 에이전트에서도 전략 최적화를 수행할 수 있습니다. 이를 통해 테스터의 기능을 강화하고 이전에는 액세스할 수 없었던 클라우드 계산을 MQL5 언어로 직접 수행할 수 있습니다.
그러나 MetaTrader 5 터미널의 테스트 프로세스에 대한 기본적인 이해를 위해서는 전략 테스터에서 가격 모델링이 어떻게 발생하는지 이해할 수 있어야 합니다.
틱 생성 알고리즘
MetaTrader 5 터미널의 Strategy Tester는 테스트에서 단 하나의 가격 모델링 모드를 사용합니다. 즉, 사용된 기호의 분 시간 프레임에 대한 기존 기록 데이터를 기반으로 하는 틱 생성입니다. MetaTrader 4의 나머지 시뮬레이션 모드는 고속에도 불구하고 높은 테스트 정확도를 제공하지 못하여 제거되었습니다.
테스터에서 M1 시간 프레임을 사용하면 시니어 시간 프레임을 기반으로 하는 틱 시뮬레이션과 달리 최소한의 오류로 가격 움직임을 매우 정확하게 시뮬레이션할 수 있습니다. 결과적으로 MetaTrader 5 전략 테스터에서 가격 모델링의 오류는 사소하고 시뮬레이션 가격과 실제 발생한 가격의 차이는 분 바 범위 내에서만 가능합니다.
이 접근 방식에서 로컬 및 원격 에이전트에 대한 최적화를 수행하는 기능은 테스트 시간 증가를 보상할 수 있습니다. 틱 생성은 정수 형식의 캐시된 분 항목을 기반으로 합니다. 따라서 틱의 생성은 매우 빠르게 이루어집니다.
필요한 모든 시간 프레임의 바는 생성된 틱 수신과 함께 일반적인 방식(클라이언트 터미널에서와 같이)으로 테스터의 이력 데이터베이스에 형성됩니다. 분 바 틱 볼륨 1은 생성되지 않습니다. 즉, 닫기 (Close) 값으로 쓸 수 있습니다.
2개의 틱이 있는 바도 생성되지 않습니다. 먼저 틱 값이 열기로 기록된 다음 값이 닫기 인 틱이 기록됩니다.
3개의 틱이 있는 바는 계획에 따라 생성되며 3개의 틱 바의 경우 바 개발 패턴이 4개뿐입니다.
- 한 방향으로 갔다가 열림 (Open) 수준으로 돌아갔습니다.
- 한쪽으로 갔다가 후퇴하여 열림 (Open) 수준에 도달했습니다.
- 한 방향으로 갔다가 후퇴했지만 열림 (Open) 수준에 도달하지 못했습니다.
- 한 방향으로 여러 점
지지점
바에 3개 이상의 틱이 있으면 먼저 지지점이 생성됩니다. 지지점의 수는 틱의 부피보다 클 수 없습니다. 시작가는 시작점이기 때문에 지지점 수 계산에 포함되지 않습니다. 최대 지원 포인트 수 - 11.
지지점은 시작 그림자, 캔들스틱의 크기 및 닫는 캔들스틱 그림자 사이에 분포됩니다.
틱 수에 따른 지지점 분포는 다음과 같습니다(그림자 열기 - 캔들스틱 범위 - 그림자 닫기).
3 - 5 - 3캔들스틱에 그림자 중 하나가 없으면 이 그림자의 지지점이 캔들스틱의 크기로 지정됩니다.
2 - 6 - 2
2 - 5 - 2
2 - 4 - 2
2 - 3 - 2
1 - 4 - 1
1 - 3 - 1
1 - 2 - 1
1 - 1 - 1
캔들스틱의 범위는 홀수개의 지지점에 의해 생성됩니다. 스코프에 짝수개의 지지점이 있는 경우 그림자에 이미 2개의 점이 있는 조건에서 그림자 중 하나에 "추가" 점이 제공됩니다. 그렇지 않으면 "추가" 지점이 단순히 사라집니다.
곰(검은색) 캔들스틱의 경우 3-5-3 패턴의 지지점 생성은 유사합니다.
캔들스틱이 doji인 경우, 즉 Close == Open이면 이전 캔들스틱이 분석되고 이전 캔들스틱이 상승 중이었다면 이 doji는 캔들스틱 하향 캔들스틱으로 간주됩니다.
3개의 지지점과 정수값 3/4를 사용하여 그림자를 생성하면 그림자의 크기와 그림자의 크기가 1/2로 동일합니다(이는 열림 과 의 차이가 있을 때 발생합니다. 낮음 또는 열림 및 높음 이 2포인트보다 크지 않은 경우 그림자 생성은 다음과 같이 변경됩니다.
두 개의 지지점에 의해 그림자가 생성되는 경우 제어점은 다음과 같이 정렬됩니다.
Low에서 High로 지지점 기반 형성
캔들스틱의 범위는 Impulse 파동에 의해 생성되며 파동 수는 다음과 같이 계산됩니다.
number of waves = (number of support points in the scope + 1) / 2.
예를 들어, 캔들스틱 범위의 지지점 수가 5이면(그림 3-5-3) 3개의 파동이 생성됩니다 = (5 +1) / 2.
각 Impulse 파동은 다음 공식으로 계산되는 포인트 단위의 길이 단계 를 갖습니다.
step=(High-Low-1)/(quantity of waves)+1
예를 들어, 캔들스틱의 범위(높음 - 낮음) = (1.3113 - 1.3100) = 0.0013은 13포인트이고 파장 단계 = (13-1) / 3 +1 = 5포인트입니다.
Impulse 단계 후에 포인트는 1포인트만큼 롤백되어야 합니다. 추가로 사이클에서 지지점의 위치가 계산됩니다(강세 촛불의 경우).
prev=low
cycle
n1=prev+step
n2=prev+step-1
prev=n2
어디:
- n1 - 지원의 첫 번째 Impulse 지점
- n2 - 두 번째 지원 지점 - 롤백 지점.
이 알고리즘을 3-5-3 방식의 황소 촛불에 적용해 보겠습니다. 여기서 파도의 수는 3이고 단계는 5포인트, 포인트는 0.0001입니다.
- 첫 번째 단계. 변수 이전 = 낮음 = 1.3100, 주기를 입력합니다.
- 첫 번째 웨이브에 대한 데이터 계산
- 점 n1 = prev + step = 1.3100 + 5 * 0.0001 = 1.3105의 위치를 계산합니다.
- 점 n2 = prev + step-1 = 1.3100 + 5 * 0.0001-1 * 0.0001 = 1.3104의 위치를 계산합니다.
- 값 n2: prev = 1.3104를 prev 변수에 할당합니다.
- 두 번째 웨이브에 대한 데이터 계산
- 점 n1 = prev + step = 1.3104 + 5 * 0.0001 = 1.3109의 위치를 계산합니다.
- 포인트 n2 = prev + step-1 + 5 = 1.3104 * 0.0001-1 * 0.0001 = 1.3108의 위치를 계산합니다.
- n2: prev=1.3108 값을 prev 변수에 할당합니다.
- 세 번째 물결에 대한 데이터 계산
- 포인트 n1 = prev + step = 1.3108 + 5 * 0.0001 = 1.3113의 위치를 계산합니다.
- 주기 종료, 이전 = n2 = 1.3112
위의 모든 것은 그림에서 명확성을 위해 시연됩니다.
곰 캔들스틱에 대한 지지점 계산은 같은 방식으로 수행됩니다.
prev=high
cycle
n1=prev-step
n2=prev-step+1
prev=n2
틱 생성은 지지점을 기준으로 수행됩니다.
지지점 사이의 중간 틱은 다음 규칙에 따라 생성됩니다.- 틱 수가 지지점 사이의 점 수보다 크면 "톱"이 생성됩니다.
- 지지점 사이에 점이 여러 개 있으면 선형 틱 시퀀스가 생성됩니다.
틱 시퀀스 확인
결론적으로 2010년 5월 13일 13시부터 13시 30분까지 MetaQuotes-Demo 서버에서 기록된 틱 이력과 테스터가 MetaTrader 5 클라이언트 단말에서 생성한 틱 시퀀스를 비교해봅시다. Expert Advisor는 에이전트 로그에 틱을 기록하는 데 사용되었습니다.
//+------------------------------------------------------------------+ //| Write_Ticks.mq5 | //| Copyright Copyright 2010, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ input datetime start=D'2010.05.13 13:00:00'; input datetime end=D'2010.05.13 14:00:00'; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { MqlTick tick; datetime time=TimeCurrent(); //--- SymbolInfoTick(Symbol(),tick); Print(time,tick.bid); //--- if(time>end) ExpertRemove(); //--- }
틱의 이력은 틱 지표 만들기 문서에 설명된 지표를 사용하여 온라인으로 수집되었습니다.
두 틱 시퀀스(테스터의 틱 시퀀스와 파일에 저장된 틱 시퀀스)가 차트에 표시됩니다. 테스트 중 획득한 틱은 녹색으로 표시되며, 거래 서버 MetaQuotes-Demo에서 획득하여 파일 지표에 기록된 틱은 파란색으로 표시됩니다.
그래프의 아무 지점이나 가리키고 팝업 창에서 각 틱에 대한 정보를 읽을 수 있습니다.
- 출처(테스터 또는 기록);
- 틱 시간;
- 틱의 가격.
그래프는 테스터 MetaTrader 5 클라이언트 터미널의 시뮬레이션 틱 품질이 과거 데이터에 대한 Expert Advisors의 적절한 테스트를 허용한다는 것을 분명히 보여줍니다.
MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/75



