이전 기사에서 우리는 이른바 프로그래밍 및 양적 거래는 일련의 계산, 판단 및 트리거를 통해 거래소에서 얻은 데이터를 기반으로 한 스크립트 프로그램으로 거래에 몇 가지 작업을 수행하고 거래 계좌를 운영하는 것을 배웠습니다. 데이터 획득 및 운영 계좌의 이러한 작업은 모두 거래소 API 인터페이스를 통해 수행됩니다. 간단히 말해서 스크립트 프로그램은 거래소와 상호 작용합니다. 상호 작용이기 때문에 정상적인 상호 작용과 비정상적인 상호 작용이 있어야합니다. 비정상적인 상호 작용이 발생하면 인터페이스는 예외 메시지를 반환합니다.
물론, 시장에 있는 프로그래밍 및 양적 거래 시스템이나 우리 스스로 개발한 프로그램에는 모든 종류의 오류 요청 및 오류 메시지가 있습니다. 이러한 오류 메시지는 교환 API 인터페이스에서 보고되는 오류 메시지로 제한되지 않습니다. 또한 프로그램 실행 시간 예외 오류, 구성 오류, 프로그램 문법 오류 등이 있습니다.
FMZ 양적 거래 플랫폼의 오류 메시지는 또한 대략 몇 가지 범주에 속합니다:
전략 문법 오류 이 유형의 오류는 초보자가 프로그래밍에 익숙하지 않기 때문에 가장 흔하며 학습 및 테스트 단계에서 코드 작성에서 문법 오류가 발생합니다. 예를 들어:
코드는 괄호와 같은 문자를 놓치고 있습니다. 이러한 오류는 일반적으로 전략 편집 페이지에서 볼 수 있으며 전략은 실행할 수 없습니다 (실수는 아래 그림과 같이 실행 시간에 직접보고됩니다).
그래서 전략을 작성한 후, 플랫폼 전략 편집 페이지에서 빨간색 XX가 있는지 확인하기 위해 습관적으로 살펴보세요.
전략 프로그램 BUG로 인한 실행 시간 프로그램 예외 이 프로그램에는 오류가 있습니다. 이 프로그램이 실행될 때 예외를 트리거하면 이 프로그램이 비정상적으로 멈추고 이러한 오류 메시지를 표시하게 됩니다.
이러한 오류는 프로그램을 비정상적으로 만들 것이고 프로그램이 실행되는 것을 멈추게 할 것입니다.
잘못된 구성 및 설정으로 인한 오류
FMZ 플랫폼에서 거래 쌍은X_Y
, 여기서 X는 거래 통화의 이름이고 Y는 denomined 통화의 이름 (forex 통화 기반 계약 거래 쌍의 denominated 통화는 일반적으로 USD로 표현됩니다. 이전 기사에서 설명했듯이)BTC_USDT
, 만약 제가 거래 쌍을 무작위로 작성한다면,BTC-USDT
.
FMZ 플랫폼 백테스팅 시스템에서 오류가 보고되었습니다.
또한, 초보자들이 종종 겪는 실수:
이 유형의 오류는 FMZ 플랫폼 계정의 암호 변경으로 인해 발생하여API KEY
구성된 교환 객체 (사용자의 API 키는 브라우저에서 암호화 된 후 FMZ 플랫폼에서 구성됩니다) 에서 전략이 시작되지 않으므로 오류가 보고됩니다.
인터페이스 호출에서 오류가 보고되었습니다
인터페이스 호출 오류는 종종 전략을 실행 할 때 발생합니다. 이전 기사에서 우리는 FMZ 플랫폼의 인터페이스가 다음과 같이 나뉘어 있음을 배웠습니다.네트워크 요청을 생성하는 인터페이스그리고네트워크 요청을 생성하지 않는 인터페이스. 인터페이스 오류는 전략 프로그램이 중지되는 것을 유발하지 않습니다. 일반적으로 인터페이스 호출 예외로 인해 잘못된 데이터가 반환됩니다. 전략은 오류 관용을 일으키지 않으며 잘못된 데이터로 인한 프로그램 예외 오류는 프로그램을 중지시킵니다. (전기 기사에서 언급 된 오류 관용의 개념).
네트워크 요청을 생성하는 몇 가지 인터페이스 오류 메시지는 다음과 같습니다.
네트워크 타임아웃
초보자가 자주 접하는 오류 메시지 중 하나는 국내 네트워크 장비 (자기 컴퓨터 또는 국내 서버) 를 사용하는 것입니다. 대부분의 교환이 차단되어 있기 때문에 국내 네트워크의 대부분의 교환은 액세스 할 수 없으며 액세스 인터페이스는 타임 아웃을보고합니다.
HTTP 429 오류
고전적인 오류 메시지 중 하나는 교환 인터페이스가 너무 자주 호출되어 교환의 주파수 한계를 초과한다는 것입니다.
어떤 초보자는 제가 신청하고 싶다고 말할 수도 있습니다.API KEY
더 많은 교환을 위해 또는 더 많은 교환 계정을 신청합니다. 우리는 교환에 의해 인터페이스 액세스 제한의 빈도가 일반적으로 IP 주소를 기반으로한다는 것을 알아야합니다. 간단히 말해서, IP 주소로 전송된 모든 요청이이이 IP 주소에서 계산되는 한, 교환 서버는 요청이 제한을 초과하면 액세스를 거부합니다.
교환 인터페이스의 업무에 대한 오류 보고
위 언급 된 타임 아웃 및 429은 네트워크 오류입니다. 거래소 인터페이스의 비즈니스에 문제가있는 경우 오류가 보고됩니다. 예를 들어, 현금 시장 가격을 얻고 싶지만 존재하지 않는 거래 쌍을 설정하는 경우. FMZ 플랫폼의 디버깅 도구에서 테스트했습니다. 디버깅 도구는 매우 편리한 테스트 도구이며 함수 호출 및 데이터 획득의 실제 봇 테스트에 매우 적합합니다.
디버깅 툴 실행 결과, 디버깅 툴 실행과 실제 봇 실행 사이에 차이가 없습니다.
Huobi error GetTicker: Invalid ticker: {"Info":{"err-code":"invalid-parameter","err-msg":"invalid symbol","status":"error","ts":1620872079355},"High":0,"Low":0,"Sell":0,"Buy":0,"Last":0,"Volume":0,"OpenInterest":0,"Time":0}
여기서 오류 메시지는 거래 쌍이 유효하지 않다는 것을 의미합니다 (여기 보이는 것처럼)"err-msg":"invalid symbol"
) 의 내용입니다.
예를 들어, 일부 거래소가 소수점을 가진 레버리지 값을 지원하지 않을 때 레버리지를 설정하는 것과 같은 비즈니스 관련 오류가 많습니다. 이 시점에서 레버리지 값이 소수점을 갖는 경우 인터페이스 호출에서도 오류가 발생합니다.
네트워크 요청이 생성되지 않는 인터페이스 호출을 리스트
세트 퓨처스 계약 코드 일부 인터페이스는 시스템에 일부 글로벌 변수를 설정하고 네트워크 요청을 생성하지 않습니다. 예를 들어:
하지만, 만약 매개 변수가 잘못 전달되거나 긁힌다면, 오류가 보고됩니다.
하지만 오류의 종류에 관계없이, 표시된 오류 메시지는 문제를 찾는 핵심 정보이며, 문제는 일반적으로 오류 메시지에서 볼 수 있습니다. 오류 메시지를 번역하고 핵심 정보를 추출하기 위해 번역 도구를 사용할 수 있습니다. 예를 들어,"err-msg":"invalid symbol"
위 예제에서, the translation is:
백테스팅 시스템은 양적 도구의 중점이기도 하다. 백테스팅 시스템은 전략 프로토타입을 편리하게 테스트할 수 있으며 예비 테스트 전략의 잠재적 버그와 논리적 문제를 해결할 수 있다. 백테스팅 시스템은 합리적으로 볼 필요가 있다. 백테스팅 시스템은 어느 정도 전략의 문제를 반영할 수 있다.
다음은 FMZ 플랫폼에서 FMZ가 지원하는 다른 전략 언어의 수준에서 백테스팅 시스템의 간략한 설명입니다. (백테스팅 시스템의 일부 소개는 이전 기사에서 언급되었습니다)
자바스크립트
브라우저에서 백테스팅은 네이티브 하드웨어 리소스를 사용합니다.
파이썬
닷커에서 백테스팅을 할 때, 어떤 닷커에 할당할지 선택할 수 있습니다. FMZ 플랫폼에서 공개된 닷커의 큰 부하를 고려할 때, 로컬 닷커를 백테스팅에 사용하는 것이 좋습니다.
C++
스크립트 언어와 달리 C++ 전략은 컴파일되고 실행되어야 합니다. C++ 언어 전략은 먼저 FMZ 플랫폼 (서버) 에서 컴파일됩니다 (코드에 문제가 있으면 컴파일이 통과되지 않을 수 있으며 오류 메시지가 직접 팝업됩니다). 컴파일이 통과되면 FMZ 플랫폼 (서버) 에서 백테스트됩니다.
MyLanguage
기본 구현은 자바스크립트이며, 백테스팅은 브라우저에서도 수행됩니다.
시각화
기본 구현은 자바스크립트이며, 백테스팅은 브라우저에서도 수행됩니다.
FMZ 퀀트 트레이딩 플랫폼의 백테스팅 시스템은 두 개의 백테스팅 모드로 나뉘어 있습니다 (전략 언어에 관계없이 이것은 백테스팅 설정이며 모든 언어의 전략 백테스팅은 동일합니다).
A bar in the K-line opens high and closes low, which constitutes a price framework, within which the prices are all in this price frame, so as long as the generated price opens high and closes low in this K-line frame within the range, the simulated price is reasonable.
이건 이런 시뮬레이션과 같습니다.https://www.fmz.com물론, 실제 백테스팅 시스템이 이 시뮬레이션을 구현할 때, 상황은 그림보다 약간 복잡합니다. 이 원칙을 알고, 시뮬레이션 수준의 백테스팅의 단점을 주목하는 것이 중요합니다. 시뮬레이션 수준의 백테스팅은 매우 빠르지만 (시뮬레이션으로 생성되는 가격은 실제적인 초별 초별 가격이 아니기 때문에).시뮬레이션된 틱 움직임 추세, 전략은 매우 잘 수행 할 것입니다 (하지만 실제로, 가격은이 K-라인 바의 틀 내에 있지만, 이러한 추세가 아닐 수 있습니다). 여기 시뮬레이션된 틱 데이터를 생성하는 데 사용되는 K-라인은 아래 K-라인이라고 하며, 이 K-라인의 기간은하위 K-라인 기간, 이는 전략 설정 페이지에 표시된 바와 같이 설정됩니다:
여기서 1분이라는 설정은 1분이라는 기간의 K선 데이터를 시뮬레이션 틱을 생성하는 데이터 소스로 사용한다는 것을 의미합니다.
또 다른 점은 고주파 전략의 경우 시뮬레이션 수준의 백테스팅을 사용하는 것이 적절하지 않다는 것입니다. 그러나 트렌드 전략의 경우 시뮬레이션 수준의 백테스팅을 사용하는 것이 전략의 성능을 어느 정도 반영 할 수 있습니다.
FMZ 양자 거래 플랫폼 백테스팅 시스템의 데이터 소스는 어디에 있습니까? 백테스팅 시스템은 FMZ 플랫폼의 데이터 센터의 데이터를 기본으로 사용합니다. FMZ 플랫폼의 데이터 센터는 각 거래소의 각 화폐의 세트 시장 데이터를 자동으로 수집하고 플랫폼의 백테스팅 시스템에 제공합니다.
또한 FMZ API 문서에 사용자 지정 데이터 소스에 대한 몇 가지 메모가 있습니다:https://www.fmz.com/api#custom-data-source
프로그램 및 양적 거래를 할 수 없습니다학습, 테스트, 그리고생각- 네 문제들에 대해 생각하는 것은 헛되이 생각할 수 없으며, 그것은 비효율적입니다. 문제를 해결하고 문제를 생각하는 가장 효과적인 방법은정보를 찾아그럼한번 해봐, 생각하고 분석, 문제가 해결되지 않으면 위의 동작을 반복하십시오.
하지만 초보자가 문제에 직면했을 때, 그는 이렇게 생각할 것입니다.
프스~ 전략 프로그래밍, 정량화, 작성하기가 너무 어렵습니다 그걸 오랫동안 봤지만 아직도 놀라서요! 시작하기 전에 포기하고 싶어요! ...
FMZ 플랫폼에서 시작하는 것은 실제로 매우 간단합니다. 첫째, 당신은 정보를 검색하는 데 잘해야합니다. FMZ 양자 거래 플랫폼 전략 광장, 커뮤니티 및 라이브러리에서 많은 정보가 있습니다.
두 번째는 실제 능력이며, 백테스팅 시스템과 디버깅 도구를 사용하여 쉽게 테스트 할 수 있습니다. 이것은 완전한 전략을 테스트하는 것을 의미하지는 않습니다. 사실, FMZ 퀀트 백테스팅 시스템에서 완전히 기본이라면 JavaScript 프로그램의 기초를 배울 수도 있습니다.
이것은 제가 종종 JS를 배우는 튜토리얼 웹사이트입니다.https://www.runoob.com/js/js-loop-for.html, 그것은 JS에 국한되지 않습니다, 모든 종류의 IT 지식은 여기서 질의하고 배울 수 있습니다. 예를 들어, 저는 JS의 정규 표현식을 어떻게 사용하는지 모릅니다. 어떻게 해야 할까요? 물론, 먼저 정보를 검색, 그리고 그것을 시도 ~
저는 이런 예제를 봤습니다.테스트하고 싶고 FMZ 플랫폼의 백테스팅 시스템을 사용하여 테스트하고 배울 수 있습니다.
백테스팅 시스템에서 무작위 교환을 설정합니다
다음 코드를 테스트하세요:
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}
function main() {
var strEmailAddress1 = "13512345678"
Log(strEmailAddress1, " Is it an email address? ", " Answer: ", IsEmail(strEmailAddress1))
var strEmailAddress2 = "123456789@qq.com"
Log(strEmailAddress2, " Is it an email address? ", " Answer: ", IsEmail(strEmailAddress2))
}
봐~ 무슨 학습 도구! 예를 들어, 저는 자바스크립트 언어의 루프 논리를 작성하는 방법을 배우고 싶습니다.
배열 변수의 요소들을 배열에 나타나는 순서로 루프:
function main() {
var arr = [{coinName: "BTC", price: 10000}, {coinName: "LTC", price: 100}, {coinName: "ETH", price: 2000}, {coinName: "ETC", price: 500}]
for (var i = 0 ; i < arr.length ; i++) {
Log(arr[i])
}
}
한 순간에 배울 동기를 느끼십니까? 사실, FMZ에서, 당신은 자바스크립트 튜토리얼을 보면서 백테스팅 시스템에서 자바스크립트의 기초를 배울 수 있습니다. 자바스크립트 문법은 거의 마스터되고, 다음 단계에 들어가면 데이터 테스트를 얻기 위해 교환 인터페이스를 사용해야합니다. 당신은 또한디버깅 도구FMZ 플랫폼의 실제 인터페이스 테스트를 수행하기 위해.
그 다음에는 더 많은 것을 생각해야 합니다. 한 사례에서 추론, 테스트 검증, 비교 분석 등을 해야 합니다. 이것은 학습을 매우 빠르게 시작할 수 있게 합니다.