대부분의 전략은 봇에서 수행되기 전에 검증을 위해 백테스트가 필요합니다. FMZ는 일부 암호화폐의 스포트, 선물 및 영구 계약을 지원하며 모든 종류의 상품 선물도 지원합니다. 그러나 FMZ 퀀트 플랫폼의 백테스트 메커니즘은 많은 초보자들에게 혼란을 일으킨 일반적인 온바 백테스트와 다릅니다. 이 기사는 몇 가지 일반적인 백테스트 질문에 대해 상세히 설명하고 답변합니다.
위 그림에서 보여진 바와 같이, 백테스트 시작 시간에서 종료 시간까지의 시간은 시간 축으로 간주 될 수 있습니다. 백테스트 동안, 백테스트 시간 포인트는 백테스트를 시작하기 위해 축을 따라 왼쪽에서 오른쪽으로 이동합니다. 한 시간 지점에서, 이 시간 지점 이전 역사 데이터 만 얻을 수 있습니다. 역사 데이터에 따라 전략은 구매 및 판매를 수행하고, 최종적으로 이익과 손실을 형성합니다. 분명히, 백테스트의 시간 포인트의 분포는 분리되어 있으며 분포의 밀도는 백테스트의 정확성을 나타냅니다. 물론, 백테스트 시간 포인트가 밀도가 높을수록 시간이 더 길어질 수 있으므로 실제 백테스트 시스템은 정확성과 효율성 사이에서 선택해야 합니다.
온바르 백테스트 메커니즘은 K 라인을 기반으로 합니다. 즉, 각 K 라인은 백테스트 시간 포인트를 생성합니다. 시간 지점에서 현재 K 라인의 최고, 최저, 오픈 및 클로즈 가격, 거래량 등과 같은 정보를 얻을 수 있으며, 이 시간 지점 이전의 역사 K 라인 정보를 얻을 수 있습니다.
이 메커니즘의 단점은 명백하다: K 라인에서 하나의 거래만 생성될 수 있으며, 가격은 일반적으로 K 라인 클로즈 가격에 기초한다. K 라인은 오픈, 클로즈, 최고 및 최저 가격이라는 네 개의 가격을 얻을 수 있지만, 한 K 라인에서의 가격 변화와 가장 낮은 가격이 먼저 발생하는지 가장 높은 가격이 먼저 발생하는지 등의 정보를 얻을 수 없다. 예를 들어 1 시간 K 라인을 들어보자. 시장 정보는 몇 초마다 봇에서 얻어야 하며, 거래 명령은 K 라인의 종료를 기다리는 대신 봇에서도 발급될 것이다. 온바 백테스트 메커니즘의 장점은 이해하기 쉽고 백테스트 속도가 매우 빠르다는 것이다.
위의 그림은 FMZ 백테스트 설정 인터페이스를 보여줍니다. 백테스트 모드는 시뮬레이션 레벨과 실제 시장 레벨로 나뉘어 있습니다.
틱이란 무엇인가요?
틱 (tick) 은 K-라인 데이터와 달리 특정 시점의 가격이다. K-라인 데이터에 따르면, 우리는 실제로 오픈 가격과 클로즈 가격이 발생했을 때만 알고 있다. 가격이 K-라인 기간에 가장 높은 값에 도달할 때 명확하지 않다. 사실, K-라인 데이터도 틱을 기반으로 생성된다. K-라인 데이터에 따르면, K-라인 기간에 특정 틱의 변화를 시뮬레이션하는 것도 가능하다. 실제 틱은 아니지만, 우리의 백테스트를 더 정확하게 만들 수 있다. 그리고 시뮬레이션에 기반한 K-라인 기간은 백테스트에 사용되는 기간보다 훨씬 짧을 수 있어 정확도가 높다.
시뮬레이션 레벨 백테스트
시뮬레이션 레벨 백테스트를 위해, 당신은 백테스트를 위해 사용되는 K-라인 기간과 하층 K-라인 기간을 선택해야합니다. 예를 들어, 전략이 시간적인 라인 백테스트를 사용하고 하층 K-라인을 5 분으로 설정하면, 5 분 K-라인이 시뮬레이션 한 틱을 기반으로 백테스트 시간 포인트의 간격이 나타납니다. 이는 최근 1 시간 동안 K-라인 폐쇄 가격의 지속적인 변화에 반영됩니다. K-라인에 따라 K-라인에서 틱을 생성하는 메커니즘은 MT4와 유사합니다. 이 게시물에 상세한 지침이 있습니다.https://www.fmz.com/bbs-topic/662
이 메커니즘을 보여주기 위해 간단한 전략을 사용합니다. 전략 코드:
function main() {
while(true){
var records = exchange.GetRecords() //GetRecords can fill the parameters, and obtain K-lines of different periods
var ticker = exchange.GetTicker()
Log('K-line close price: ', records[records.length-1].Close, 'ticker Buy1 Sell1 prices: ', ticker.Buy, ticker.Sell)
//js backtest does not use Sleep, and it will skip to the next tick; Python needs 1 hour of sleep time
}
}
백테스트 결과:
각 K-라인의 오픈 및 클로즈 틱만 고정되고, 시뮬레이션 된 12 틱이 중간에 추가되어 K-라인 한 개에서 14 개의 백테스트 시간 포인트를 형성합니다. 하층 K-라인 기간 5 분으로 하루 백테스트하면 총 24 × 12 × 14 = 4032 시간 포인트가 생성되며, 전통적인 온바르 백테스트는 24 개만 있으므로 정확도가 크게 향상됩니다. 오픈 및 클로즈 포지션 작업도 한 K-라인 기간 내에 완료 할 수 있습니다. 생성 된 중간 틱이 시뮬레이션되지만 많은 영향을 미치지 않습니다. 백테스트에서는 주문 가격이 구매 가격보다 크고 판매 주문 가격이 구매 가격보다 작을 때까지 백테스트가 일치됩니다. 이 방법의 백테스트는 모든 사람의 속도와 정확성을 고려하고 권장됩니다.
실제 시장 수준 역 테스트
실제 시장 수준 백테스트는 실제 틱을 사용하며 각 시간 지점 사이의 가장 짧은 간격은 1초에 불과합니다. 이러한 유형의 백테스트는 초당 변화에 정확하지만 많은 양의 데이터로 인해 백테스트 속도가 느리고 백테스트 시간이 너무 길 수 없습니다. 아래 그림은 실제 틱을 보여줍니다. 실제 시장 수준 백테스트는 전략을 정확하게 검증하는 데 사용할 수 있습니다.
실제 시장 수준의 백테스트와 실제 봇 거래에서도 거래 역사 트레이드를 얻을 수 없다는 것, 실제 깊이 변경, 실제 네트워크 지연 등을 얻을 수 없다는 것 등 명백한 데이터 결함이 있습니다. 그럼에도 불구하고 FMZ의 현재 백테스트 시스템은 비교적 완성되어 있으며 네트워크 오류를 시뮬레이션하는 것과 같은 많은 작은 기능이 있습니다. 이를 통해 전략의 오류 내성을 테스트하고 네트워크 지연을 시뮬레이션하고 시장 아이콘을 그리는 데 사용할 수 있습니다.
왜 몇 개의 거래 쌍과 플랫폼만이 백테스트를 지원합니까?
현재 몇 가지 일반적인 거래 쌍에 대한 데이터만 있습니다. 실제로 전략과 다양성의 관계는 매우 가깝지 않으므로 전략을 확인하는 것이 충분합니다.
BitMEX를 시뮬레이션해서 투자율을 청구할 수 있을까요?
물론, 당신은 로그를 열기 위해 BitMEX 백테스트를 선택할 수 있습니다.
백테스트가 진행되는 곳?
자바스크립트 전략의 백테스트는 브라우저에서 수행되며 파이썬은 FMZ 서버 또는 자체 도커를 선택하여 백테스트를 수행할 수 있습니다.
백테스트 로그가 다운로드될 수 있나요?
물론, 할 수 있습니다. 로그 오른쪽 모서리에 다운로드 버튼이 있습니다.
백테스트는 로컬로 실행될 수 있나요?
FMZ는 파이썬 백테스트 엔진의 소스를 엽니다. 참조:https://www.fmz.com/bbs-topic/1687