이번 포스트에서는 MetaTrader 5에서 사용할 수 있는 EA(Expert Advisor)에 대해 알아보겠습니다. 이 EA는 MQL4에서 재작성된 것으로, 저자는 lsv입니다. 소스 링크는 여기에서 확인하실 수 있습니다.
EA의 작동 방식
이 EA는 틱(tick) 단위로 작동하며, 어떤 시간대에서도 사용할 수 있습니다. 현재 시장 가격의 패턴을 평균화하여 여러 가지 패턴을 생성합니다. 패턴의 수는 Nidelt 변수로 설정됩니다. 첫 번째 패턴에는 dstop 파라미터가 사용되고, 두 번째에는 dstop*2, 세 번째에는 dstop*N이 적용됩니다. 가격이 dstop*N 값으로 변동하면 새로운 패턴 포인트가 캡처됩니다. 가장 최근의 포인트는 삭제되어 패턴의 길이는 항상 Nidelt 포인트로 고정됩니다. 패턴의 설정 값이 클수록 더 깊은 역사 데이터를 캡처할 수 있습니다. 따라서, 시장은 다양한 역사 깊이를 동시에 추적하게 됩니다.
패턴이 변화하면 가상 포지션이 열리게 됩니다. 여기서의 목표는 특정 시장 상황과 포지션을 연결하는 것입니다. 가격 값의 시퀀스 코드를 이진 시퀀스로 변환하고, 만약 한 포인트의 값이 이전 값보다 크면 1, 그렇지 않으면 0으로 나타냅니다. 이 시퀀스에서 고유한 패턴 번호가 계산됩니다.
EA는 1에서 3개의 가상 포지션을 열 수 있으며, 각 포지션의 Stop Loss와 Take Profit 값은 동일합니다. Stop Loss/Take Profit 값은 dstop 파라미터에 의해 정의되며, 첫 번째 포지션에는 dstop*1, 두 번째에는 dstop*2가 사용됩니다. 가격이 Stop Loss/Take Profit 확률 값에 따라 상승하면 이 패턴의 가능성을 증가시키고, 하락하면 감소시킵니다. 각 패턴에 대해 가상 포지션이 열리며, 이 조합에 따라 매매 확률이 계산됩니다.
세 가지 파라미터(패턴, 번호, Stop Loss/Take Profit)의 조합으로 최소 10개의 가상 거래가 생성되면, 같은 시장 상황이 발생할 경우 포지션 오픈을 고려할 수 있습니다. 이는 통계 기반으로 Stop Loss/Take Profit 값에 따라 방향을 결정합니다.
통계 수집은 시간이 많이 걸립니다. 저자에 따르면 "몇 주가 걸릴 수 있습니다." 통계 수집 과정을 가속화하려면 테스터를 사용하는 것이 좋습니다. 그러나 테스터의 틱 가격 변화는 실제 시장과 크게 다를 수 있습니다. 저자는 이렇게 권장합니다: EA를 테스터에서 학습시키고, 이후 거의 일주일 동안 데모 계좌에서 실행해 보세요. EA가 긍정적인 결과를 보이면 실제 계좌에서도 사용할 수 있습니다.
EA 준비하기
EA의 첫 단계는 파라미터 최적화입니다: Nidelt, Nstop, dstop, forg, Probab, NN, delta. 이 단계에서는 ReadHistory와 SaveHistory 파라미터를 끄고 최적화를 수행합니다. 적절한 파라미터 조합을 찾은 후, SaveHistory=true로 한 번 테스트를 수행해야 합니다. 그 후 ReadHistory=true 설정으로 EA를 실행하면, EA는 테스터에서 충분한 통계를 수집한 상태로 즉시 작업을 시작할 수 있습니다. EA가 오버러닝이 완료된 후 재시작 시 데이터가 자동으로 저장되도록 SaveHistory를 켜는 것이 좋습니다.
테스터에서 SaveHistory를 사용하면 학습 데이터가 파일에 저장됩니다. 파일 이름은 FD_[Symbol] 형식입니다. 예를 들어, EURUSD에 대한 테스트는 FD_EURUSD라는 이름으로 저장됩니다. 이 파일들은 모든 터미널의 공통 데이터 폴더인 Files 폴더에 저장됩니다. MetaEditor의 메뉴를 통해 일반 데이터 폴더를 찾아볼 수 있습니다.
EA는 학습 결과를 저장할 뿐 아니라 거래 과정에서 필요한 두 개의 파일을 저장합니다. 파일 이름은 FDlast_buy[Symbol][TimeFrame]와 FDlast_sell[Symbol][TimeFrame]입니다. 이 파일들은 신경 쓰지 않으셔도 됩니다.
EA는 시간대에 따라 학습 데이터 저장 주기와 가상 거래 간의 최소 시간을 결정합니다. 이는 두 개의 바 밀도와 같으며, 서로 다른 시간대에서 EA의 결과에 차이가 있을 수 있습니다.
아래 이미지는 기본 설정으로 EURUSD M15에서 EA의 학습 결과를 보여줍니다.
EA 파라미터
- ReadHistory - 저장된 학습 기록을 읽습니다.
- SaveHistory - 학습 기록을 저장합니다. 테스트 중에는 마지막까지 저장되며, 계좌 작업 중에는 정기적으로 오버러닝 방식으로 저장됩니다.
- Lots - 포지션 볼륨입니다.
- Nidelt - 패턴 수는 30을 초과할 수 없습니다.
- Nstop - 가상 포지션 파라미터 수 (Stop Loss와 Take Profit의 값이 동일한 경우), 1, 2 또는 3입니다.
- dstop - 가상 포지션 파라미터 변경의 단계입니다.
- forg - 학습 결과를 잊는 비율, 값은 1보다 약간 커야 합니다.
- Probab - 학습 결과에 의해 정의된 포지션 오픈 확률 수준입니다.
- NN - 패턴 크기는 12를 초과할 수 없습니다.
- delta - 패턴 파라미터 변경 단계입니다.
- ReplaceStops - 새로운 신호에 대해 Stop Loss/Take Profit을 수정합니다. Stop Loss/Take Profit 변환은 포지션 방향에 따라 운영됩니다.
- Trailing - 트레일링 스탑 레벨; 값이 0일 경우 트레일링 스탑이 비활성화됩니다.