5.2 수량적 거래 백테스팅을 어떻게 수행합니까?

저자:선함, 2019-05-08 13:08:52, 업데이트:

요약

백테스팅의 중요성과 중요성은 의심의 여지가 없습니다. 양적 백테스팅을 할 때 전략은 가능한 한 실제적이고 가까운 역사적 환경에 배치되어야합니다. 역사적 환경의 일부 세부 사항이 무시되면 전체 양적 백테스팅이 무효일 수 있습니다. 이 기사는 적절한 양적 거래 백테스팅을하는 방법을 설명합니다.

백테스팅은 데이터 재생과 동등합니다. 역사적인 K-라인 데이터를 재생하고 샤프 비율, 최대 리트레이션 비율, 연간 수익률 및 자본 곡선과 같은 실제 시장 거래 규칙을 수행함으로써. 현재 많은 소프트웨어가 이러한 모든 작업을 수행 할 수 있습니다.github.com, 유연하게 사용자 정의 할 수 있습니다.

FMZ 퀀트는 상업적 양적 거래 소프트웨어로서 계산을 더 빨리 정량화하기 위해 포 루프 (투표) 백테스트 프레임을 사용하여 고성능 백테스트 엔진과 함께 제공됩니다. 통일된 백테스팅과 실시간 코드는 백테스팅이 쉽지만 실제 시장에서 어려운 딜레마를 해결했습니다.

FMZ 퀀트 백테스트 인터페이스 소개

  • 1단계

예를 들어 FMZ Quant Thermostat 타이밍 전략을 들자면, FMZ Quant의 공식 웹사이트를 열자 (www.fmz.com). 대시보드, 전략, 전략을 선택, 백테스트를 클릭 하 고 다음 페이지로 이동:

img img

백테스트 구성 인터페이스에서는 실제 필요에 따라 사용자 정의 할 수 있습니다. 예를 들어: 백테스트 기간, K 라인 사이클, 데이터 유형 (시뮬레이션 레벨 데이터 또는 실제 시장 수준의 데이터). 반대로, 시뮬레이션 레벨 데이터 백테스트 속도는 더 빨라지고, 실제 시장 수준의 데이터 백테스트는 더 정확합니다. 또한 백테스트 및 계정의 초기 자금에 대한 수수료도 설정할 수 있습니다.

  • 2단계

mylanguage core 거래 라이브러리를 클릭하십시오 (이 전략은 M 언어로 작성되었기 때문에 다른 프로그래밍 언어를 사용하는 경우이 옵션이 표시되지 않을 수 있습니다.) 우선 거래 라벨을 설정하십시오. FMZ Quant M 언어에는 두 가지 유형의 백테스트 실행 방법이 있습니다. 이들은: 종료 가격 모델 및 최신 가격 모델입니다. 종료 가격 모델은 현재 K 라인이 완료된 후 모델의 실행을 의미하며 거래는 다음 K 라인의 시작에 실행됩니다. 최신 가격 모델은 각 가격 변화에 대한 모델의 실행을 의미하며 거래 신호가 설정되면 즉시 거래됩니다. 아래와 같이:

img img

기본 오픈 롯의 크기는 백테스트 시 개시 및 종료 포지션의 금액을 의미합니다.

실제 거래 가격과 계획된 거래 가격 사이에는 항상 오차가 있을 것입니다. 이 오프셋은 일반적으로 거래자에게 유리한 방향으로 움직이지 않아 거래에서 추가 손실을 초래합니다. 따라서 실제 거래 환경을 시뮬레이션하기 위해 미끄러짐을 추가해야합니다.

  • 단계 3

미래계약을 입력해서 당신이 백테스트하고 싶은 계약의 종류를 입력하세요. 암호화폐를 위해, 우리는 단지 우리가 백테스트하고 싶은 k-라인의 기간을 지정해야 합니다.

img

