주목해야 할 첫 번째 항목은 최적화가 훌륭한 거래 아이디어를 발견하는 것이 아니라 시장의 행동이나 사실을 기반으로 기존 아이디어를 검증하는 데만 사용해야 한다는 것입니다. 거래 아이디어가 먼저 와야 합니다. 시장에 대한 최적화의 위험은 곡선을 과대적합하는 것입니다. 과거 데이터에서 작동했던 것이 미래에는 작동하지 않을 수 있지만 과거 데이터에 대한 훌륭한 조합을 찾았습니다. 그러나 여러 시장에서 사용되어서는 안 되는 매개변수 집합을 찾는 데 사용할 수 있습니다. 오히려 거래 시스템의 민감도입니다. 시뮬레이션/백테스팅의 또 다른 용도는 시스템의 약점과 강점을 이해하는 것입니다. 언제 잘 수행되고, 언제 지연되며, 언제 완전히 실패하여 이러한 문제를 해결하기 위한 새로운 아이디어를 개발할 수 있습니다.
그 시점에서 데이터가 백 테스팅의 가장 중요한 측면이라는 것을 이해하는 것이 중요합니다. 백테스팅 은 실제로 수학적 분포가 아니라 과거 데이터에 대한 시뮬레이션일 뿐이므로 다양한 시장 조건을 나타내는 다양한 쌍에 대한 양질의 데이터가 필요합니다. 다양한 변동성을 가진 Bull, Bear 및 횡보. 시스템이 충격을 포함한 다양한 시장 조건을 견딜 수 있다면 거래에 충분합니다. 대표 데이터가 없으면 결과의 유용성이 실제 시장과 아무런 관련이 없습니다.
그런 다음 결과에 대한 신뢰 수준을 달성하기 위해 수행해야 하는 테스트 수를 결정해야 합니다. 이는 충분히 대표성이 있는 15-30개의 데이터 세트에 대해 백 테스트를 실행하고 신뢰 구간을 개발하는 것을 의미합니다. 이것은 데이터가 재무 데이터가 아닌 정규 분포를 따르고 오른쪽에 두꺼운 꼬리가 있는 왼쪽으로 치우쳐 있다고 가정합니다. 따라서 한 가지 옵션은 실험을 개선하고 더 신뢰할 수 있도록 중앙 한계를 사용하는 것입니다.
Tradestation의 백테스터는 종가를 기다리는 것보다 틱 거래를 할 수 있기 때문에 아마도 메타트레이더보다 더 안정적일 것입니다. 그러나 메타트레이더의 EA도 마찬가지입니다. 메타트레이더 백 테스터는 단순히 올바르게 사용해야 하지만 끔찍하다고 생각하지 않으며 시뮬레이션 프로세스를 이해하지 않고 사용하면 항상 과적합된 결과와 비현실적인 기대로 이어질 것입니다. 자본 손실이 발생합니다. 실제로 이 모든 기대의 요점은 백테스팅, 최적화, 시뮬레이션이 시스템을 개선하고 시스템을 설계하는 분석가를 대체하는 것이 아니라 시스템 간의 개선 사항을 비교하는 데 사용되는 도구라는 것을 이해하는 것입니다. 백 테스팅을 사용하는 경우 많은 두통과 자본 손실을 줄이기 위해 시뮬레이션 방법론을 이해하는 경우 대부분에 대한 제 제안입니다.
내가 정말로 백테스팅을 수행할 예정이라면 백테스팅 시스템을 Arena 또는 Witness와 같은 시뮬레이션 소프트웨어에 프로그래밍하려고 하고 있지만 트레이드 스테이션 기능에 관심이 있습니다.
나는 백 테스팅에 대한 많은 이야기를 보았고 많은 혼란이 있는 것 같아서 관련된 모든 스레드에 게시하는 것보다 길어질 수 있는 정보를 여기에 게시하기로 결정했지만 백 테스팅 이 무엇인지 명확히 할 수 있기를 바랍니다. 그리고 그것을 올바르게 사용하는 방법.
백 테스팅은 과거 데이터를 사용하여 거래 시스템의 개선 사항을 평가하는 시뮬레이션의 한 형태입니다.
가장 먼저 이해해야 할 것은 시뮬레이션이 차트 작성 소프트웨어가 도구인 것과 같은 도구라는 것입니다. 자체적으로 아이디어를 발견하거나 개선하지 않으며, 분석가는 시장의 근본적인 특성을 관찰하여 이를 수행해야 합니다. 일반적으로 시뮬레이션은 시스템을 개선하고 시스템 출력의 편차를 줄이기 위해 과거 데이터를 사용하려고 시도하지만 재무 시뮬레이션은 특수한 유형입니다. 대신 우리는 제어할 수 없는 데이터의 분산에 대해 더 나은 성능을 발휘하도록 시스템을 변경하려고 합니다. 따라서 우리는 성능이 변화하는 시장에 그다지 민감하지 않은 강력한 시스템을 원합니다.
시뮬레이션에는 여러 부분이 있습니다. 방법론, 시스템 및 데이터가 있습니다. 이 포스트에 이어 각각에 대해 자세히 설명하겠습니다. 이 정보가 유용하기를 바랍니다.
거래 시스템을 개선하기로 결정할 때 성공적인 결과를 내기 위해서는 체계적인 것이 중요합니다. 다행히도 검증된 시뮬레이션 방법이 개발되었습니다. 처음 6단계는 마지막 5단계와 마찬가지로 시간의 약 40%가 소요됩니다. 실험 단계에는 시간의 20%만 소요됩니다. 단계는 다음과 같습니다.
1. 문제 정의 - 이것은 시뮬레이션 프로세스의 가장 중요한 단계입니다. 시뮬레이션(백테스트)을 통해 달성하고자 하는 바를 명확하게 명시해야 합니다. 더 나은 표현으로, 귀하의 시스템은 현재 성능이 저조한 위치에 있습니다. 충분히 빨리 진입하지 않고, 충분히 빨리 빠져나가지 않습니까? 너무 자주, 충분히 자주 거래하지 않습니까? 두 시스템을 비교하고 어느 것이 더 가치 있고 신뢰할 수 있는지 결정하시겠습니까? 유효한 문제입니다.
2. 프로젝트 계획 - 이 단계는 실험을 성공적으로 수행하기 위한 도구와 로드맵이 있는지 확인하는 데 도움이 됩니다. 우리 대부분은 메타트레이더나 엑셀을 포함한 다른 소프트웨어에 필요한 것을 가지고 있지만, 아마도 당신은 스스로 그것을 하기에 충분한 프로그래밍을 모르기 때문에 도움을 찾아야 할 수도 있습니다. 타임라인은 작업이 충분히 빨리 완료되었는지 확인하는 데 도움이 됩니다.
3. 시스템 정의 - 재무 시뮬레이션에서 이 단계에는 거래하려는 시장과 시스템이 이를 수행하는 데 사용하는 도구를 결정하는 것이 포함됩니다. 기존 시뮬레이션과 달리 가능한 한 많은 세부 사항을 포함하려고 합니다.
4. 모델 개념화 - 이 단계에서는 시스템 작동 방식을 간략하게 설명하고 거래 시스템에 프로그래밍할 규칙 기반을 개발합니다. 거래량, 폭, 모멘텀, 오실레이터, 주기, 계절, 행동 기법, 적응 기법, 위험 통제, 자금 관리, 분배 시스템 또는 다루고자 하는 모든 측면을 고려할 수 있습니다.
5. 예비 실험 설계 - 이 단계까지 저는 여러분 모두가 이 아이디어를 머리 속으로 빨리 생각해 낼 수 있기를 바랍니다. 그러나 완료했을 때 결과를 검토하고 비교할 수 있도록 기록하는 것이 여전히 중요합니다. 이 단계에서는 실험을 수행할 방법을 결정합니다. 실험적인 디자인에 대한 자세한 내용은 별도의 포스트를 작성하겠습니다.
6. 입력 데이터 준비 - 좋은 데이터는 모든 시뮬레이션, 특히 재무 시뮬레이션에 매우 중요합니다. 열악한 데이터는 결과를 부풀리거나 축소할 수 있습니다. 시장을 대표하는 데이터가 충분하지 않습니다. 마켓 데이터는 따로 포스팅 하겠습니다. 이 단계에서 데이터를 수집하고 소프트웨어에서 사용할 수 있는 형식으로 구성합니다. 나는 메타 트레이더가 날짜, 시간, 시가, 고가, 저가, 종가, 거래량 열을 선호한다고 생각합니다. 그런 다음 실험에 사용된 다양한 데이터 세트로 분할합니다.
7. 모델 번역 - 이 단계는 시스템에서 실제로 프로그래밍하는 단계입니다. 이 시점에서 시스템이 어떻게 구성되고 다양한 기능으로 분리되어 원활한 프로세스인지에 대한 좋은 아이디어가 있어야 합니다. 일반적으로 두 가지 유형의 시스템이 있습니다. 통합 및 수직. 통합 시스템은 특정 방식으로 함께 작동하는 반면 수직 시스템은 부품을 추가 및 제거할 수 있습니다.
8. 검증 및 검증 - 이것은 모델이 귀하의 거래 시스템을 나타내고 데이터가 다양한 시장 조건에 대해 대표적이고 정확한지 확인하는 매우 중요한 단계입니다. 전략 테스터 에서 샘플 실행을 실행한 후 차트를 여는 것은 시스템이 예상대로 작동하는지 시각적으로 검사하는 좋은 방법입니다.
9. 최종 실험 설계 - 아이디어를 검증한 후 방법론을 진행하는 과정에서 필요하다고 인식한 시스템을 변경합니다. 이는 데이터를 연구하는 동안 새로운 아이디어를 발견했거나 결과를 만족시키기 위해 새로운 보고 수단이 필요했음을 의미할 수 있습니다.
10. 실험 - 이 단계는 단순히 실험을 반복하고 분석을 위해 출력 데이터를 수집하는 단계입니다. 여기에는 데이터 기록도 포함될 것입니다.
11. 분석 및 해석 - 실험을 실행하고 수집된 데이터를 출력한 후 데이터를 분석하고 해석해야 합니다. 여기에서 시스템 개선이 유효한 기여를 제공하는지 여부를 결정합니다.
12. 구현 및 문서화 - 최종적으로 개선 사항을 구현하고 결과를 문서화하여 시뮬레이션 수명을 다시 참조하고 개선합니다.
시뮬레이션을 수행하는 과정에서 무언가를 잊어버린 경우 많은 방법론 단계를 여러 번 실행해야 할 수 있습니다. 그러나 한 가지 매우 중요한 측면은 실험적 설계입니다.
세상에는 두 가지 유형의 시스템이 있습니다. 확률적(변수 결과) 및 결정적(단일 결과). 금융 시장은 날씨 다음의 궁극적인 확률 시스템입니다. 그것은 편차로 가득 차 있으며 그 결과는 매일 그리고 시장에 따라 매우 크게 달라질 수 있습니다. 그러나 우리가 원하는 것은 이 매우 가변적인 데이터에 낮은 변화 방식으로 반응하여 위험을 줄이면서 성능을 높이는 시스템입니다. 분산은 본질적으로 규칙이며 두 가지 유형이 있습니다. 랜덤 분산 및 비 랜덤 분산. 무작위 분산은 시스템에 내재되어 있으며 모든 것을 완전히 제거할 수는 없습니다. 즉, 시스템은 항상 월별로 다르게 작동합니다. 비임의 분산을 제어해야 합니다. 여기에는 허용 범위를 벗어난 성능 또는 데이터의 큰 스파이크 또는 구멍, 정전, 연결 손실, 잘못된 프로그래밍에 대한 시스템 반응이 포함됩니다. 안정적인 시스템은 이 모든 것을 어느 정도 관리한 시스템입니다.
우리 실험의 요점은 우리 시스템이 명시된 요구 사항(허용할 수 없는 편차)을 벗어나 성능을 발휘하는 부분을 확인하고 개선을 시도하는 것입니다. 따라서 첫 번째 단계는 메트릭(측정된 값)을 정의하는 것입니다. 메타 트레이더는 우리에게 중요한 일인 드로다운, 이익 요인, 좋은 거래 비율 등을 많이 합니다. 우리는 진입 신호의 차이와 입력했어야 하는 위치와 같은 시스템의 기능이 아닌 다른 기능에 관심을 가질 수 있습니다. 이 더 복잡한 메트릭은 수동으로 프로그래밍해야 할 수 있습니다.
시뮬레이션/백테스트에서 수집하는 데 중요한 메트릭을 정의한 후에는 실험을 수행하는 방법을 결정해야 합니다. 시장 데이터는 확률론적이기 때문에(단일 시장 데이터 세트에 대한 시스템의 단일 테스트) 시스템 성능에 대한 확신을 주기에는 충분하지 않습니다. 통계에 따르면 수천 번의 실행을 권장하지만 불행히도 그렇게 많은 데이터나 시간이 없습니다. 런 수는 데이터에서 발견된 분산에 따라 다릅니다. 이는 시장 데이터의 변동이 아니라 거래 시스템 성능의 변동을 의미합니다. 거래에 관한 모든 것은 분산을 이해하고 제어하는 것입니다. 이 경우 모든 종류의 시장, 즉 강세장, 약세장 및 비추세를 나타낼 수 있을 만큼 충분히 오랜 기간 동안 독립적인 실행(다른 데이터 세트/시장)을 실행하는 것이 가장 좋습니다. 비 추세는 Forex가 추세 거래 시스템이 범위 거래 시장을 처리하는 방법을 나타내는 데 가장 중요할 수 있지만 시스템에 따라 다릅니다.
이 정보에서 결과에 대한 신뢰 구간을 개발할 수 있습니다. 신뢰 구간은 메트릭이 속하는 신뢰 수준이 있는 성능 범위입니다. 따라서 30개의 데이터 세트에 대한 테스트를 기반으로 하면 100,000~200,000달러의 수익을 올릴 것이라고 90% 확신한다고 말할 수 있습니다. 이것은 시뮬레이션에서 사용한 시장 데이터가 다양한 시장 조건을 얼마나 대표했는지에 따라 달라집니다. 가능한 한 많이 표시되는 것이 좋습니다. 한 번도 본 적이 없는 새로운 것이 발생하면 결과가 신뢰 구간과 유사할 이유가 없습니다. 신뢰 구간을 계산하는 것은 x(mean)+-(alpha/2에 대한 학생 t 값)*(s/sqrt(n))을 사용하는 간단한 방법입니다. 여기서 학생 t 값은 표에서 찾을 수 있고 n은 표본 크기입니다. s는 표준 편차 이고 알파는 신뢰 수준입니다. 90%의 경우 .9일 것입니다. 평균은 해당 메트릭에 대한 결과의 평균입니다. 아마도 이익입니다.
두 개의 서로 다른 시스템을 비교하는 경우 ANOVA 테스트를 사용하여 가설 테스트를 읽을 수 있습니다.
그래서 우리가 배운 것은 얼마나 많은 실행을 해야 하는지, 얼마나 오래 실행해야 하는지, 무엇을 나타내야 하는지, 그리고 그 의미를 결정하기 위해 어떻게 평가해야 하는지입니다. 이것은 많은 사람들에게 혼란스러운 부분일 수 있습니다. 자유롭게 질문하십시오.
나는 백테스팅의 목적뿐만 아니라 방법론과 실험적 설계에 대해 이야기했다. 이제 나는 당신이 사용하는 데이터에 대해 이야기하고 싶습니다.
피곤해서 뭔가 이해가 되지 않는다면 죄송합니다 HA.
데이터는 매우 중요하며 적절하게 평가되기 위해서는 몇 가지 특성이 있어야 합니다. 데이터는 충분히 길어야 하고 수행할 조건을 나타내며 정확하고 유효해야 합니다.
확장한다는 것은 데이터가 다양한 시장 상황을 가능한 한 여러 번 나타내야 함을 의미합니다. Bulls, Bears, 높은 변동성, 낮은 변동성, severl price shocks, Range Markets, non-trending Market, 생각할 수 있는 모든 것 많은 사람들이 백테스팅을 하는 한 가지 실수는 한 번 실행하고 옵티마이저를 실행하고 거래 시스템의 성배를 찾았다고 생각하는 것입니다. 질문으로 정말 좋은 결과 또는 정말 나쁜 결과가 있는 경우 데이터, 프로그래밍 또는 곡선에 대한 과적합에 문제가 있을 수 있다는 점을 항상 기억하십시오. 과적합은 이전 데이터에서 잘 작동하도록 시스템을 최적화하는 프로세스입니다. 불행히도 그런 시장 상황을 다시는 볼 수 없을 것이며 시스템이 최적화되어 새로운 시장 상황에 매우 민감하고 빠르게 충돌할 것입니다. 대표성이 되려면 몇 년 동안 지속되어야 하며, 가능한 경우 수십 년 동안 지속되어야 하며 시장 결합과 같은 시장의 주요 변화가 발생한 경우 포함되어서는 안 됩니다. 나는 일부에 동의하지 않으며 시장 데이터가 어떤 조건을 나타내는 한 백 테스트에 좋은 데이터라면 시장 데이터라고 생각하므로 자신의 판단을 사용하십시오.
테스트를 위해 시장 데이터를 수집하는 것은 긴 시도가 될 수 있습니다. 왜냐하면 원하는 형식이 결코 아니며 항상 원하는 것보다 3배나 오래 걸리기 때문입니다.
마지막으로 데이터는 독립적이어야 합니다. 이는 모든 달러 쌍이 높은 상관관계를 갖는 외환 시장에서 문제가 될 수 있습니다. 즉, 유사한 방식으로 움직입니다. 이것은 자기 상관이 있는 한 시장 내에서도 종종 깨집니다. 즉, 다음 데이터 조각은 마지막 데이터에 상관되거나 종속됩니다. 두 번째 관찰은 프로세스 기간 동안 동일하게 분포되어야 합니다. 다시 말하지만 금융 시장 분포는 항상 변하지만 기본 형태는 작동하기에 충분히 가깝습니다. 마지막으로 정규 분포를 따라야 합니다. 이것은 가격이 더 낮은 수준에 머무르는 경향이 있기 때문에 항상 깨집니다. 오히려 가격 분포와 가격 움직임 분포가 왼쪽으로 치우쳐 있고 예상했던 것보다 오른쪽에 두꺼운 꼬리가 있습니다. 이것이 우리가 돈을 벌 수 있게 해주는 것이지만 시뮬레이션의 기본 가정을 위반하는 것입니다. 로그 변환과 같은 분석에서 이를 수정하는 방법이 있지만 일반적으로 중심 극한 정리가 실험하기 더 쉽습니다. 이는 각 실행 값이 15개의 다른 실행의 평균인 15개의 실행을 실행하는 경우 이것이 더 정규 분포를 따르고 더 현실적인 신뢰 구간이 되는 경향이 있음을 의미합니다. 그것이 의미가 없다면 무시하고 백테스팅 결과와 거래하는 물리적 시스템 사이에는 상관관계가 없다는 것을 기억하십시오. 그것은 단지 도구이자 좋은 것이지만 올바르게 이해하고 사용해야 합니다.
다음과 같은 다른 많은 주제를 고려해야 하며 나중에 다음과 같이 될 수 있습니다.
백테스트 절차
최적화
통계
개연성
변환
실용적인 고려 사항
배포 및 이해
랜덤 스트림 및 합성 데이터
가설 검증
몬테카를로 최적화/메타 트레이더보다 빠름
하지만 그때까지는 이것이 다소 도움이 되었기를 바라며 거래 시스템을 구현할 때 더 나은 백테스팅을 수행하고 더 나은 결과를 얻을 수 있습니다. 질문이 많은 것으로 알고 있습니다.
편집***5월 27일. 백테스팅은 시뮬레이터가 아니라 시뮬레이션 실습이라는 점에 주목하는 것이 중요합니다. 잘 작동하는 것으로 보이는 한 시뮬레이터가 이 사이트에 Forex 테스터로 나열되어 있습니다. 백테스터로 사용할 수 있지만 아직 EA에서는 사용할 수 없습니다. 시뮬레이션/백테스팅은 실제로 거래 시스템의 성능에 대한 통계를 제공하여 약점을 분석할 수 있도록 하기 위한 것입니다. 궁극적으로 시간 경과에 따른 자기자본 곡선의 기울기 편차를 줄이려고 합니다. 이것이 사람들이 메타 트레이더 백 테스터를 좋아하지 않는 이유인지 궁금합니다. 시뮬레이터를 찾고 있을지도 모릅니다. 그러나 시각적 성능을 찾고 있다면 전략 테스터 를 실행한 후 차트를 열기만 하면 EA가 어떻게 거래되고 있는지 정확히 볼 수 있습니다. 시스템 검증에 매우 유용합니다.***
나는 실제로 tradestations 백 테스터에 대한 경험이 거의 없습니다. 그래도 몇 가지 장점을 알고 있습니다. Tradestation은 전략 테스터에서 종가를 사용하는 대신 일중(틱) 구매를 할 수 있지만(최신 버전에서 발생) 메타 트레이더는 종가를 사용합니다. 매우 빠르게 거래하고 가끔씩 나타나는 2~3개의 막대 이동을 잡으려고 하면 전략에 따라 시스템에 중대한 결과를 초래할 수 있습니다. 그러나 종가를 기다리는 것과 같은 많은 기본 전략에도 위배됩니다. 다른 차이점은 물론 프로그래밍에 사용할 수 있는 언어가 서로 다르며 변수 합산과 같은 일부 일반적인 작업은 tradestation에서 더 쉬운 것으로 보입니다. Finnaly 나는 tradestation에서 제한되지 않는 metatrader 내에 몇 가지 메모리 제한이 있다고 들었지만 이에 대해 실행하지 않았습니다. 메타 트레이더에서와 같이 EA가 화면에 표시기를 로드하지 못하도록 하는 것과 같은 시스템 변수에 대한 제한이 무엇인지 모르겠습니다. 또한 tradestation이 제공하는 미리 작성된 통계는 백테스트 결과에 대해 더 강력합니다. 트레이드스테이션 def. 몇 가지 장점이 있지만 백 테스터는 완전히 자동화된 시스템을 실행하는 경우 소프트웨어와 동일하게 반응해야 합니다. 그런 경우 자동 거래에 사용하는 것과 동일한 소프트웨어에서 백테스팅을 제안합니다. 그렇지 않으면 놀랄 수 있습니다.
무엇보다도 나는 그것이 더 잘 프로그래밍되어 있다고 생각하지만 많은 사람들과 달리 메타트레이더 백테스터는 올바르게 사용하고 코드를 실행하는 방법을 이해하고 있을 경우 예상대로 정확하게 작동한다고 믿습니다. 시뮬레이션 소프트웨어의 경우 항상 그러하므로 단점으로 보지는 않습니다. 사용하는 소프트웨어는 일반적으로 소프트웨어가 제공하는 데이터를 해석하는 방법만큼 중요하지 않습니다. 지금은 그냥 욕을 하는 거니까 여기까지만 하겠습니다.
때로는 너무 빠르기도 하고 때로는 너무 느리게 진행되기도 합니다. 이유를 모르겠습니다. 로그에서 1.5GB 파일을 발견하고 삭제했지만 여전히 느립니다. 프로그램을 백테스트하는 더 좋은 방법입니까? 저는 Metatrader를 사용하고 있으며 종종 20%의 모델링 품질만 가지고 있습니다.
좋아요.
그러나 백테스팅의 경우 가장 정밀한 세분성도 1분입니다.
틱 데이터가 1분 백테스팅에 대한 결과를 변경하지 않을 것이라고 상상할 수 있습니다.이 데이터를 아직 백테스트 한 사람이 있습니까? 나는 또한 전문가 고문이 과도한 스캘핑을 사용하지 않는 한 1-M 데이터가 큰 차이를 만들지 않는다는 데 동의합니다.
백 테스트 및 최적화
주목해야 할 첫 번째 항목은 최적화가 훌륭한 거래 아이디어를 발견하는 것이 아니라 시장의 행동이나 사실을 기반으로 기존 아이디어를 검증하는 데만 사용해야 한다는 것입니다. 거래 아이디어가 먼저 와야 합니다. 시장에 대한 최적화의 위험은 곡선을 과대적합하는 것입니다. 과거 데이터에서 작동했던 것이 미래에는 작동하지 않을 수 있지만 과거 데이터에 대한 훌륭한 조합을 찾았습니다. 그러나 여러 시장에서 사용되어서는 안 되는 매개변수 집합을 찾는 데 사용할 수 있습니다. 오히려 거래 시스템의 민감도입니다. 시뮬레이션/백테스팅의 또 다른 용도는 시스템의 약점과 강점을 이해하는 것입니다. 언제 잘 수행되고, 언제 지연되며, 언제 완전히 실패하여 이러한 문제를 해결하기 위한 새로운 아이디어를 개발할 수 있습니다.
그 시점에서 데이터가 백 테스팅의 가장 중요한 측면이라는 것을 이해하는 것이 중요합니다. 백테스팅 은 실제로 수학적 분포가 아니라 과거 데이터에 대한 시뮬레이션일 뿐이므로 다양한 시장 조건을 나타내는 다양한 쌍에 대한 양질의 데이터가 필요합니다. 다양한 변동성을 가진 Bull, Bear 및 횡보. 시스템이 충격을 포함한 다양한 시장 조건을 견딜 수 있다면 거래에 충분합니다. 대표 데이터가 없으면 결과의 유용성이 실제 시장과 아무런 관련이 없습니다.
그런 다음 결과에 대한 신뢰 수준을 달성하기 위해 수행해야 하는 테스트 수를 결정해야 합니다. 이는 충분히 대표성이 있는 15-30개의 데이터 세트에 대해 백 테스트를 실행하고 신뢰 구간을 개발하는 것을 의미합니다. 이것은 데이터가 재무 데이터가 아닌 정규 분포를 따르고 오른쪽에 두꺼운 꼬리가 있는 왼쪽으로 치우쳐 있다고 가정합니다. 따라서 한 가지 옵션은 실험을 개선하고 더 신뢰할 수 있도록 중앙 한계를 사용하는 것입니다.
Tradestation의 백테스터는 종가를 기다리는 것보다 틱 거래를 할 수 있기 때문에 아마도 메타트레이더보다 더 안정적일 것입니다. 그러나 메타트레이더의 EA도 마찬가지입니다. 메타트레이더 백 테스터는 단순히 올바르게 사용해야 하지만 끔찍하다고 생각하지 않으며 시뮬레이션 프로세스를 이해하지 않고 사용하면 항상 과적합된 결과와 비현실적인 기대로 이어질 것입니다. 자본 손실이 발생합니다. 실제로 이 모든 기대의 요점은 백테스팅, 최적화, 시뮬레이션이 시스템을 개선하고 시스템을 설계하는 분석가를 대체하는 것이 아니라 시스템 간의 개선 사항을 비교하는 데 사용되는 도구라는 것을 이해하는 것입니다. 백 테스팅을 사용하는 경우 많은 두통과 자본 손실을 줄이기 위해 시뮬레이션 방법론을 이해하는 경우 대부분에 대한 제 제안입니다.
내가 정말로 백테스팅을 수행할 예정이라면 백테스팅 시스템을 Arena 또는 Witness와 같은 시뮬레이션 소프트웨어에 프로그래밍하려고 하고 있지만 트레이드 스테이션 기능에 관심이 있습니다.
백 테스팅 튜토리얼 및 팁
나는 백 테스팅에 대한 많은 이야기를 보았고 많은 혼란이 있는 것 같아서 관련된 모든 스레드에 게시하는 것보다 길어질 수 있는 정보를 여기에 게시하기로 결정했지만 백 테스팅 이 무엇인지 명확히 할 수 있기를 바랍니다. 그리고 그것을 올바르게 사용하는 방법.
백 테스팅은 과거 데이터를 사용하여 거래 시스템의 개선 사항을 평가하는 시뮬레이션의 한 형태입니다.
가장 먼저 이해해야 할 것은 시뮬레이션이 차트 작성 소프트웨어가 도구인 것과 같은 도구라는 것입니다. 자체적으로 아이디어를 발견하거나 개선하지 않으며, 분석가는 시장의 근본적인 특성을 관찰하여 이를 수행해야 합니다. 일반적으로 시뮬레이션은 시스템을 개선하고 시스템 출력의 편차를 줄이기 위해 과거 데이터를 사용하려고 시도하지만 재무 시뮬레이션은 특수한 유형입니다. 대신 우리는 제어할 수 없는 데이터의 분산에 대해 더 나은 성능을 발휘하도록 시스템을 변경하려고 합니다. 따라서 우리는 성능이 변화하는 시장에 그다지 민감하지 않은 강력한 시스템을 원합니다.
시뮬레이션에는 여러 부분이 있습니다. 방법론, 시스템 및 데이터가 있습니다. 이 포스트에 이어 각각에 대해 자세히 설명하겠습니다. 이 정보가 유용하기를 바랍니다.
시뮬레이션 방법론
거래 시스템을 개선하기로 결정할 때 성공적인 결과를 내기 위해서는 체계적인 것이 중요합니다. 다행히도 검증된 시뮬레이션 방법이 개발되었습니다. 처음 6단계는 마지막 5단계와 마찬가지로 시간의 약 40%가 소요됩니다. 실험 단계에는 시간의 20%만 소요됩니다. 단계는 다음과 같습니다.
1. 문제 정의 - 이것은 시뮬레이션 프로세스의 가장 중요한 단계입니다. 시뮬레이션(백테스트)을 통해 달성하고자 하는 바를 명확하게 명시해야 합니다. 더 나은 표현으로, 귀하의 시스템은 현재 성능이 저조한 위치에 있습니다. 충분히 빨리 진입하지 않고, 충분히 빨리 빠져나가지 않습니까? 너무 자주, 충분히 자주 거래하지 않습니까? 두 시스템을 비교하고 어느 것이 더 가치 있고 신뢰할 수 있는지 결정하시겠습니까? 유효한 문제입니다.
2. 프로젝트 계획 - 이 단계는 실험을 성공적으로 수행하기 위한 도구와 로드맵이 있는지 확인하는 데 도움이 됩니다. 우리 대부분은 메타트레이더나 엑셀을 포함한 다른 소프트웨어에 필요한 것을 가지고 있지만, 아마도 당신은 스스로 그것을 하기에 충분한 프로그래밍을 모르기 때문에 도움을 찾아야 할 수도 있습니다. 타임라인은 작업이 충분히 빨리 완료되었는지 확인하는 데 도움이 됩니다.
3. 시스템 정의 - 재무 시뮬레이션에서 이 단계에는 거래하려는 시장과 시스템이 이를 수행하는 데 사용하는 도구를 결정하는 것이 포함됩니다. 기존 시뮬레이션과 달리 가능한 한 많은 세부 사항을 포함하려고 합니다.
4. 모델 개념화 - 이 단계에서는 시스템 작동 방식을 간략하게 설명하고 거래 시스템에 프로그래밍할 규칙 기반을 개발합니다. 거래량, 폭, 모멘텀, 오실레이터, 주기, 계절, 행동 기법, 적응 기법, 위험 통제, 자금 관리, 분배 시스템 또는 다루고자 하는 모든 측면을 고려할 수 있습니다.
5. 예비 실험 설계 - 이 단계까지 저는 여러분 모두가 이 아이디어를 머리 속으로 빨리 생각해 낼 수 있기를 바랍니다. 그러나 완료했을 때 결과를 검토하고 비교할 수 있도록 기록하는 것이 여전히 중요합니다. 이 단계에서는 실험을 수행할 방법을 결정합니다. 실험적인 디자인에 대한 자세한 내용은 별도의 포스트를 작성하겠습니다.
6. 입력 데이터 준비 - 좋은 데이터는 모든 시뮬레이션, 특히 재무 시뮬레이션에 매우 중요합니다. 열악한 데이터는 결과를 부풀리거나 축소할 수 있습니다. 시장을 대표하는 데이터가 충분하지 않습니다. 마켓 데이터는 따로 포스팅 하겠습니다. 이 단계에서 데이터를 수집하고 소프트웨어에서 사용할 수 있는 형식으로 구성합니다. 나는 메타 트레이더가 날짜, 시간, 시가, 고가, 저가, 종가, 거래량 열을 선호한다고 생각합니다. 그런 다음 실험에 사용된 다양한 데이터 세트로 분할합니다.
7. 모델 번역 - 이 단계는 시스템에서 실제로 프로그래밍하는 단계입니다. 이 시점에서 시스템이 어떻게 구성되고 다양한 기능으로 분리되어 원활한 프로세스인지에 대한 좋은 아이디어가 있어야 합니다. 일반적으로 두 가지 유형의 시스템이 있습니다. 통합 및 수직. 통합 시스템은 특정 방식으로 함께 작동하는 반면 수직 시스템은 부품을 추가 및 제거할 수 있습니다.
8. 검증 및 검증 - 이것은 모델이 귀하의 거래 시스템을 나타내고 데이터가 다양한 시장 조건에 대해 대표적이고 정확한지 확인하는 매우 중요한 단계입니다. 전략 테스터 에서 샘플 실행을 실행한 후 차트를 여는 것은 시스템이 예상대로 작동하는지 시각적으로 검사하는 좋은 방법입니다.
9. 최종 실험 설계 - 아이디어를 검증한 후 방법론을 진행하는 과정에서 필요하다고 인식한 시스템을 변경합니다. 이는 데이터를 연구하는 동안 새로운 아이디어를 발견했거나 결과를 만족시키기 위해 새로운 보고 수단이 필요했음을 의미할 수 있습니다.
10. 실험 - 이 단계는 단순히 실험을 반복하고 분석을 위해 출력 데이터를 수집하는 단계입니다. 여기에는 데이터 기록도 포함될 것입니다.
11. 분석 및 해석 - 실험을 실행하고 수집된 데이터를 출력한 후 데이터를 분석하고 해석해야 합니다. 여기에서 시스템 개선이 유효한 기여를 제공하는지 여부를 결정합니다.
12. 구현 및 문서화 - 최종적으로 개선 사항을 구현하고 결과를 문서화하여 시뮬레이션 수명을 다시 참조하고 개선합니다.
실험 설계 확장
시뮬레이션을 수행하는 과정에서 무언가를 잊어버린 경우 많은 방법론 단계를 여러 번 실행해야 할 수 있습니다. 그러나 한 가지 매우 중요한 측면은 실험적 설계입니다.
세상에는 두 가지 유형의 시스템이 있습니다. 확률적(변수 결과) 및 결정적(단일 결과). 금융 시장은 날씨 다음의 궁극적인 확률 시스템입니다. 그것은 편차로 가득 차 있으며 그 결과는 매일 그리고 시장에 따라 매우 크게 달라질 수 있습니다. 그러나 우리가 원하는 것은 이 매우 가변적인 데이터에 낮은 변화 방식으로 반응하여 위험을 줄이면서 성능을 높이는 시스템입니다. 분산은 본질적으로 규칙이며 두 가지 유형이 있습니다. 랜덤 분산 및 비 랜덤 분산. 무작위 분산은 시스템에 내재되어 있으며 모든 것을 완전히 제거할 수는 없습니다. 즉, 시스템은 항상 월별로 다르게 작동합니다. 비임의 분산을 제어해야 합니다. 여기에는 허용 범위를 벗어난 성능 또는 데이터의 큰 스파이크 또는 구멍, 정전, 연결 손실, 잘못된 프로그래밍에 대한 시스템 반응이 포함됩니다. 안정적인 시스템은 이 모든 것을 어느 정도 관리한 시스템입니다.
우리 실험의 요점은 우리 시스템이 명시된 요구 사항(허용할 수 없는 편차)을 벗어나 성능을 발휘하는 부분을 확인하고 개선을 시도하는 것입니다. 따라서 첫 번째 단계는 메트릭(측정된 값)을 정의하는 것입니다. 메타 트레이더는 우리에게 중요한 일인 드로다운, 이익 요인, 좋은 거래 비율 등을 많이 합니다. 우리는 진입 신호의 차이와 입력했어야 하는 위치와 같은 시스템의 기능이 아닌 다른 기능에 관심을 가질 수 있습니다. 이 더 복잡한 메트릭은 수동으로 프로그래밍해야 할 수 있습니다.
시뮬레이션/백테스트에서 수집하는 데 중요한 메트릭을 정의한 후에는 실험을 수행하는 방법을 결정해야 합니다. 시장 데이터는 확률론적이기 때문에(단일 시장 데이터 세트에 대한 시스템의 단일 테스트) 시스템 성능에 대한 확신을 주기에는 충분하지 않습니다. 통계에 따르면 수천 번의 실행을 권장하지만 불행히도 그렇게 많은 데이터나 시간이 없습니다. 런 수는 데이터에서 발견된 분산에 따라 다릅니다. 이는 시장 데이터의 변동이 아니라 거래 시스템 성능의 변동을 의미합니다. 거래에 관한 모든 것은 분산을 이해하고 제어하는 것입니다. 이 경우 모든 종류의 시장, 즉 강세장, 약세장 및 비추세를 나타낼 수 있을 만큼 충분히 오랜 기간 동안 독립적인 실행(다른 데이터 세트/시장)을 실행하는 것이 가장 좋습니다. 비 추세는 Forex가 추세 거래 시스템이 범위 거래 시장을 처리하는 방법을 나타내는 데 가장 중요할 수 있지만 시스템에 따라 다릅니다.
이 정보에서 결과에 대한 신뢰 구간을 개발할 수 있습니다. 신뢰 구간은 메트릭이 속하는 신뢰 수준이 있는 성능 범위입니다. 따라서 30개의 데이터 세트에 대한 테스트를 기반으로 하면 100,000~200,000달러의 수익을 올릴 것이라고 90% 확신한다고 말할 수 있습니다. 이것은 시뮬레이션에서 사용한 시장 데이터가 다양한 시장 조건을 얼마나 대표했는지에 따라 달라집니다. 가능한 한 많이 표시되는 것이 좋습니다. 한 번도 본 적이 없는 새로운 것이 발생하면 결과가 신뢰 구간과 유사할 이유가 없습니다. 신뢰 구간을 계산하는 것은 x(mean)+-(alpha/2에 대한 학생 t 값)*(s/sqrt(n))을 사용하는 간단한 방법입니다. 여기서 학생 t 값은 표에서 찾을 수 있고 n은 표본 크기입니다. s는 표준 편차 이고 알파는 신뢰 수준입니다. 90%의 경우 .9일 것입니다. 평균은 해당 메트릭에 대한 결과의 평균입니다. 아마도 이익입니다.
두 개의 서로 다른 시스템을 비교하는 경우 ANOVA 테스트를 사용하여 가설 테스트를 읽을 수 있습니다.
그래서 우리가 배운 것은 얼마나 많은 실행을 해야 하는지, 얼마나 오래 실행해야 하는지, 무엇을 나타내야 하는지, 그리고 그 의미를 결정하기 위해 어떻게 평가해야 하는지입니다. 이것은 많은 사람들에게 혼란스러운 부분일 수 있습니다. 자유롭게 질문하십시오.
데이터 백테스팅 확장
나는 백테스팅의 목적뿐만 아니라 방법론과 실험적 설계에 대해 이야기했다. 이제 나는 당신이 사용하는 데이터에 대해 이야기하고 싶습니다.
피곤해서 뭔가 이해가 되지 않는다면 죄송합니다 HA.
데이터는 매우 중요하며 적절하게 평가되기 위해서는 몇 가지 특성이 있어야 합니다. 데이터는 충분히 길어야 하고 수행할 조건을 나타내며 정확하고 유효해야 합니다.
확장한다는 것은 데이터가 다양한 시장 상황을 가능한 한 여러 번 나타내야 함을 의미합니다. Bulls, Bears, 높은 변동성, 낮은 변동성, severl price shocks, Range Markets, non-trending Market, 생각할 수 있는 모든 것 많은 사람들이 백테스팅을 하는 한 가지 실수는 한 번 실행하고 옵티마이저를 실행하고 거래 시스템의 성배를 찾았다고 생각하는 것입니다. 질문으로 정말 좋은 결과 또는 정말 나쁜 결과가 있는 경우 데이터, 프로그래밍 또는 곡선에 대한 과적합에 문제가 있을 수 있다는 점을 항상 기억하십시오. 과적합은 이전 데이터에서 잘 작동하도록 시스템을 최적화하는 프로세스입니다. 불행히도 그런 시장 상황을 다시는 볼 수 없을 것이며 시스템이 최적화되어 새로운 시장 상황에 매우 민감하고 빠르게 충돌할 것입니다. 대표성이 되려면 몇 년 동안 지속되어야 하며, 가능한 경우 수십 년 동안 지속되어야 하며 시장 결합과 같은 시장의 주요 변화가 발생한 경우 포함되어서는 안 됩니다. 나는 일부에 동의하지 않으며 시장 데이터가 어떤 조건을 나타내는 한 백 테스트에 좋은 데이터라면 시장 데이터라고 생각하므로 자신의 판단을 사용하십시오.
테스트를 위해 시장 데이터를 수집하는 것은 긴 시도가 될 수 있습니다. 왜냐하면 원하는 형식이 결코 아니며 항상 원하는 것보다 3배나 오래 걸리기 때문입니다.
마지막으로 데이터는 독립적이어야 합니다. 이는 모든 달러 쌍이 높은 상관관계를 갖는 외환 시장에서 문제가 될 수 있습니다. 즉, 유사한 방식으로 움직입니다. 이것은 자기 상관이 있는 한 시장 내에서도 종종 깨집니다. 즉, 다음 데이터 조각은 마지막 데이터에 상관되거나 종속됩니다. 두 번째 관찰은 프로세스 기간 동안 동일하게 분포되어야 합니다. 다시 말하지만 금융 시장 분포는 항상 변하지만 기본 형태는 작동하기에 충분히 가깝습니다. 마지막으로 정규 분포를 따라야 합니다. 이것은 가격이 더 낮은 수준에 머무르는 경향이 있기 때문에 항상 깨집니다. 오히려 가격 분포와 가격 움직임 분포가 왼쪽으로 치우쳐 있고 예상했던 것보다 오른쪽에 두꺼운 꼬리가 있습니다. 이것이 우리가 돈을 벌 수 있게 해주는 것이지만 시뮬레이션의 기본 가정을 위반하는 것입니다. 로그 변환과 같은 분석에서 이를 수정하는 방법이 있지만 일반적으로 중심 극한 정리가 실험하기 더 쉽습니다. 이는 각 실행 값이 15개의 다른 실행의 평균인 15개의 실행을 실행하는 경우 이것이 더 정규 분포를 따르고 더 현실적인 신뢰 구간이 되는 경향이 있음을 의미합니다. 그것이 의미가 없다면 무시하고 백테스팅 결과와 거래하는 물리적 시스템 사이에는 상관관계가 없다는 것을 기억하십시오. 그것은 단지 도구이자 좋은 것이지만 올바르게 이해하고 사용해야 합니다.
다음과 같은 다른 많은 주제를 고려해야 하며 나중에 다음과 같이 될 수 있습니다.
백테스트 절차
최적화
통계
개연성
변환
실용적인 고려 사항
배포 및 이해
랜덤 스트림 및 합성 데이터
가설 검증
몬테카를로 최적화/메타 트레이더보다 빠름
하지만 그때까지는 이것이 다소 도움이 되었기를 바라며 거래 시스템을 구현할 때 더 나은 백테스팅을 수행하고 더 나은 결과를 얻을 수 있습니다. 질문이 많은 것으로 알고 있습니다.
훌륭한 설명입니다.
감사합니다 Cro2314
다른 백테스트 시스템에 대한 짧은 질문...
Tradestations 소프트웨어가 Metatrader 소프트웨어보다 백테스팅 에 더 낫습니까?
둘 다 경험이 있는 사람이 있습니까?
지금까지 내 결론은 tradestations 백테스트가 메타 트레이더보다 더 발전된 것처럼 보이지만 다른 측면에서 메타 트레이더는 무료이고 tradestation 비용은 $$$라는 것입니다...
그들 사이의 차이점에 대한 피드백은 좋을 것입니다.
나는 몇 가지만 알고 있다
편집***5월 27일. 백테스팅은 시뮬레이터가 아니라 시뮬레이션 실습이라는 점에 주목하는 것이 중요합니다. 잘 작동하는 것으로 보이는 한 시뮬레이터가 이 사이트에 Forex 테스터로 나열되어 있습니다. 백테스터로 사용할 수 있지만 아직 EA에서는 사용할 수 없습니다. 시뮬레이션/백테스팅은 실제로 거래 시스템의 성능에 대한 통계를 제공하여 약점을 분석할 수 있도록 하기 위한 것입니다. 궁극적으로 시간 경과에 따른 자기자본 곡선의 기울기 편차를 줄이려고 합니다. 이것이 사람들이 메타 트레이더 백 테스터를 좋아하지 않는 이유인지 궁금합니다. 시뮬레이터를 찾고 있을지도 모릅니다. 그러나 시각적 성능을 찾고 있다면 전략 테스터 를 실행한 후 차트를 열기만 하면 EA가 어떻게 거래되고 있는지 정확히 볼 수 있습니다. 시스템 검증에 매우 유용합니다.***
나는 실제로 tradestations 백 테스터에 대한 경험이 거의 없습니다. 그래도 몇 가지 장점을 알고 있습니다. Tradestation은 전략 테스터에서 종가를 사용하는 대신 일중(틱) 구매를 할 수 있지만(최신 버전에서 발생) 메타 트레이더는 종가를 사용합니다. 매우 빠르게 거래하고 가끔씩 나타나는 2~3개의 막대 이동을 잡으려고 하면 전략에 따라 시스템에 중대한 결과를 초래할 수 있습니다. 그러나 종가를 기다리는 것과 같은 많은 기본 전략에도 위배됩니다. 다른 차이점은 물론 프로그래밍에 사용할 수 있는 언어가 서로 다르며 변수 합산과 같은 일부 일반적인 작업은 tradestation에서 더 쉬운 것으로 보입니다. Finnaly 나는 tradestation에서 제한되지 않는 metatrader 내에 몇 가지 메모리 제한이 있다고 들었지만 이에 대해 실행하지 않았습니다. 메타 트레이더에서와 같이 EA가 화면에 표시기를 로드하지 못하도록 하는 것과 같은 시스템 변수에 대한 제한이 무엇인지 모르겠습니다. 또한 tradestation이 제공하는 미리 작성된 통계는 백테스트 결과에 대해 더 강력합니다. 트레이드스테이션 def. 몇 가지 장점이 있지만 백 테스터는 완전히 자동화된 시스템을 실행하는 경우 소프트웨어와 동일하게 반응해야 합니다. 그런 경우 자동 거래에 사용하는 것과 동일한 소프트웨어에서 백테스팅을 제안합니다. 그렇지 않으면 놀랄 수 있습니다.
무엇보다도 나는 그것이 더 잘 프로그래밍되어 있다고 생각하지만 많은 사람들과 달리 메타트레이더 백테스터는 올바르게 사용하고 코드를 실행하는 방법을 이해하고 있을 경우 예상대로 정확하게 작동한다고 믿습니다. 시뮬레이션 소프트웨어의 경우 항상 그러하므로 단점으로 보지는 않습니다. 사용하는 소프트웨어는 일반적으로 소프트웨어가 제공하는 데이터를 해석하는 방법만큼 중요하지 않습니다. 지금은 그냥 욕을 하는 거니까 여기까지만 하겠습니다.
그건 그렇고 Felix에게 칭찬을 주셔서 감사합니다. 크게 감사했습니다.
내 백테스터 가 매우 느립니다 .. help
때로는 너무 빠르기도 하고 때로는 너무 느리게 진행되기도 합니다. 이유를 모르겠습니다. 로그에서 1.5GB 파일을 발견하고 삭제했지만 여전히 느립니다. 프로그램을 백테스트하는 더 좋은 방법입니까? 저는 Metatrader를 사용하고 있으며 종종 20%의 모델링 품질만 가지고 있습니다.