거래 전략의 백테스트에서 가장 중요한 것은? 속도? 성능 지표?
답은 정확성입니다! 백테스트의 목적은 전략의 논리와 실현 가능성을 확인하는 것입니다. 이것은 백테스트 자체의 의미이기도합니다. 다른 것들은 부차적입니다. 전략의 역사적 데이터를 진정으로 반영하는 백테스트 결과는 참조 값이 있습니다. 겉으로 보기에는 완벽한 백테스트 곡선은 좋은 이야기를 말할 수 있지만 실제 시장 환경에서 수행 할 수 없습니다.
정확한 백테스팅을 달성하는 방법은 많은 양적 트레이더들이 관심을 갖는 문제입니다. 우리가 먼저 알아내야 할 것은 트레이딩에 어떤 데이터가 있는지입니다. 데이터의 품질이 백테스트의 품질을 크게 결정했기 때문입니다.
이러한 데이터 유형에 대해 대부분의 사람들은 개시 가격, 최고 가격, 최저 가격, 폐쇄 가격 및 K-라인 차트에서 거래 부피를 생각할 수 있습니다. 더 나은 구별을 위해 우리는 이러한 데이터를 총체적으로 바 데이터로 지칭합니다.
사실, 교환에서 전송 된 데이터는 이러한 바 데이터를 포함하지 않습니다, 단지 틱 데이터입니다. 그렇다면 틱 데이터는 무엇입니까? 당신은 교환의 데이터를 강으로 이미지화 할 수 있습니다. 이 강은 각 주문에 대한 자세한 데이터를 포함합니다. 틱 데이터는 데이터 스트림의 슬라이스입니다. 주파수는 초당 2 슬라이스입니다. 그것은 특정 시장 상황의 재생입니다.
그 다음, 바 데이터는 틱 데이터에 기초하여 시간 기간에 따라 나뉘어진다. 1분 바 데이터는 1분 이내에 틱 데이터로 구성되며, 5분 바 데이터는 5분 이내에 틱 데이터로 구성된다. 다양한 분차, 시간 차트, 일차트 등을 형성한다. 1분 K 선은 하나의 바 데이터만 있지만 120개의 틱 데이터를 포함할 수 있다. 따라서 백테스트의 역사적 데이터는: 바 데이터와 틱 데이터로 나눌 수 있으며, 틱 데이터의 데이터 양은 같은 사이클의 바 데이터의 양보다 훨씬 크다.
시장의 대부분의 양적 거래 소프트웨어는 모두 바 데이터의 백테스팅을 지원합니다. 데이터의 양이 작기 때문에 백테스팅 엔진의 작업 부하가 크게 단순화됩니다. 따라서 이러한 백테스팅은 일반적으로 매우 빠르며 10 년의 데이터가 몇 초 이내에 백테스팅 될 수 있습니다. 백테스팅이 동시에 수십 가지 선물 품종을 수행 할 때에도 1 분을 초과하지 않습니다. 그러나 바 데이터 백테스팅에는 많은 문제가 있습니다.
대부분의 거래자는 일일 한계 가격으로 구매 또는 판매하는 것이 어렵다는 것을 알고 있지만 백테스트 환경에서 거래 할 수 있습니다. 일부 새로운 거래자는 양적 거래에 참여합니다. 전략에서이 상황을 필터링하지 않으면 백테스트의 결과는 실제 시장 결과와 일치하지 않습니다.
가격이 갑자기 가장 낮은 한계에서 가장 높은 한계 가격으로 점프하거나 가격 격차가 나타나면 큰 사이클 K-라인 차트에서 큰 긍정적 인 K 라인으로 표시되지만 전체 시간 동안 거래가 이루어지지 않습니다. 실시간 가격 거래 전략을 설계하는 경우 백테스트의 바 데이터가 거래 될 수 있습니다.
예를 들어: 현재의 K 라인은 가격 5000 주위를 떠돌고 있었고, 갑자기 시장 폐쇄 근처에서 5100으로 상승하고, 중간에 대기 주문과 거래가 거의 없습니다. 만약 당신의 전략이 5050의 이 가격에 포지션을 열는 것이라면, 바 데이터 백테스트에서 거래 될 수 있으며, 이 현상은 매우 일반적입니다.
많은 양적 트레이더들이 이러한 핏을 경험했다고 생각합니다. 그리고 대부분의 45도 각 배트테스트 곡선은 이것으로부터 나온 것입니다. 모든 사람들의 이해를 돕기 위해, 다른 예를 들어보겠습니다. 우리는 한 K 선이 4가지 가격을 가지고 있다는 것을 알고 있습니다. 만약 1분 양수 k 선이라면, 이 K 선의 형성은 다음과 같습니다. 시작 가격 >>> 최저 가격 >> 최상 가격 >>> 종료 가격.
그러나 큰 사이클 k선은 그렇게 간단하지 않을 것입니다. 그것은 새로운 최고, 다음 새로운 낮은, 그리고 닫을 수 있습니다; 그것은 또한 새로운 낮은, 다음 새로운 높은, 그리고 닫을 수 있습니다; 또는 심지어 회전과 회전 후에, 그것은 새로운 낮은, 그리고 새로운 높은, 그리고 새로운 낮은, 그리고 닫을 수 있습니다; 하지만 그것은 단지 상부와 하부 그림자를 가진 K선으로 나타납니다. 그것이 형성 된 중간에 많은 가능성이 있습니다.
만약 K 라인이 이렇게 나타난다면: 오픈 가격 4950, 최저 가격 4900, 최고 가격 5100, 종료 가격 5050, 정상적인 양성 K 라인. 당신의 전략은 다음과 같습니다.
좋아요, 백테스트를 시작합시다.
Opening price 4950
The price exceeds the previous high 5000
Opening long position
Earned 1% when the market closed
하지만 실제 상황은 이렇게 될 수 있습니다.
Opening price 4950
The price exceeds the previous high 5000
Opening long position
Soon the price begins to fall
Continue to fall to 4949
Stop loss signal triggers stop loss 1%
Price rises to 5100
Market close at 5050
위의 예에서 볼 수 있듯이, 같은 전략, 같은 데이터, 두 가지 매우 다른 결과가 있었습니다. 이유는 여전히 데이터의 차이 때문입니다. 바 레벨 백테스트에서, 매일 K-라인 백테스트를 사용한다면, 이러한 K-라인 백테스트가 어떻게 형성되는지 알 수 없습니다. 시간적인 K-라인 백테스트를 사용한다면, 이러한 시간적인 k-라인 백테스트가 형성되는지 알 수 없습니다. 간단히 말해서, 바 데이터 테스트는 약합니다!
트릭 데이터를 백테스트 및 분석에 사용할 수 있다면 큰 이점이 있다는 데는 의심의 여지가 없습니다. 그러나 시장에서 트릭 데이터 백테스트 및 분석에 대한 양적 거래 플랫폼이없는 것 같습니다. 예를 들어 MT4는 인터폴레이션 시뮬레이션 데이터를 사용합니다. 이것은 데이터의 변화를 시뮬레이션합니다. 실제 트릭 데이터는 아닙니다.
물론, 틱 레벨 백테스팅을 할 수 있다고 주장하는 소프트웨어가 있습니다. 하지만 이 소프트웨어는 백테스팅 엔진을 설계할 때 치명적인 실수를 저질렀습니다. 즉:
실제 거래 환경에서, 우리가 배치 한 주문은 거래소의 Tick 데이터 스트림에 일치한다는 것을 알고 있습니다. 거래소의 일치 규칙은: 가격 우선 순위, 시간 우선 순위입니다. 이 시점에서 주문 깊이가 너무 두껍지 않으면, 우리가 보낸 5000 가격 구매 주문은 수동적으로 거래 될 가능성이 있습니다.
따라서 FMZ Quant 플랫폼 (fmz.com) 틱 레벨 백테스팅 엔진이 탄생, 이 백테스팅 엔진은 틱 데이터의 가격 우선 순위에 기반하여 주문을 맞추는 것뿐만 아니라. 같은 가격 우선 순위에 따라, 현재 미뤄진 주문이 수동 거래의 조건에 도달했는지 여부를 결정하기 위해 미뤄진 주문의 수를 계산하여 실제 시뮬레이션 환경을 달성합니다. 예를 들어 다음과 같이 생각해 봅시다:
첫 번째 틱은: 판매: 101 부: 80 구매: 100 부: 30
두 번째 틱은 판매: 101 부: 60 구매: 100 부: 50
세 번째 틱은: 판매: 101 부: 80 구매: 100 부: 30
4번째 틱은 판매: 101 부: 80 구매: 100 부: 10
첫 번째 틱의 경우, 구매 가격은 100이며, 미뤄진 주문의 양은 30 롯입니다. 이 시점에서 구매 신호가 나오고, 100 가격으로 20 롯을 구매하십시오. 두 번째 틱은 생성되며, 구매 가격은 100이며, 미뤄진 주문 양은 50입니다. 미뤄진 주문의 양은 20 롯입니다. 세 번째 틱은 생성되며, 구매 가격은 100이며, 미뤄진 주문의 양은 30 롯입니다. 이것은 20 롯이 실행되거나 취소되었음을 증명합니다. 우리는 거래를 닫고 있습니다. 네 번째 틱은 생산되었으며, 구매 가격은 100이었고, 미뤄진 주문의 양은 10 롯이었습니다. 그것은 큰 판매자였고, 우리의 모든 구매 주문이 한 번에 실행되었습니다.
위의 예제를 통해, 우리는 틱 데이터에서 가격이 변하지 않았다는 전제 하에서, 대기 주문 금액의 변화를 통해 대기 주문의 수동 거래가 있는지 여부를 계산할 수 있음을 알 수 있습니다. 동일한 가격, 시간 첫 접근 방식을 사용. 이러한 종류의 백테스팅 엔진은 거의 실제 거래 환경을 바이오닉화하여 거래와 가짜 거래의
FMZ 퀀트 플랫폼에서 바와 틱 레벨 백테스팅은 동시에 존재한다. 각 양적 트레이더는 자신의 거래 전략에 따라 다른 백테스팅 엔진을 사용할 수 있으며 어떤 종류의 백테스팅을 사용하든 상관없이 엔진은 전략 코드를 수정할 필요가 없으며 각 유형의 백테스팅이 원활하게 전환 될 수 있습니다.
낮은 주파수 전략 백테스팅은 복잡한 매칭 엔진이 필요하지 않습니다. 이러한 전략의 거래 수가 작기 때문에 미끄러짐의 비용은 전략 자체에 큰 영향을 미치지 않습니다. 일반적으로 백테스팅 중에 몇 가지 미끄러짐 포인트가 추가되어야합니다. 바 레벨 백테스팅을 사용하면 충분합니다. 실제로 주의가 필요한 것은 과잉 적합성 문제입니다.
일부 내일 거래 또는 하루 동안 포지션을 개설하는 전략은 필요한 경우 백테스팅 구성 매개 변수 페이지에서 데이터의 세분성을 조정할 수 있습니다. 예를 들어 1 시간 주기에 백테스팅을 조정할 수 있으며, 더 세밀한 15 분 데이터로 조정할 수 있습니다. 또한 백테스팅의 정확성을 향상시키기 위해 필요한 경우 틱 레벨 데이터를 사용할 수 있습니다.
높은 주파수 거래는 거래의 수가 충분히 높기 때문에 단일 품종은 하루에 수십 개 또는 수백 번 거래 할 수 있으므로 매칭 엔진이 합리적인 한 대의 법칙의 영향으로 백테스팅의 결과는 기본적으로 신뢰할 수 있습니다. 일반적으로 과도한 적합성에 문제가 없습니다. 그러나 높은 주파수 거래의 수 때문에 백테스트 엔진에 대한 수요가 매우 높습니다.
높은 주파수 거래 백테스트에서 거래 주파수가 높을수록 지점 보유 기간이 짧고 단일 거래의 평균 이익이 낮습니다. 이 시점에서 백테스트 엔진의 설계가 불합리하거나 일치하는 주문 방법이 실제 거래 환경과 비교하는 것이 동일하지 않으면
우리는 당신에게 Tick 레벨 백테스트가 C++ (Python 및 JavaScript도 지원) 로 작성된 고주파 시장 제작 전략으로 작동하는 방법을 보여줍니다. 당신은 아래 링크를 클릭하여 전략을 완료하고 온라인 백테스트를 수행 할 수 있습니다. 다음 사진은 로그 정보에서 가져옵니다. 우리는 2019-07-12 14:59에 2231의 가격으로 1 롯을 구입하고 2232에 판매 한 것을 참고하십시오.
첫 번째 틱은: 판매: 2232 부: 409 구매: 2231 부: 73
두 번째 틱은 판매: 2232 부: 351 구매: 2231 부: 84
세 번째 틱은: 판매: 2232 부: 369 구매: 2231 부: 67
이 시범 전략은 가격표시 수익을 올릴 때 포지션을 닫는 것입니다. 포지션을 열면, 우리는 긴 포지션을 닫기 위해 2232에 닫기 포지션 주문을 보내고, 짧은 포지션을 닫기 위해 2231에 닫습니다. 전통적인 바 레벨 백테스트에 따르면,이 미뤄진 오더의 가격은 닫을 수 없습니다. 그러나 플랫폼의 틱 레벨 백테스팅 엔진은 시장에서 주문 금액의 변화를 지속적으로 계산합니다. 세 번째 틱 데이터가 생성되면 거래소의 교환 순서 행진 메커니즘에 따라 가격이 동일하다면, 시간 첫 번째 규칙에 따라 우리의 닫기 긴 포지션 작업이 거래됩니다.
이 링크를 클릭하세요 (https://www.fmz.com/strategy/162372) 파라미터를 구성 할 필요 없이 전체 전략을 복사
참고: 현재 우리는 중국 국내 상품 선물과 암호화폐 거래소 OKEX의 틱 레벨 데이터의 전체 범위를 지원합니다. 앞으로 더 많은 거래소를 지원할 것입니다.
위는 FMZ 퀀트 플랫폼 분석 및 모든 수준의 백테스팅의 실제 전투입니다. 뿐만 아니라, 전문 거래자와 기관 사용자를 지원하는 것 외에도 아직 시작하지 않은 초보자에게도 매우 우호적입니다. 시각 언어는 코드를 작성하지 않고도 구현 할 수 있습니다. 또한, 내 언어는 10 문장으로 해결 될 수 있습니다.
전략에 대해 생각하고, 통계를 만들고, 분석... 거래는 매우 어려웠습니다. 당신이 낮은 주파수 CTA, 내일 거래, 높은 주파수 거래이든 FMZ 퀀텀 양적 거래 플랫폼은 완벽하게 원활하게 지원 될 수 있습니다. 우리는 장난감 기능을 만들지 않습니다. 티크 수준에서 정확한 역사적 백테스팅을 기반으로, 우리는 최적의 투자 포트폴리오를 구축하는 데 도움이되는 여러 가지 품종, 여러 전략 및 여러 주기의 모든 조합을 테스트 할 수 있습니다.