백테스팅 시스템에서 디버깅 전략을 위해, 일반적으로Log()
함수가 사용할 수 있기 때문에 DEBUG는 매우 비효율적이고 경험이 적은 초보자 프로그램 테스트자에게는 어렵습니다.JavaScript
언어,Chrome
브라우저가 더 잘 지원하여 백테스팅 중에 브레이크포인트 디버깅, 싱글 스테이프 디버깅, 변수 값 모니터링, 표현식 모니터링 등을 구현할 수 있습니다.Javascript
FMZ 플랫폼에서 언어 전략 백테스팅. 이 디버깅 방법은 단지 지원되는 것을 참고하십시오.JavaScript
FMZ 플랫폼에서 언어 전략.
debugger
FMZ 플랫폼에서 명령칩을 삽입합니다debugger
FMZ에서 자바스크립트 언어의 전략 코드에 명령하면 백테스팅 중에 프로그램 실행이 중단됩니다.
우리는 다음 테스트 전략 코드를 사용합니다.
/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
function main() {
var n = 1
while (true) {
var t = exchange.GetTicker()
debugger
var r = exchange.GetRecords()
if (n == 1) {
// When placing a purchase order, if there is an error here, an error will be reported, and null will be returned, and GetTicker will return data t with Buy attribute only, and the attribute name is case-sensitive without buy attribute
var id = exchange.Buy(t.buy, 0.1)
var orderBuy = exchange.GetOrder(id)
}
Sleep(500)
}
}
백테스팅에서 코드를 구성합니다.
/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
여기서 우리는 우리가 백테스팅을 위해 추가한 거래소가 바이낸스 스팟이라는 것을 볼 수 있습니다.
전략 코드를 계속 살펴보면debugger
위탁var t = exchange.GetTicker()
이 문장은 여기서 브레이크포인트에 도달하는 것과 같고 이 위치에서 프로그램 실행이 멈출 것입니다.debugger
s는 전략 코드에서 사용할 수 있지만 그렇게하는 것이 권장되지 않습니다. 특정 위치에 단점만 사용하십시오. 그리고 그 다음의 단점은 브라우저의 DevTools 디버깅 기능에서 설정 할 수 있습니다.
우리는 문을 열어야 합니다DevTools
백테스트를 실행하기 전에 크롬 브라우저의debugger
전략 코드에서 정하는 바가 적용됩니다. 그렇지 않으면debugger
무시 될 것이고, 백테스팅의 전략 프로그램은 중단되거나 중단 될 수 없습니다.DevTools
전략을 역 테스트하기 위해, 전략 프로그램은 첫 번째 설정에서 중단됩니다debugger
위치, 그리고debugger
또한 전략 코드 전체 범위에서 설정할 수 있습니다.
우리는 두 가지 방법으로DevTools
크롬 브라우저의 도구:
DevTools 인터페이스를 표시하기 위해
또한 단축키를 사용하여DevTools
누르면Command+Option+I (Mac)
또는Control+Shift+I (Windows, Linux)
.
열고 나면DevTools
그림과 같이:
위의 테스트를 거쳐, 우리가 버튼을 클릭 할 때 debugger
코드에 명령어가 설정되어 있습니다. 백테스트는 다음과 같이 고정되어있는 것 같습니다.
그것은 전략에 의해 중단 표시된 위치에서 볼 수 있습니다debugger
, 전체 프로그램은 n의 값이 1이고 t의 값이 함수로 반환되는 시장 데이터를 실행합니다.GetTicker
당신은 위의 그림의 빨간색 상자에서 특정 변수 값을 볼 수 있습니다. 그래서 전략 실행 때 각 변수의 값을 쉽게 관찰 할 수 있습니다.
우리는 코드 왼쪽에 있는 줄 번호를 클릭해서 정지점을 추가할 수 있습니다.
스크립트 실행을 재개하기 위해 스크립트 실행을 재개하기 위해
또한 실행할 수 있는 몇 가지 버튼이 있습니다. 예를 들어 다음 함수를 건너뛰고 다음 함수 호출로 이동하고, 현재 함수 호출에서 종료하고, 단일 단계를 실행하고, 모든 중단점을 무시합니다.
이 시점에서 실행을 계속하기 위해
main:17:31 - TypeError: Cannot convert "undefined" to double
구조 기여 이름의 대문자 민감하지 않은 것은 초보자가 저지르는 일반적인 실수입니다.
var id = exchange.Buy(t.buy, 0.1) // When placing a purchase order, if there is an error here, an error will be reported, and null will be returned, and GetTicker will return data t with Buy attribute only, and the attribute name is case-sensitive without buy attribute
이 값은 교환에 전달됩니다. 구매 함수는 정의되지 않은 변수입니다. 이 변수는 프로그램 예외를 발생시키고 백테스트를 끝냅니다.
프로그램이 브레이크포인트 위치에서 멈출 때, 이 코드 라인은 실행되지 않습니다. 우리는
거래소로 가세요. 구매 기능 전화.
여기서 우리는 가격이 정의되지 않은 변수라는 것을 볼 수 있습니다.
위의 접근법을 사용하면 프로그램 버그를 단계적으로 알아내는 것이 쉽습니다. 많은 초보자들은 종종 실수를합니다. 예를 들어, 배열의 인덱스가 제한을 벗어나 액세스되고, 정의되지 않은 변수가 참조되고, 표현식이 잘못 작성되어 있습니다. 이 모든 것은 프로그램을 DEBUG하기 쉽습니다.