실제 시장 설정 옵션은 주로 실제 시장 거래에 사용됩니다. 백테스팅 환경에서 기본 설정은 괜찮을 것입니다. 자동 복구 진행가 표시되면 로봇이 실제 시장에서 멈추면 로봇을 다시 시작하면 신호를 재 계산하지 않고 이전 신호 위치를 자동으로 복원합니다. 예약 재시험 횟수는 기본적으로 20로 설정됩니다. 주문을 배치하는 데 실패하면 20 번까지 다시 전송하려고합니다. 네트워크 투표 간격 (밀리초) 란 로봇이 전략 코드를 매번 실행하는 곳입니다.

img

  • 단계 4

스팟 거래 옵션은 주로 암호화폐 거래에 사용되며, 백테스팅을 할 때 기본 설정에서 유지하면 괜찮습니다. 원하는 경우 이러한 설정에서 모든 매개 변수를 지정할 수 있습니다. 또한, 일부 암호화폐 거래소에서는 레버리지 크기와 기타 관련 설정을 설정할 수도 있습니다.

img

전략 역시험

백테스팅을 하기 전에, 당신의 거래 전략을 결정한다. 여기 우리는 테르모스타트 타이밍 전략을 예로 들게 된다. 이 전략은 시장 상태에 따라 트렌드 시장에서 트렌드 전략을 채택하고, 변동적인 시장에서 오시일레이션 전략을 채택한다. 소스 코드는 아래와 같다 (FMZ 퀀트 웹사이트의 전략 광장 페이지에서 다운로드할 수도 있다):

// Calculate CMI indicator to distinguish between Oscillating and trend market
CMI:=ABS(C-REF(C,29))/(HHV(H,30)-LLV(L,30))*100;

// Define key prices
KOD:=(H+L+C)/3;

// In the Oscillating market, the closing price is greater than the key price is suitable for selling market, otherwise it is for buying market
BE:=IFELSE(C>KOD,1,0);
SE:=IFELSE(C<=KOD,1,0);

// Define 10-day ATR indicator
TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR10:=MA(TR,10);

// Define the highest and lowest price 3-day moving average
AVG3HI:=MA(H,3);
AVG3LO:=MA(L,3);

// Calculate the entry price of the Oscillating market
LEP:=IFELSE(C>KOD,O+ATR10*0.5,O+ATR10*0.75);
SEP:=IFELSE(C>KOD,O-ATR10*0.75,O-ATR10*0.5);
LEP1:=MAX(LEP,AVG3LO);
SEP1:=MIN(SEP,AVG3HI);

// Calculate the entry price of the trend market
UPBAND:=MA(C,50)+STD(C,50)*2;
DNBAND:=MA(C,50)-STD(C,50)*2;

// Calculate the quit price of the trend market
MA50:=MA(C,50);

// Oscillating strategy logic
CMI<20&&C>=LEP1,BK;
CMI<20&&C<=SEP1,SK;
CMI<20&&C>=AVG3HI,SP;
CMI<20&&C<=AVG3LO,BP;

// Trend strategy logic
CMI>=20&&C>=UPBAND,BK;
CMI>=20&&C<=DNBAND,SK;
CMI>=20&&C<=MA50,SP;
CMI>=20&&C>=MA50,BP;
AUTOFILTER;

시뮬레이션 백테스트 인터페이스에서 백테스트 설정을 구성한 후, 시작 백테스트 버튼을 클릭하면 백테스트 결과가 몇 초 후에 즉시 표시됩니다. 백테스트 로그에서는 백테스트, 로그 및 거래 총 수를 위해 얼마나 많은 초를 사용했는지 표시합니다. 계정 정보는 전략 백테스트의 최종 결과를 인쇄합니다. 평균 이익과 손실, 위치 이익과 손실, 마진, 수수료 및 추정 수익.

img

상태 표시줄은 거래 다양성, 위치, 위치 가격, 최신 가격, 이전 거래 신호 유형, 가장 높고 낮은 위치 가격, 업데이트 수뿐만 아니라 자본 및 시간 정보를 기록합니다. 또한, 부동 수익 및 손실 라벨에는 계좌의 자세한 기금 곡선이 표시되며 일반적으로 사용되는 성능 지표도 포함됩니다. 수익률, 연간 수익률, 샤프 비율, 연간 변동성 및 최대 리트레이싱 비율, 기본적으로 대다수의 사용자 요구를 충족시킬 수 있습니다.

