![Expert Advisor 매개변수 선택을 위한 테스트(최적화) 기술 및 일부 기준](https://c.mql5.com/i/articles/overlay.png)
Expert Advisor 매개변수 선택을 위한 테스트(최적화) 기술 및 일부 기준
소개
적절한 매개변수의 선택이 거래 전략의 선택과 Expert Advisor의 생성만큼 중요하다는 것은 분명히 잘 알려져 있는 사실입니다. 이에 대한 증거는 자동화된 거래와 관련된 여러 포럼에서 주제에 대한 지속적인 토론에서 찾을 수 있습니다. 그리고 거래 작업의 자동화가 매우 명확하고 투명한 것처럼 보이지만 논리적으로 완전한 체인에서 컴파일된 최적화 결과를 처리하는 데 사용할 수 있는 자동화된 알고리즘을 본 적이 없습니다.
그리고 우리는 프로세스가 매우 어렵고 시간이 많이 걸리므로 최소한 모든 거래를 최대로 자동화하고 하나의 단일 알고리즘으로 줄이는 노력을 기울일 가치가 있음을 인정해야 합니다. 이 접근 방식과 방법은 이 글의 아래에 설명되어 있습니다.
개념
작업. 최적화 중에 수신된 Expert Advisor 매개변수에 대한 분석 및 심사, 실제 거래에서 비효과적이라는 건 다 알고 있는 사실. 터미널 성능을 최대한 활용하고 수동 작업을 자동화합니다.
전체 프로세스는 여러 단계로 구성됩니다. 이러한 분할은 최적화 단계에서 초기에 시스템 매개변수에 필요한 요구사항(공차 및 필터)을 정의할 수 없는 것과 같이 연속 자동 알고리즘 구현의 복잡성과 관련이 없습니다. 그리고 일반적으로 말하자면 그럴 필요가 없습니다.
제 생각에는 기계가 전략적 결정을 내리도록 하는 것이 "최고의 아이디어"가 아닙니다. 그리고 매개변수(매개변수 그룹)의 선택은 전략입니다. 계산, 거래, 우리의 삶을 더 쉽게 만드는 것 - 이것들은 기능이지만 하드웨어가 따라야 하는 작동 규칙을 결정하는 것은 거래자입니다.
모든 단계와 단계 사이의 전환은 가능한 한 최대로 자동화되었습니다.
1단계. O최적화. 선택적 사용자 설정이 있는 표준 변형입니다.
다시 말하지만 이것은 비밀이 아니지만 빠뜨릴 순 없습니다.
유전학은 어디까지나 유용한 것이지만 합리적인 범위 내에서만입니다. 진실은 그 알고리즘이 당신과 함께 낮은 트릭을 할 수 있다는 것입니다. 수익성이 있다고 생각하는 매개변수 세트가 발견되면 전체 최적화 프로세스는 거기서부터 끝까지 "주변에서" 실행될 것입니다. 전 당신이 그것이 무엇을 초래할 수 있는지 이해한다고 믿습니다. 그렇지 않으면 최적화 영역을 넘어서 작동할 수 있는 대부분의 좋은 변형이 제외되고 "최적화 결과" 표에 등록되지 않습니다.
상황에서 벗어날 수있는 몇 가지 방법이 있습니다. 과감한 것은 최적화를 위해 유전 알고리즘을 사용하지 않는 것입니다. 그러나 어떤 이유로든 이것이 항상 적합한 것은 아닙니다. 다음 두 가지는 반값이지만 없는 것보다 낫습니다.
- 최적화를 한 번이 아니라 두 번 이상 실행합니다. 처음에는 "Balance"로, 다음에는 "Maximal Drawdown" 또는 다른 매개변수로. Expert Advisor 속성의 "테스트" 탭에 있는 "최적화된 매개변수" 창은 이러한 선택을 제공합니다. 이후 받은 결과표를 조합하여 조합표로 작업합니다.
- 매개변수 조합의 수를 최대한 줄이기 위해.
최적화를 구현할 때 고려해야 할 또 다른 뉘앙스가 있습니다. 누군가는 유용하다고 생각할 수 있습니다.
Expert Advisor 속성의 "최적화" 탭에서 다양한 제한을 설정할 수 있으며 그 중 하나인 "최대 손실률"에 대해 몇 마디 말하고 싶습니다. 이 매개변수를 사용할 때 이는 현재 잔액 감소(%)임을 명심하십시오. 여기서 고려해야 할 사항. 예를 들어 10% 한도를 설정하고 초기 잔액을 10000으로 설정한 다음 최적화 프로세스를 통해 잔액이 최소 15000에 도달하면 초기 1000은 1500이 됩니다. 이는 분명히 다른 수치입니다. 그리고 최초 예치금(이러한 인출이 거래 초기에 발생하지 않을 것이라고 누가 보장할 수 있습니까?)은 이에 대해 다르게 반응할 것입니다. 1000000의 초기 보증금과 0.1% 한도를 설정하면 이 천은 약 а천으로 남습니다.
2단계. "최적화 결과" 작업. 모든 결과는 Excel로 복사되어 거기서 처리됩니다. 많은 세트가 있을 것이며 줄여야 합니다. 보고서의 모든 열에서 "잘라내기"를 수행할 수 있습니다. 이는 거래자에게 달려 있습니다.
3단계. 테스트. 테스트를 위해 이력의 일부를 선택하고 이전 단계 심사를 "통과"한 세트에 대해 자동 그룹 테스트를 실행합니다. 저는 그룹 테스트를 지적합니다. 이 단계에서는 모든 단일 테스트를 별도로 고려할 필요가 없으며 나머지 모든 세트의 테스트 결과를 한 번에 얻는 것이 요점입니다. 터미널은 실제로 동일한 최적화를 구현하지만 미리 생성된 파일의 매개변수를 사용합니다.
2단계와 유사하게 수신된 모든 결과는 최적화 결과가 포함된 동일한 Excel 테이블에 복사됩니다.
4단계. 분석 및 심사.
분명히 부정적인 테스트는 무자비하게 버려집니다(줄 삭제). 문제는 나머지를 평가하는 방법입니다.
많은 분들이 대차 대조표의 시각적 인식이 보고서의 수치보다 시스템 특성에 대해 동등하고 때로는 훨씬 더 나은 아이디어를 제공한다는 것을 알아차렸을 것입니다. 일반적으로 곡선이 "좋음"으로 보이면 보고서의 수치도 "정상"이지만 지속적인 성장 추세가 없으면 이 곡선이 "좋음"이라고 충분히 확신할 수 있는 수치는 없습니다.
문제는 남아있는 변종이 꽤 많고 보고서를 분석하고 각각의 차트를 보기 위해 개별적으로 테스트하기가 매우 어렵다는 것입니다... 완고함이 점점 세진다면...
이러한 문제를 방지하고 세트 수를 더욱 줄이기 위해 비교 영역에 적용할 수 있는 "비율" 기준을 만들었습니다. 최적화 및 테스트 영역에서 각각 일당 이익, 일당 거래 수 및 최대 손실의 세 가지 값을 비교합니다. 대략적으로 허용 가능한 한도 내에서 서로 일치하면 세트가 계속 작동하고 그렇지 않은 경우 추가 분석에서 제외됩니다. 게다가 특정 조건에서 보다 구체적으로 - 테스트 영역이 그리 길지 않은 경우 위의 세 값은 어느 정도 "부드러운" 균형 곡선에 대한 아이디어를 생성할 수 있습니다.
3단계와 4단계는 역사의 다른 부분에서 여러 번 반복될 수 있고 반복되어야 합니다. 첫째, 선택한 결과의 신뢰성을 확인하고 둘째로 결과의 수를 최대한 줄이는 것입니다. 나머지 3-5개의 변형은 정보에 입각한 최종 선택에 충분할 것입니다.
3단계와 4단계의 완료에는 나머지 세트에서 세트 파일 생성, 기록의 모든 부분에서 개별 테스트 구현, 이들 간의 비교, 선택 등이 포함됩니다.
기본적으로 이것은 모든 거래자의 자격, 취향 및 선호도의 문제이며 이 글의 범위를 벗어납니다.
기술
여기에는 어렵지 않고 마음을 구부리는 것이 없습니다. 필요한 것은 주의와 정확성뿐입니다. 시작하자.
1. 컴퓨터 구성 - 제어판/국가 및 언어 옵션/국가 옵션/러시아어 - 사용자 정의/숫자/소수 기호 - "쉼표" 대신 "점"을 선택해야 합니다. 이는 정확한 데이터 반영을 위해 수행됩니다. 터미널에서 Excel 테이블로 (테스트) 최적화 결과를 복사합니다.
- 컴퓨터에 Microsoft Office(Excel 필요) 버전 2000 이상을 설치해야 합니다.
- Excel 보안 설정에서 매크로를 활성화하고 Analise.bas 모듈(문서에 첨부)을 가져와야 합니다. 모듈과 그 구조에 대한 리뷰는 일반 사용자가 그 안에 있는 어떤 것도 변경하거나 편집할 필요가 없고 원하는 경우 "비정규" 사용자가 스스로 알아낼 수 있기 때문에 이 글에서 제공되지 않습니다.
2. Expert Advisor 준비
준비된 Expert Advisor의 예시는 첨부파일에 있습니다.
코드의 맨 처음에 다음을 외부 매개변수 앞에 삽입해야 합니다.
// Test and optimization parameters extern int VarOptimTest = 0; // 0 - standard optimization (normal operation of the Expert Advisor) // 1 - test run of the selected sets // 2 - generation of set-files extern int Counter = 1; // counter extern string nameEA = "MA"; // Expert Advisor name-->
이 변수는 최적화 및 테스트 모드를 제어합니다.
init() 함수는 다음과 같아야 합니다.
int init() { // BLOCK OF THE OPTImizaTION AND TESTING FUNCTION CALL if(IsOptimization() && VarOptimTest !=0) { if (VarOptimTest == 1 && Counter !=0) _ReadParametrs(); if (VarOptimTest == 2 && Counter !=0) {_ReadParametrs(); _WriteSet();} } ........... ........... return (0); }-->
여기에서 두 가지 함수가 호출되어 전체 프로세스의 자동화를 보장합니다.
start() 함수에 다음 줄이 추가되었습니다.
int start() { if(IsOptimization() && VarOptimTest ==2) return(0); ..........-->
1. (테스트) 최적화 결과 분석 후 생성된 엑셀 파일을 읽어오는 파라미터 읽기 기능.
함수의 변수 부분은 굵게 표시됩니다. 동일한 구조와 구문에 따라 최적화 및 테스트를 담당하는 처음 세 개와 bool- 및 을 제외한 Expert Advisor의 모든 입력 매개변수를 정확하고 신중하게 나열해야 합니다. >문자열-유형 변수(있는 경우).
void _ReadParametrs() { string FileName="test.csv"; int handle=FileOpen(FileName,FILE_READ||FILE_CSV);//,''); if(handle<1) return(0); FileSeek(handle,0,SEEK_SET); int str = StrToInteger(FileReadString(handle)); int data = StrToInteger(FileReadString(handle)); if (data < Counter) { Alert("Incorrect number of test runs entered. Sorry"); return(0); } for (int y=1; y <=Counter; y++) { for (int x=1; x <= str; x++) { string s = FileReadString(handle); string ds = FileReadString(handle); if (y != Counter) continue; s=StringTrimLeft(s);s=StringTrimRight(s); ds = StringTrimLeft(ds);ds=StringTrimRight(ds); double d = StrToDouble(ds); if (s == "Lots"){Lots=d;continue;} if (s == "MaximumRisk"){MaximumRisk=d;continue;} if (s == "DecreaseFactor"){DecreaseFactor=d;continue;} if (s == "MovingPeriod"){MovingPeriod=d;continue;} if (s == "MovingShift"){MovingShift=d;continue;} } } FileClose(handle); return(0); }-->
2. 설정-파일 생성 및 쓰기 기능. 그 구조는 Expert Advisor 세트 파일 구조를 반영해야 합니다. 함수의 변수 부분은 굵게 표시됩니다.
void _WriteSet () { string FileName=nameEA+"_"+Symbol()+Period()+"_"+Counter+".set"; int handle=FileOpen(FileName,FILE_WRITE|FILE_CSV); if(handle<1) return(0); FileWrite(handle,"VarOptimTest="+0); FileWrite(handle,"VarOptimTest,F="+0); FileWrite(handle,"VarOptimTest,1="+0); FileWrite(handle,"VarOptimTest,2="+0); FileWrite(handle,"VarOptimTest,3="+0); FileWrite(handle,"Counter="+0); FileWrite(handle,"Counter,F="+0); FileWrite(handle,"Counter,1="+1); FileWrite(handle,"Counter,2="+1); FileWrite(handle,"Counter,3="+100); FileWrite(handle,"nameEA="+nameEA+"_"+Symbol()+Period()+"_"+Counter); FileWrite(handle,"Lots="+Lots); FileWrite(handle,"Lots,F="+0); FileWrite(handle,"Lots,1="+0.00000000); FileWrite(handle,"Lots,2="+0.00000000); FileWrite(handle,"Lots,3="+0.00000000); ................................. FileWrite(handle,"MovingShift="+MovingShift); FileWrite(handle,"MovingShift,F="+1); FileWrite(handle,"MovingShift,1="+2); FileWrite(handle,"MovingShift,2="+1); FileWrite(handle,"MovingShift,3="+4); FileClose(handle); return(0); }-->
3. 프로세스
주의! 작업을 수행하기 전에 워크시트나 전체 통합 문서를 복제하는 것이 좋습니다. Excel에서 매크로를 실행하는 것은 되돌릴 수 없는 작업이며 오류가 발생하면 최적화 결과가 손실되어 시간 손실이 발생할 수 있습니다. 중간 결과를 수시로 저장하는 데 아무런 해가 없습니다.
3.1. 최적화
최적화의 특성에 대한 정보는 충분합니다. 이제 최적화를 수행하는 방법을 살펴보겠습니다. Expert Advisor 속성의 최적화 및 테스트 매개변수는 스크린샷과 같이 설정해야 합니다.
그림 1 Expert Advisor 속성, "입력 매개변수" 탭. 최적화 및 테스트 매개변수
3.2. 최적화 결과 분석 및 초기 매개변수 스크리닝
최적화가 완료되면 결과를 클립보드에 복사해야 합니다.
그림 2 최적화 결과 복사
Excel을 시작하고 복사한 데이터를 새 워크시트에 붙여넣습니다.
복사 후 Optim_1 매크로를 실행해야 합니다. 모든 것이 올바르게 완료되면 워크시트는 다음과 유사합니다.
그림 3 엑셀 매크로 실행
매크로를 실행할 때 대화 상자에 최적화 기간의 일 수를 입력해야 합니다. 이는 추가 기준 계산에 필요합니다.
그림 4 일수 입력 대화 상자
보시다시피 결과 테이블에는 열 이름이 없습니다. 이것은 이유가 있습니다. 첫째, 매개변수의 수를 입력할 때 실수를 피하기가 더 쉽고(나중에 필요함), 둘째, 특별히 필요하지 않습니다. 파란색과 녹색의 두 열을 제외하고는 모든 것이 여기에 익숙합니다. 왼쪽에서 오른쪽으로: 패스 번호, 이익, 일당 이익, 총 거래, 일당 거래, 이익 계수, 예상 수익, $의 감소, %의 감소.
테이블에 추가 작업을 위해 선택한 매개변수만 포함된 경우(예: 원하지 않는 행이 삭제된 경우) 다음 단계로 진행합니다.
정렬을 용이하게 하기 위해 모듈에 개별 열별로 정렬할 수 있는 전체 매크로 그룹이 있습니다. 단축키 지정 및 ....
3.3. 파일에 매개변수 저장
"Write" 매크로를 실행하고 매개변수 파일이 저장될 경로(.... terminal\tester\files\)를 팝업창에 입력해야 합니다. 대화 상자
그림 5 매개변수 파일 저장 대화 상자
"파일 이름" 창에는 미리 정의된 이름 "test"가 있습니다. 꼭 필요한 경우가 아니면 변경하지 마십시오. 귀하의 Expert Advisor에 추가되었습니다.
이 작업이 완료되면 "test.csv" 파일이 지정된 디렉토리에 표시됩니다(또는 이전에 존재했다면 덮어쓰게 됩니다).
주의, 중요합니다. 파일 생성 후 테이블의 행 포지션을 변경하지 마십시오. 그렇지 않으면 테스트 결과가 테스트에 사용된 매개변수에 더 이상 바인딩되지 않습니다.
3.4. 테스트
Expert Advisor 설정:
그림 6-8 그룹 테스트 구현을 위한 Expert Advisor 설정
설명이 필요한 경우 사소한 것으로 가정합니다. 제한 없음, 유전 알고리즘 비활성화, 카운터 변수가 1에서 N으로 설정됨, 여기서 N은 테이블에 남아 있는 행 수, 최적화 활성화 이 매개변수에 의해서만.
그리고 또 다른 설정:
그림 9 "최적화 결과" 탭의 설정
이제 테스트 기간 및 기타 필수 최적화 매개변수가 설정되면 "시작" 버튼을 클릭하고 "최적화" 모드에서 전략 테스터를 실행할 수 있습니다.
특히 테이블이 아직 큰 첫 번째 실행에서 꽤 오랜 시간이 걸릴 수 있는 테스트가 완료되면 다음 단계로 진행할 수 있습니다.
3.5. 테스트 결과 작업
우선 Excel 테이블은 새 데이터 입력을 위해 준비되어야 하며 이를 위해 "Optim_2" 매크로를 실행하여 테이블 왼쪽에 7개의 빈 열이 나타납니다. 수신된 결과는 통과 번호에 따라 오름차순으로 정렬되어야 합니다.
그림 10 테스트 결과 정렬
나중에 결과를 복사하여(2단계에서와 같이) 새 Excel 워크시트에 붙여넣은 다음 처음 7개 열을 복사하여 테이블과 함께 워크시트에서 이전에 준비한 영역에 붙여넣습니다.
이제 "Optim_3" 및 "Optim_4" 매크로 시퀀스를 실행하십시오. 모든 것이 올바르게 완료되면 테이블은 다음과 같은 구조를 갖게 됩니다.
그림 11 최적화 및 테스트 결과 저장 및 처리 후 테이블 구조
우리는 이미 L-T 열에 대해 논의했으며 D-K 열은 М-T 열과 유사하지만 해당 데이터는 테스트 영역을 나타냅니다.
그러나 처음 세 개의 열로 진행하기 전에 "일당 이익" 및 "일당 거래"와 같은 기준이 도입된 이유를 분명히 설명해야 합니다.
최적화 및 테스트 기간은 길이가 다를 수 있습니다. 이 경우 합리적인 질문이 생깁니다. 결과를 어떻게 비교해야 할까요? 이 두 매개변수는 이 문제를 적어도 부분적으로 해결하고 결과 비교 프로세스를 용이하게 하도록 설계되었습니다.
따라서 열: А = N/E (일당 이익 비율), B = P/G ( 일당 거래 비율), С =S/J(인출 비율).
보시다시피, 이 열의 값은 현재 1으로 표시됩니다. 이력의 테스트 영역이 최적화 영역과 일치할 때만 존재하는 이상적인 변형입니다. 이것은 실수가 아니라 Expert Advisor가 올바르게 준비되었는지 확인하는 방법 중 하나를 보여주기 위한 의도적인 조치입니다. 마찬가지로 세트 파일 생성의 정확성을 확인할 수 있습니다.
따라서 모든 분석이 준비되었습니다. 모든 정보를 사용할 수 있습니다. 모든 것이 트레이더의 손에 달려 있으며, 그는 Expert Advisor의 모든 비밀 기능을 알고 있으며 매개변수를 스크리닝하기 위해 결과 범위에 필요한 허용 한계를 설정할 수 있습니다.
계속 진행 중입니다. 테이블이 더 줄어들었지만 아직 충분하지 않습니다. 다른 테스트를 실행하는 데 방해가 되는 것은 없습니다.
A-K 열을 제거하고 3 단계로 돌아갑니다.
3-4 테스트의 구현에 따라 우리는 3-5-8 행으로 구성된 테이블을 갖게 될 것입니다. 이 정도면 충분합니다.
3.6. 세트 파일 생성.
누군가는 5-8개의 매개변수 세트가 수동으로 처리될 필요가 없다고 말할 수도 있습니다. 상관없어요 - 원한다면 그렇게 하세요. 그러나 저는 기계가 나를 위해 일상적인 일을 하는 것을 선호합니다. "쓰기" 매크로를 실행하고 마지막으로 다음 Expert Advisor 설정을 사용하여 "최적화" 모드에서 전략 테스터를 실행하기만 하면 됩니다.
그림 12 Set-File 생성을 위한 Expert Advisor 설정
설정은 테스트 모드에서 사용된 것과 거의 동일하며 유일한 차이점은 한 변수의 값과 최종 카운터 값입니다.
최적화 프로세스가 완료되면 Expert Advisor 세트 파일이 tester\files 디렉토리에 생성됩니다. 이름의 마지막 숫자는 테이블의 행 번호입니다.
그림 13 생성된 세트 파일
표준 Expert Advisor 세트 파일로 처리할 수 있습니다.
사실, 글의 주제는 이제 소진되었습니다.
결론
위에 명시된 정보는 일반적으로 "최적화 이론"이라고 불리는 영역에서 발견되었다고 주장하지 않습니다.... 더도 말고 더도 말고 덜도 말고 순전히 실용적인 지침입니다. 이것은 분명하지만 여전히 언급할 필요가 있다고 생각합니다.
여기에 설명된 모든 것은 거래자의 작업을 최대한 용이하게 하도록 설계된 도구일 뿐입니다. 차트의 오른쪽 가장자리 외부의 균형 곡선이 차트의 보이는 부분에서처럼 "좋다"고 100% 보장할 수 있는 사람은 아무도 없습니다.
그리고 하나 더. 많은 단어와 그림에 겁먹지 마세요. 사실, 모든 것이 매우 간단하며 이러한 최적화를 몇 번 수행한 후에는 자동으로 수행하는 방법을 배우게 됩니다.
누군가는 최적화 및 테스트 창을 보다 효과적으로 만드는 방법에 대한 아이디어가 있을 수 있다는 느낌이 듭니다.... 그렇다면 어떨까요 :)
저는 당신에게 행운과 이익을 기원합니다.
P.S. 수십 개의 "마우스" 조작을 설명하는 데 이렇게 많은 단어가 필요할 줄은 몰랐습니다. :)
MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/1347
![트레이더의 황금률](https://c.mql5.com/2/12/1021_34.png)
![CCanvas 클래스 공부하기. 투명 개체를 그리는 방법](https://c.mql5.com/2/17/CCanvas_class_Standard_library_MetaTrader5.png)
![기술적 분석 및 시장 예측 방법에 관하여](https://c.mql5.com/2/17/982_30.gif)
![MQL5 Cookbook: 빠른 데이터 액세스를 위한 연관 배열 또는 사전 구현](https://c.mql5.com/2/18/MQL5_Associative_Arrays__1.png)