그 중에서도 가장 중요한 성과 지표는 샤르페 비율이다. 포괄적 인 지수를 구현하는 동안 이익과 위험을 고려하고 있으며, 펀드 제품을 측정하는 중요한 지표입니다. 일반적으로 수익을 창출 할 때마다 얼마나 많은 위험을 감수하는지입니다. 따라서 샤르페 비율 값이 높을수록 좋습니다.

연간 변동성 (annualised volatility), 간단히 말해서, 수치를 연간화하면 짧은 기간 동안의 관측이 1 년 동안 지속될 것으로 가정합니다. 그것은 펀드의 위험의 척도이지만 확실히 전체 위험은 아닙니다. 예를 들어, 전략 A는 더 큰 변동성을 가지고 있지만 상승하는 변동성을 가지고 있으며 이익은 좋습니다; 전략 B는 작은 변동성을 가지고 있지만 꾸준히 움직이고 있습니다. 우리는 전략 B가 전략 A보다 낫다고 말할 수 있습니까? 아래와 같이 전략 A:

img

마지막으로, 로그 정보에는, 거래의 특정 시간, 거래 정보, 오픈 및 클로즈 포지션 유형, 백테스트 엔진 매치 오더 메커니즘, 거래 수 및 인쇄 정보를 포함한 백테스팅 시 각 거래 중개 상황의 상세 기록이 포함됩니다.

img

백테스트 후

많은 시간, 그리고 대부분의 경우, 백테스팅의 결과는 당신이 기대하는 것과는 거리가 멀어질 것입니다. 결국, 장기적이고 안정적이고 수익성있는 전략을 얻는 것은 그렇게 쉽지 않습니다. 시장에 대한 이해 능력을 필요로합니다.

당신의 전략 백테스트 결과가 돈을 잃는 경우, 낙담하지 마십시오. 이것은 실제로 매우 정상입니다. 전략 논리가 코드에 의해 잘못 해석되었는지, 극단적인 매개 변수를 사용하고 있는지, 너무 많은 오픈 포지션 조건을 사용하고 있는지 등을 확인하십시오. 또한 다른 각도에서 거래 전략과 거래 아이디어를 재검토해야합니다.

만약 당신의 전략 백테스트 결과가 매우 좋다면, 투자 곡선은 완벽합니다. 샤르프 비율이 1보다 높습니다. 서두르지 마십시오. 이 경우 대부분의 상황은 미래 기능을 사용하여 가격을 훔치거나, 과도하게 적합하거나, 슬리퍼 가격 추가 등을 사용할 수 있습니다. 이러한 문제를 배제하기 위해 샘플 이외의 데이터와 시뮬레이션 실제 시장 거래를 사용할 수 있습니다.

요약하면

위는 거래 전략 백테스팅의 전체 과정이며, 모든 세부 사항에 대해 구체적이라고 할 수 있습니다. 역사적 데이터 백테스팅은 모든 위험이 알려진 이상적인 환경이라는 점에 유의해야합니다. 따라서 전략의 백테스팅 시간 동안 황소와 곰 시장의 라운드를 통과하는 것이 가장 좋습니다. 일부 생존자 편견을 피하기 위해 거래의 효과적인 수는 100 배 이상이어야합니다.

시장은 항상 변화와 진화의 과정에 있습니다. 역사적인 백테스팅 전략은 미래가 동일할 것이라는 것을 의미하지 않습니다. 그것은 백테스팅 환경에서 가능한 알려진 위험에 대처 할 수있는 전략뿐만 아니라 미래에 알려지지 않은 위험에 대처하는 것입니다. 따라서 전략의 위험 저항성과 보편성을 높이는 것이 매우 필요합니다.

학교 밖 운동

  1. 이 섹션의 전략을 복사하고 뒷 테스트를 시도해보세요.

  2. 이 섹션의 전략을 개선하고 최적화하려고 노력하십시오.


더 많은