개발자 양적 API 문서

저자:작은 꿈, 2017-11-27 09:05:08에서 생성, 2023-07-12 16:47:31로 업데이트

[TOC]

기본 설명

입구

FMZ의 양적 거래 플랫폼은 무엇을 할 수 있습니까?

FMZ (발명자) 양적 거래 플랫폼양자 거래 분야에서 가장 전문적인 양자 커뮤니티입니다. 여기에서 양자 거래 전략을 배우고, 작성하고, 공유하고, 구매하고, 판매할 수 있습니다. 온라인 리모콘을 사용하여 양자 거래를 수행하고, 실행하고, 공개하고, 시각화 할 수 있습니다. 거의 모든 주요 디지털 통화 거래소를 지원합니다.

전체 튜토리오

이 비디오는 이글로드를 통해 찍었습니다.

비디오 튜토리얼

만약 문제가 있다면, 언제든지 게시판에 문의, 토론, 플랫폼에서 작업 신청서를 제출, 전보에 문의 할 수 있습니다.텔레그램@그룹 관리자님, 질문들은 보통 빨리 답변됩니다.

ChatGPT 보조 개발 지원

FMZ 양적 거래 플랫폼은 ChatGPT를 보조 개발 도구로 연결하고, "컨트롤 센터"의 단축키 상자에서 "ChatGPT"를 클릭하여 "ChatGPT"로 이동할 수 있습니다.채팅 GPT 도움말 페이지

어떤 프로그래밍 언어를 통해 내 전략을 구현할 수 있을까?

FMZ 양적 거래 플랫폼 사용 지원JavaScriptTypeScriptPythonC++PINE麦语言Blockly可视化이 모든 것은 매우 중요한 일입니다.

지원TypeScript언어는 전략이 만들어질 때에도JavaScript이 문서는 이 문장의 첫 번째 문장입니다// @ts-check또는 정책 편집 영역의 오른쪽 상단에있는 "TypeScript" 버튼을 클릭하여TypeScript◎ 플랫폼은 자동으로 코드를TypeScript이 사이트는 웹 사이트의 웹 사이트와 웹 사이트의 웹 사이트입니다.

  • 안전의 종류:TypeScript정적 타입 검사 기능을 사용하면 코드를 작성할 때 잠재적인 오류를 발견하고 코드 품질을 향상시킬 수 있습니다.
  • 코드가 자동으로 보완됩니다:TypeScript이 유형의 시스템은 코드를 작성할 때 원하는 속성과 방법을 더 빨리 찾을 수 있도록 해 개발 효율성을 높인다.
  • 더 명확한 코드 구조: 사용TypeScript더 잘 조직하고 유지해서 읽기 쉽고 이해하기 쉽게 만들 수 있습니다.
  • 강력한 객체 지향 프로그래밍 기능:TypeScript인터페이스, 클래스, 범형과 같은 강력한 객체 지향 프로그래밍 기능을 제공하여 더 견고하고 재사용 가능한 전략 코드를 작성할 수 있습니다.

이러한 전략 설계 언어 중 하나를 익히면 충분하다. 코드 작성 방식을 지원하는 것 외에도 시각화 모듈 생성 전략을 Blockly로 사용할 수 있다. 시각화 모듈拼接 구축 전략을 보다 직관적인 방법으로 설계 전략을 채택하고, 코딩을 필요로 하지 않는다. 전략 설계에 대한 흥미를 키우기 위해 매우 적합하다.

Blockly이 비디오는 카카오페이에서 찍은 것입니다.

설정Python전략 프로그램에서 사용된Python해설자

사용Python작성된 정책, 재검토 또는 실제 디스크에서 호스트가 있는 시스템 환경이 동시에 설치된 경우파이썬2그리고파이썬3, 정책 시작 첫 번째 라인 설정 정책 실행 시 시작 됩니다.Python이 글은 다른 글과 비교해 볼 수 있습니다.#!python3#!python2이 방법은 자동으로 해설자를 찾습니다. 또한 절대 경로를 지정할 수 있습니다.#!/usr/bin/python3

어떤 것이 보좌관인가?

관리자복잡한 데이터 요청, 데이터 수신, 네트워크 연결, 로그 리포트 등의 작업을 담당하는 귀하의 거래 전략의 실행자가 될 수 있습니다. FMZ 양자 거래 플랫폼 사이트의 네트워크 장애가 발생하더라도 호스트는 귀하의 서버에서 운영됩니다.리눅스윈도우맥 OS안드로이드ARM 리눅스그리고 다른 시스템들.관리자 페이지리눅스 관리자 설치 단계 및 관리자 업데이트 단계■ 주관자가 관리하는 디스크 로그는 주관자의 프로그램이 있는 디렉토리에 저장됩니다../logs/storage이 문서는db3이 모든 것은Sqlite데이터베이스 문서에서 사용 가능합니다.Sqlite이 확장 프로그램들을 직접 편집하는 관리 소프트웨어입니다.db3이 파일의 이름은 디스크에 있는 파일입니다.ID

지지하는 협약

  • 블록체인 자산: 현재 50개 이상의 주요 블록체인 자산 (디지털 통화) 거래소를 지원하고 있다.
  • 유니버설 프로토콜 접속:일반 협약

전략적 안전

FMZ 정량 거래 플랫폼에서 정책을 개발하고, 정책은 FMZ 정량 거래 계정 소유자만 볼 수 있습니다. 그리고 FMZ 정량 거래 플랫폼에서 정책 코드를 완전히 현지화 할 수 있습니다. 예를 들어, 정책을 한 개로 포장하는 것.Python이 패키지는 정책 코드에 로드되어 정책 현지화를 구현합니다.

Python코드의 안전성: 왜냐하면Python이 언어는 오픈소스이며, 매우 쉽게 반편될 수 있으며, 정책이 자율적으로 사용되지 않는 경우, 정책 누출이 우려되는 경우 정책이 자체적으로 배치된 호스트에 실행될 수 있도록 허용하고, 하위 계정 또는 전체 호스트 관리로 이러한 형태로 임대됩니다.

Python이 문서는 다른 문장과 연결됩니다. 이 글은 이쪽에서 읽었습니다.Python정책 코드 작성자가 자신의 사용을 할 때 암호화하지 않고 다른 사람에게 임대할 때 암호화합니다.Python이 코드는 개인용 또는 임대용을 지정할 수 있습니다.Python정책이 실행될 때 정책 코드를 암호화하는지; 정책 코드를 암호화하는 것을 지원합니다.Python이 글은Python 2.7이 글은Python 3.5이 글은Python 3.6이 글의 내용은

  • 이 정책의 작성자는 스스로 운영하고, 등록번호를 통해 다른 사람들에게 암호화 정책 코드를 제공합니다:#!pythonPython 인터프레터 버전을 지정하기 위해 코마를 사용하십시오.,간격, 입력 암호 명령어encrypt◎ 지정하지 않은 경우Python버전 직접 추가#!encrypt

    #!python,encrypt
    

    또는

    #!encrypt
    
  • 이 정책의 작성자는 자체적으로 운영하고 있으며, 등록번호를 통해 다른 사람에게 암호화되지 않은 정책 코드를 제공하지 않습니다:

    #!python,not encrypted
    

    또는

    #!not encrypted
    

판단Python전략 코드 암호화는 코드 사용에 효과가 있습니까?os.getenv('__FMZ_ENV__')다시 문자열을 반환"encrypt"설명이 유효합니다. 디스크만 유효합니다. 복사 검사는 암호화되지 않습니다.Python전략 코드.

#!encrypt
def main():
    ret = os.getenv('__FMZ_ENV__')
    # 打印变量ret为字符串encrypt或者ret == "encrypt"为真,即代表加密生效
    Log(ret, ret == "encrypt")

키 보안

FMZ 양자 거래 플랫폼에서 구성된 계정 정보, 정책 매개 변수에서 암호화 문자열과 같은 민감한 데이터는 브라우저에서 암호화됩니다. FMZ 양자 거래 플랫폼에서 저장된 정보는 암호화 정보 ("무명 데이터") 입니다. 사용자의 개인 장치에서만 암호 해독이 가능합니다. 따라서 민감한 데이터의 보안이 크게 향상됩니다. 정책 코드, 파라미터 설정, 정책 설명 등의 정보에 다른 민감한 정보가 포함되어 있다면 정책을 공개하거나 판매하지 마십시오.

  • 플랫폼은 거래소 계정 관련 정보, 비밀 키와 같은 민감한 정보의 현지화를 지원합니다.

    플랫폼 구성 거래소 정보 페이지에서, 모든 은폐된 암호화 텍스트 상자 컨트롤은 관리자의 로컬 파일에 설치하기 위해 프로파일 경로 방식으로 지원됩니다.RSA KEY인증 방법은 예를 들어, 호스트 프로그램이 있는 장치의 로컬에 민감한 정보를 구성하는 방법에 대해 자세히 설명합니다.

    1, RSA 공개키, 사설키를 생성합니다.PKCS#8이 도구는 공용 키와 개인 키를 만들 수 있는 다양한 도구가 있습니다.opensslᅳ 2 거래소에서 만든RSA KEY, 만들 때 업로드첫 번째 단계이 문서는 이 문서를 작성한 공용 키에 관한 것입니다. 3번,첫 번째 단계자, 이제 이 자리에서txt파일 형식은 주관자 수준의 디렉토리를 저장하고, 주관자 프로그램이 있는 디렉토리의 다른 경로를 저장할 수 있다. 4. FMZ에서 거래소를 구성할 때 설정Access Key이 문서의 편집框에 작성된RSA KEYᅳ 5. FMZ에서 거래소를 구성할 때 설정Secret Key이 페이지의 편집창에세 번째 단계관리자 상급 디렉토리에txt파일의 경로, 예를 들어, 배치된 파일의 이름은:rsaKey.txt이 문서와 관리자는 같은 계층 디렉토리에서 다음을 작성합니다.file:///rsaKey.txt■ 문서가 관리자 절차에 있는 디렉토리의 다음 단계 디렉토리rsa_key이 문서는 다음과 같습니다:file:///rsa_key//rsaKey.txt◎ 만약 설치된 경우rsaKey.txt파일의 다른 경로, 특히 이러한 방식으로 설정하는 경우, 이 파일은 호스트 레벨 디렉토리 또는 하위 디렉토리에만 배치되는 것을 지원한다는 점에 유의해야 합니다.

    이 방법은 개인 키를 더 안전하게 저장하고 자세한 프로세스를 참조할 수 있습니다.비디오 설명

재검토 시스템

어떤 것이 리코딩 시스템이고, 어떤 용도로 사용되나요?

당신이 양적 거래 전략을 설계한 후에, 어떻게 당신의 전략의 논리, 전략 수익 방향 등 기본적인 상황을 알 수 있습니까? 물론 우리는 실제 금과 은을 직접 시장에 거래하기 위해 전략을 실행할 수 없습니다. 우리는 당신의 전략을 역사적 데이터로 테스트 할 수 있습니다. 당신의 전략이 역사적 데이터에서 어떻게 수익을 올리는지 보세요.

이 테스트 시스템은 정확한 데이터를 가지고 있으며, 테스트 결과는 얼마나 정확합니까?

FMZ 양적 거래 플랫폼은 재검토 모드를실제 디스크 수준의 재검토그리고모형 수준의 재검토◎ 실제 디스크 수준의 리조트는 전체 역사 데이터에 따라 완전히 리조트됩니다; 모형 수준의 리조트는 실제 K 라인 데이터로 생성됩니다.tick자료를 재검토하기 위해. 둘 다 실제 역사 자료에 기초한 재검토이지만 실제 디스크 재검토의 데이터는 더 정확하고 결과는 더 신뢰할 수 있다.FMZ 재검토 메커니즘 설명그러나 리코딩은 단지 전략의 역사적인 데이터에 대한 표현일 뿐이며, 역사적인 데이터는 미래의 시장을 완전히 대변할 수 없다. 역사적인 시장은 반복될 수도 있고, 블랙 스완이 날아갈 수도 있다. 따라서 리코딩 결과를 합리적이고 객관적으로 다루어야 한다.

다른 언어 전략에 대해 재검토할 때 주의해야 할 사항은 다음과 같습니다.

자바스크립트그리고C++이 방법은 웹 브라우저에서 실행됩니다.WexApp엑스포의 실제 디스크 (예: FMZ 양적 거래 플랫폼)WexApp이식 거래소) 는 다른 소프트웨어, 라이브러리 또는 모듈을 설치하지 않고 실행됩니다.파이썬재검토는 호스트에서 수행되며, FMZ의 정량화된 공공 서버에서 재검토할 수 있으며, 사용자 자신의 호스트에서 재검토할 수도 있다. 실제 디스크와 재검토는 모두 호스트가 설치한 시스템에 의존한다.파이썬만약 여러 라이브러리를 사용해야 한다면, 직접 설치해야 합니다. (공용 서버에서 일반적인 라이브러리를만 지원합니다.)

검색 시스템에서의 데이터

FMZ 양적 거래 플랫폼 재검토 분포 아날로그 레벨 재검토 및 실제 디스크 레벨 재검토 두 가지, 아날로그 레벨 재검토는 하위 K 라인 주기에 따라 생성된 아날로그에 따라tick, 각 하위 K선 주기에 12개의 재검토 시간 포인트를 생성할 것이고, 실제 디스크 레벨은 실제 수집됩니다.tick, 약 몇 초에 한 번, 데이터 양이 크며, 반복 속도가 느리므로, 특히 긴 시간을 반복할 수 없습니다. FMZ의 반복 메커니즘은 전략이 하나의 K 라인에서 여러 번 거래를 할 수 있도록 해줍니다.링크

재검토 시스템에서 정책 DEBUG 방식

자바스크립트 정책 재검토 크롬 브라우저의 DevTools에서 디버깅

재검토 시스템에서 지원되는 거래소

  • 암호 화폐 (디지털 화폐)

    이름 유형 설명
    비트피넥스 현금 거래소 대상 한정된 거래를 지원하는 것은 다음과 같습니다:BTC_USD,ETH_USD,LTC_USD그리고 이 거래는USD미국 달러입니다.
    비안 현금 거래소 대상 한정된 거래를 지원하는 것은 다음과 같습니다:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTC그리고
    OKX 현금 거래소 대상 한정된 거래를 지원하는 것은 다음과 같습니다:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTC그리고
    코인 현금 거래소 대상 한정된 거래를 지원하는 것은 다음과 같습니다:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTC그리고
    OKX 선물 선물 거래소 대상 한정된 거래를 지원하는 것은 다음과 같습니다:BTC_USD,ETH_USD그리고 이 거래는USD, 특정 계약 코드를 설정합니다 ((보시기 바랍니다exchange.SetContractType함수) 이후, 계약은 동전 본래 계약이다. 지원 계약 코드는 다음과 같습니다.this_weeknext_weekquarterswap
    HuobiDM 선물 거래소 대상 HuobiDM는 토큰 선물 (토큰 계약) 을 지원하고 있으며, 제한된 거래 쌍을 지원합니다.BTC_USD,ETH_USD그리고 이 거래는USD, 특정 계약 코드를 설정합니다 ((보시기 바랍니다exchange.SetContractType함수) 이후, 계약은 동전 본래 계약이다. 지원 계약 코드는 다음과 같습니다.this_weeknext_weekquarterswap
    BitMEX 선물 거래소 대상 거래 쌍은 다음과 같습니다:XBT_USD, 특정 계약 코드를 설정합니다 ((보시기 바랍니다exchange.SetContractType함수) 이후, 계약은 동전 본래 계약이다. 지원 계약 코드는 다음과 같습니다.XBTUSD
    비엔인 선물 선물 거래소 대상 한정된 거래를 지원하는 것은 다음과 같습니다:BTC_USDT,ETH_USDT그리고 이 거래는USDT, 특정 계약 코드를 설정합니다 ((보시기 바랍니다exchange.SetContractType이 함수들은USDT이 계약은:swap
    데리비트 옵션 옵션 거래소의 대상 거래 쌍은 다음과 같습니다:BTC_USD,ETH_USD, 특정 계약 코드를 설정합니다 ((보시기 바랍니다exchange.SetContractType함수) 이후, 계약은 동전 본래 계약이다.

    재검토 시스템 선물 거래소 객체는 전략 코드에서 트레이드 쌍을 전환하는 것을 일시적으로 지원하지 않습니다.

모형 수준

아날로그 레벨 리모델링은 리모델링 시스템의 하위 K 라인 데이터에 따라 특정 알고리즘에 따라 주어진 하위 K 라인 Bar의 최고 가격, 최저 가격, 개장 가격, 종료 가격의 수치 구성의 프레임에 따라 모형된다.tick데이터, 실시간으로tick이 데이터들은 인터페이스를 요청할 때 반환됩니다.발명가들의 양적 모형 레벨 재검토 메커니즘 설명

실제 디스크 수준

실제 디스크 수준의 재검토는 사실입니다.tick차원 데이터는 바의 시간 순서로 표시됩니다.tick레벨 데이터의 전략은 실제 디스크 레벨 재검토를 사용하는 것이 더 사실에 가깝다.tick실제 기록된 데이터이며, 모형 생성되지 않습니다. 깊이 데이터, 시장 거래 기록 데이터 재생을 지원하고, 사용자 정의 깊이를 지원하고, 분기 데이터를 지원합니다. 실제 디스크 수준의 분기 데이터를 최대 50MB까지 지원합니다. 데이터 상한에서 분기 시간 범위를 제한하지 않습니다. 분기 시간을 최대한 늘려야 할 경우, 분기 시간을 늘리기 위해 분기 데이터를 사용하지 않고, 분기 시간 범위를 늘리기 위해 분기 데이터를 사용하지 않습니다.GetDepthGetTrades함수는 트레이드 데이터를 가져옵니다.GetTickerGetTradesGetDepthGetRecords, 반복적으로 시간을 리모델링 타임아선에서 이동하지 않습니다.;; 위의 함수 중 하나를 반복적으로 호출하면 리모델링 타임아선에서 이동합니다.;; 리모델링을 할 때 실제 디스크 레벨 리모델링을 사용하는 것은 너무 이른 시간을 선택하지 않는 것이 좋습니다.

실제 디스크 레벨 재검토 현재 지원

  • 비안
  • OKX (OKX 현금)
  • HuobiDM (토큰 선물)

재검토 시스템 매개 변수 조정

FMZ 양자 거래 플랫폼 리테스트 시스템 매개 변수 조정 기능은 리테스트 시 각 매개 변수 조정 옵션에 따라 설정하여 다음과 같이 조정합니다.

  • 최소 값: 제한 변수의 시작 값.
  • 최대 값: 제한 파라미터의 증가 변화 이후의 최대 값.
  • 발걸음: 변수가 증가합니다.

파라미터 조합을 생성하여 그 파라미터 조합을 통해 반복 (즉, 모든 파라미터 조합은 반복) 을 수행한다. 정책 파라미터는 ** 숫자 (number) ** 타입의 파라미터만 반복 시스템에서 파라미터 조정할 수 있다.

예를 들어, 재검토 페이지에서 매개 변수를 조정할 수 있는 옵션을 설정하면:

img

패러미터 조정 모드 재검토:

img

재검토 설정을 저장

정책편집 페이지에서, "모형편집" 단면 (즉:편집 시스템) 에서, "편집 설정", "편집 설정", "편집 설정" 등의 옵션을 설정할 수 있다. "편집 설정"은 "편집 설정", "편집 설정", "편집 설정", "편집 설정", "편집 설정", "편집 설정", "편집 설정" 등의 조건을 설정할 수 있다.

img

그리고JavaScript예를 들어, "소스 파일로 회수 설정 저장"을 클릭하면 됩니다.

img

JavaScript/Python/C++/麦语言소스 파일 형식으로 설정된 저장 회색은 약간 다릅니다:

/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
'''backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

메어어:

(*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*)

사용자 지정 데이터 소스

시스템 사용GET메소드는 외부 데이터 소스를 검색하기 위해 사용자 지정 URL (공개 액세스 가능한 URL) 를 요청하고 추가 요청 파라미터는 다음과 같습니다.

매개 변수 의미 설명
기호 품종 이름 예를 들어: BTC_USD_OKCoin_EN
eid 거래소 예를 들어: OKCoin_EN
둥글다 가격 정확성 만약 3이 있다면, 값은 1000으로 곱해야 합니다.
수학적 정확성 만약 2가 있다면, 복귀된 숫자는 100에 곱해야 합니다
기간 바 주기 (millisecond) 예를 들어, 60만 바를 요청할 수 있습니다.
깊이 심층 필기 1-20
무역 데이터 분할이 필요한지 사실/거짓
에서 시작 시간 유닉스 시간표
종료 시간 유닉스 시간표

주의:

round与vround是为了避免网络传输过程中浮点数的精度丢失设计的两个参数,价格数据和成交量、订单量数据都采用整型传输。

예를 들어, 이 글에 따르면,

http://customserver:80/data?symbol=BTC_USD_OKCoin_EN&eid=OKCoin_EN&round=3&vround=3&period=900000&from=1564315200&to=1567267200

반환된 형식은 다음 두 가지 형식 중 하나 (시스템 자동 인식) 이어야 합니다:

일반적인 Bar 레벨 재검토

{
    "schema":["time","open","high","low","close","vol"],
    "data":[[1564315200000,9531300,9531300,9497060,9497060,787],[1564316100000,9495160,9495160,9474260,9489460,338]]
}

틱 레벨 재검토 데이터 ((장판 깊이 정보를 포함하고, 깊이 형식은 [가격, 양]의 배열이며, 여러 레벨의 깊이가 가능하며, asks는 가격 상승, bids는 가격 하락)

{
    "schema":["time","asks", "bids","trades","close","vol"],
    "data":[[1564315200000,[[9531300,10]], [[9531300,10]],[[1564315200000,0,9531300,10]],9497060,787]]
}

설명

필드 설명
스키마 data 배열에 있는 열의 속성을 지정합니다. 대소형으로 구분하고, time, open, high, low, close, vol, asks, bids로만 제한합니다.
데이터 스키마에 따라 저장된 데이터의 열을 가리키는 배열

데이터 형식

필드 설명
요청/입찰 [가격, 수량,...]
무역 [시간, 방향 (0: 구매, 1: 판매), 가격, 수량...]

자금비율 자료를 제공합니다: 예를 들어, 이화여래 재검토시 추가 자본금 요금 데이터가 필요하며, 사용자 지정 데이터 소스가 제공되어야 한다. 예를 들어, 이화여래 재검토시 요청된 자본금 요금 데이터 구조는 다음과 같다.

{
	"detail": {},
	"symbol": "futures_binance.eth_usdt.funding",
	"schema": ["time", "open", "high", "low", "close", "vol"],
	"data": [
		[1582876800000, 25289, 25289, 25289, 25289, 0],
		[1582905600000, 30522, 30522, 30522, 30522, 0],
		[1582934400000, 40998, 40998, 40998, 40998, 0],
        ...
		[1626652800000, 198, 198, 198, 198, 0],
		[1626681600000, 691, 691, 691, 691, 0],                  // 相邻的周期间隔8小时
		[1626710400000, 310, 310, 310, 310, 0],                  // 币安资金费率8小时更新一次,资金费率数据为什么为310?
		[1626739200000, 310, 310, 310, 310, 0],                  // 因为和K线数据一样,为了避免网络传输过程中浮点数的精度丢,数据采用整型,所以需要根据round参数处理数据,处理后用于返回给回测系统的数据就为310
		[1626768000000, -41610, -41610, -41610, -41610, 0],      // 资金费率数据也可能为负值
		[1626796800000, -5125, -5125, -5125, -5125, 0],
        ...		
		[1627977600000, 10000, 10000, 10000, 10000, 0]
	]
}

이 검색 시스템에서 전송되는 데이터 요청은 다음과 같습니다.

http://customserver:80/data?symbol=futures_binance.eth_usdt.funding&eid=Futures_Binance&round=8&vround=5&depth=20&trades=1&custom=0&period=3600000&from=1360771200&to=1628006400

사용자 정의 데이터 소스 예제:

데이터 소스, 웹 주소를 지정합니다:http://xxx.xx.x.xx:9090/data사용자 지정 데이터 서버, golang을 사용하여 작성:

package main 
import (
    "fmt"
    "net/http"
    "encoding/json"
)

func Handle (w http.ResponseWriter, r *http.Request) {
    // e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data
    // r.URL: /data?depth=20&detail=true&eid=Binance&from=1566820800&period=900000&round=3&symbol=BTC_USDT_Binance&to=1569686400&trades=1&vround=5
    // response
    defer func() {
        // response data
        /* e.g. data
        {
            "schema":["time","open","high","low","close","vol"],
            "data":[
                [1564315200000,9531300,9531300,9497060,9497060,787],
                [1564316100000,9495160,9495160,9474260,9489460,338]
            ]
        }
        */
        ret := map[string]interface{}{
            "schema" : []string{"time","open","high","low","close","vol"},
            "data" : []interface{}{
                []int64{1564315200000,9531300,9531300,9497060,9497060,787},
                []int64{1564316100000,9495160,9495160,9474260,9489460,338},
            },
        }
        b, _ := json.Marshal(ret)
        w.Write(b)
    }()
}

func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

이 모든 것은 우리가 할 수 있는 일입니다.JavaScript예를 들어:

/*backtest
start: 2019-07-28 00:00:00
end: 2019-07-29 00:00:00
period: 1m
exchanges: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
*/

function main() {
    var ticker = exchange.GetTicker()
    var records = exchange.GetRecords()
    Log(ticker)
    Log(records)
}

이 그래프는 리테스트 시스템에서 사용자 정의 데이터를 그린 것입니다.

이 글은 다른 글과 비교해 볼 수 있습니다.

로컬 검색 엔진

FMZ 양적 거래 플랫폼이 오픈소스JavaScript언어와Python언어의 로고 엔진, 로고 시를 설정하는 것을 지원합니다하위 K선 주기는

검색 페이지 단축키

  • 정책 편집 페이지 및 정책 회색 페이지 전환의 단추 키

    사용Ctrl + ,키, 재검토 페이지와 정책 편집 페이지를 전환하고 누르십시오.Ctrl버튼을 누르면 됩니다,

  • 정책 저장 단추

    사용Ctrl + s키, 저장 정책.

  • 재검토를 시작하는 단축키

    사용Ctrl + b버튼을 누르면 재검토를 시작합니다.

코드 설명

입력 함수

함수 이름 설명
main() 입력 함수입니다.
onexit() 정상 종료 시 스웨이 Tail 함수는 최대 실행 시간이 5분이며, 선언하지 않을 수 있으며, 시간이 지나면 오류를 반환합니다.끊어이 글의 내용은
onerror() 이례적인 출퇴를 촉발하는 함수를 실행하는 시간은 최대 5분이며, 선언하지 않을 수 있습니다.Python언어, 언어,C++이 언어의 작성된 정책은 이 함수를 지원하지 않습니다.
init() 이니셔티브 함수를 위해, 정책 프로그램은 실행 시 자동으로 먼저 호출되며, 선언할 수 없습니다.
  • 설명:
    • 검증 시스템이 지원하지 않습니다onerror()이 함수들은
    • 실제 현장에서 시작되었습니다.onerror()이 함수들은 더 이상 작동하지 않습니다.onexit()이 함수들은

1번 출력 (()

onexit()이 작업은 사용자에 의해 수행되며 최대 5분 동안 진행됩니다.

function main(){
    Log("开始运行, 5秒后停止,并执行扫尾函数!")
    Sleep(1000 * 5)
}

// 扫尾函数实现
function onexit(){
    var beginTime = new Date().getTime()
    while(true){
        var nowTime = new Date().getTime()
        Log("程序停止倒计时..扫尾开始,已经过去:", (nowTime - beginTime) / 1000, "秒!")
        Sleep(1000)
    }
}
import time 
def main():
    Log("开始运行, 5秒后停止,并执行扫尾函数!")
    Sleep(1000 * 5)

def onexit():
    beginTime = time.time() * 1000
    while True:
        ts = time.time() * 1000
        Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!")
        Sleep(1000)
void main() {
    Log("开始运行, 5秒后停止,并执行扫尾函数!");
    Sleep(1000 * 5);
}

void onexit() {
    auto beginTime = Unix() * 1000;
    while(true) {
        auto ts = Unix() * 1000;
        Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!");
        Sleep(1000);
    }
}

init()

init(), 사용자가 초기화 함수를 구현합니다init()정책이 실행될 때 자동으로 실행됩니다.init()함수, 정책에서 설계된 초기화 작업을 완료합니다.

function main(){
    Log("程序第一行代码执行!", "#FF0000")
    Log("退出!")
}

// 初始化函数
function init(){     
    Log("初始化!")
}
def main():
    Log("程序第一行代码执行!", "#FF0000")
    Log("退出!")

def init():
    Log("初始化!")
void main() {
    Log("程序第一行代码执行!", "#FF0000");
    Log("退出!");
}

void init() {
    Log("初始化!");
}

실수입니다.

onerror()이 모든 것은,onerror()함수 실행, 함수가 지원하지 않습니다PythonC++언어의 전략.

function main() {
    var arr = []
    Log(arr[6].Close)
}

function onerror() {
    Log("错误")
}
# python不支持
// C++不支持

고전적인 전략 프레임워크

이쪽에서JavaScriptPythonC++언어에서 작성된 전략은 전략 주자 루프에서 호출되어야 합니다.Sleep()함수 ─ 재검토시 재검토속도를 제어하기 위해 사용되며, 실제 디스크시 전략 론딩의 시간 간격을 제어하기 위해 사용되며, 이를 통해 거래소 API 인터페이스에 접근하는 요청 빈도를 제어한다─

  • 디지털 화폐 전략의 기본 프레임 워크 예제:

    function onTick(){
        //在这里写策略逻辑,将会不断调用,例如打印行情信息
        Log(exchange.GetTicker())
    }
    
    function main(){
        while(true){
            onTick()
            // Sleep函数主要用于数字货币策略的轮询频率控制,防止访问交易所API接口过于频繁
            Sleep(60000)
        }
    }
    
    def onTick():
        Log(exchange.GetTicker())
    
    def main():
        while True:
            onTick()
            Sleep(60000)
    
    void onTick() {
        Log(exchange.GetTicker());
    }
    
    void main() {
        while(true) {
            onTick();
            Sleep(60000);
        }
    }
    

    가장 간단한 예로, 만약 제가 거래소에 1초마다 100의 가격을 올리고 싶으면, 1의 지불을 하면 다음과 같이 쓸 수 있습니다.

    function onTick(){
        // 这个仅仅是例子,回测或者实盘会很快把资金全部用于下单,实盘请勿使用
        exchange.Buy(100, 1)
    }
    
    function main(){
        while(true){
            onTick()
            // 暂停多久可自定义,单位为毫秒,1秒等于1000毫秒
            Sleep(1000)
        }
    }
    
    def onTick():
        exchange.Buy(100, 1)
    
    def main():
        while True:
            onTick()
            Sleep(1000)
    
    void onTick() {
        exchange.Buy(100, 1);
    }
    
    void main() {
        while(true) {
            onTick();
            Sleep(1000);
        }
    }
    

템플릿 클래스 라이브리

템플릿 클래스 라이브리FMZ 양적 거래 플랫폼에서 재사용 가능한 코드 모듈이며, 정책 코드의 한 종류이다.템플릿 클래스 라이브리이 경우, 창업자가 양자 거래 플랫폼에 현재 로그인한 계정 정책 목록에 템플릿 클래스 라이브러리를 생성하면, 생성 후 범주를 일반 정책으로 변경할 수 없습니다.

JavaScript언어 템플릿 목록:

img

Python언어 템플릿 목록:

img

C++언어 템플릿 목록:

img

  • 템플릿 클래스 라이브러리의 출력 함수 템플릿 클래스 라이브러리의 인터페이스 함수로서 템플릿 클래스 라이브러리의 정책 호출을 참조할 수 있다. 템플릿 클래스 라이브러리에 선언된 템플릿 클래스 라이브러리의 템플릿 클래스 라이브러리의 템플릿 라이브러리의 템플릿 라이브러리의 템플릿 라이브러리에 선언된 템플릿 라이브러리의 템플릿 라이브러리의 템플릿 라이브러리의 템플릿 라이브러리의 템플릿 라이브러리에 선언된 템플릿 라이브러리의 템플릿 라이브러리의 템플릿 라이브러리에 명시되어 있다.

    /*
    -- 策略引用该模板以后直接用 $.Test() 调用此方法
    -- main 函数在策略中不会触发, 只做为模板调试的入口
    */
    $.Test = function() {
        Log('Test')
    }
    
    function main() {
        $.Test()
    }
    
    def Test():
        Log("template call")
    
    # 导出Test函数, 主策略可以通过ext.Test()调用
    ext.Test = Test 
    
    // 策略引用该模板以后直接用 ext::Test() 调用此方法
    void Test() {
        Log("template call");
    }
    
  • 템플릿 클래스 라이브러리의 매개 변수 템플릿 클래스 라이브러리는 또한 자신의 인터페이스 매개 변수를 설정할 수 있습니다. 템플릿 클래스 라이브러리의 매개 변수는 템플릿 클래스 라이브러리 코드에서 범용 변수 형태로 사용됩니다.

    템플릿 클래스 라이브러리 설정 파라미터:

    img

    템플릿 클래스 라이브러리 코드:

    $.SetParam1 = function(p1) {
        param1 = p1
    }
    
    $.GetParam1 = function() {
        Log("param1:", param1)
        return param1
    }
    
    def SetParam1(p1):
        global param1
        param1 = p1
    
    def GetParam1():
        Log("param1:", param1)
        return param1
    
    ext.SetParam1 = SetParam1
    ext.GetParam1 = GetParam1
    
    void SetParam1(float p1) {
        param1 = p1;
    }
    
    float GetParam1() {
        Log("param1:", param1);
        return param1;
    }
    

    참고로템플릿 클래스 라이브리예를 들어 전략 코드:

    function main () {
        Log("调用$.GetParam1:", $.GetParam1())
        Log("调用$.SetParam1:", "#FF0000")
        $.SetParam1(20)
        Log("调用$.GetParam1:", $.GetParam1())
    }
    
    def main():
        Log("调用ext.GetParam1:", ext.GetParam1())
        Log("调用ext.SetParam1:", "#FF0000")
        ext.SetParam1(20)
        Log("调用ext.GetParam1:", ext.GetParam1())
    
    void main() {
        Log("调用ext::GetParam1:", ext::GetParam1());
        Log("调用ext::SetParam1:", "#FF0000");
        ext::SetParam1(20);
        Log("调用ext::GetParam1:", ext::GetParam1());
    }
    

    img

  • 템플릿 클래스 라이브러리 참조

    정책 편집 페이지 템플릿 탭에서 참조를 선택하면 정책을 저장할 수 있습니다.

    img

내장 구조

글로벌 변수

교환

exchange거래소 객체로 간주되며, 기본 정책 파라미터에 추가된 첫 번째 거래소 객체이다. 거래소와의 모든 상호작용은 이 객체 안의 함수들에 의해 이루어진다.

  • 재검토 추가 거래소 객체

  • 실제 페이지에 거래소 객체를 추가합니다.

추가된 거래소 객체는 코드에 해당합니다.exchange오브젝트:

function main() {
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
}
def main():
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
void main() {
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel());
}
거래소

이 모든 것은exchange거래소 객체의 모든 거래소 객체의 배열은 여러 거래소 객체를 포함할 수 있습니다.exchanges[0]그 이유는exchange

추가된 거래소 객체는 정책 코드와 일치합니다.exchanges[0]exchanges[1]exchanges[2]ᅳ..., 이런 식으로 ᅳ

function main() {
    for(var i = 0; i < exchanges.length; i++) {
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
    }
}
def main():
    for i in range(len(exchanges)):
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
void main() {
    for(int i = 0; i < exchanges.size(); i++) {
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel());
    }
}
주문 상태

Order구조에Status속성.

변수 이름 정의
ORDER_STATE_PENDING 완성되지 않은 0
ORDER_STATE_CLOSED 이미 완료되었습니다. 1
ORDER_STATE_CANCELED 폐지되었습니다. 2
ORDER_STATE_UNKNOWN 상태는 알려지지 않았습니다 (다른 상태) 3

ORDER_STATE_UNKNOWN상태, 호출할 수 있습니다.exchange.GetRawJSON()원본 주문 상태를 확인하고 거래소 문서를 검색하여 자세한 설명을 참조하십시오. 테이블의 상수 이름은 정책 코드에서 직접 사용할 수 있고Order구조Status속성 비교, 동등 여부를 판단하여 주문 상태를 결정합니다. 이 상수 이름을 인쇄하면 표시됩니다.변수 이름대응하는다른 상수 명칭 동음이 더 이상 언급되지 않습니다.

구매 및 판매 주문 유형

Order구조에Type속성.

변수 이름 정의
ORDER_TYPE_BUY 지불 0
ORDER_TYPE_SELL 판매 1
포지션 유형

Position구조에Type속성.

변수 이름 정의 설명 적용
PD_LONG 여러 개의 위치를 나타냅니다. 디지털 화폐 선물 사용exchange.SetDirection("closebuy")평준화 방향을 설정하여 이 유형의 지분을 평준화합니다. 디지털 화폐 선물 0
PD_SHORT 공백한 위치를 표시합니다. 디지털 화폐 선물 사용exchange.SetDirection("closesell")평준화 방향을 설정하여 이 유형의 지분을 평준화합니다. 디지털 화폐 선물 1
미래에셋 거래

Order구조에Offset속성.

변수 이름 정의
ORDER_OFFSET_OPEN 시장을 개설하는 주문 0
ORDER_OFFSET_CLOSE 평면 보관소 주문 1
전략 매개 변수

전략 코드의 전략 인터페이스에 설정된 전략 파라미터들은 전 세계 변수 형태로 나타난다.JavaScript언어의 정책 인터페이스에서 설정된 매개 변수 값을 직접 액세스하거나 수정할 수 있습니다.Python정책의 함수에서 범용 변수를 수정할 때 사용해야 합니다.global키워드:

파라미터 유형:

img

변수 설명 참고자료 유형 기본값 설명
번호 숫자의 종류 참고자료 숫자 형식 (number) 1 C++ 정책은 플로포트 타입이다.
문자열 문자열 참고자료 문자열 (string) 안녕하세요 FMZ 기본값을 입력할 때 괄호가 필요하지 않으며, 입력은 문자열 처리로 처리됩니다.
콤박스 아래로 끌어내기 참고자료 드래그아웃 ((selected) 1|2|3 combox 변수 자체는 숫자 값으로, 드래그아웃 컨트롤의 선택의 유의 인덱스를 나타냅니다. 첫 번째 드래그아웃 인덱스의 내용은 1이며, 그 인덱스 값은 0이며, 순차적으로 분류됩니다.
bool 선택지 참고자료 불형 (true/false) 사실 선택하면 변수 bool가 true이고 선택하지 않으면 변수 bool가 false이다.
secretString 암호 문자열 참고자료 암호 문자열 (string) 비밀번호 문자열과 마찬가지로, 암호화 문자열은 암호화 되어 전송되며, 뚜렷한 문자를 전송하지 않습니다.
  • 인터페이스 매개 변수, 정책 편집 페이지 코드 편집 영역 아래의 정책 매개 변수 영역 설정.
  • 인터페이스 매개 변수는 전략 코드에서 범용 변수 형태로 존재합니다. 즉, 코드에 인터페이스 매개 변수를 수정할 수 있습니다.
  • 인터페이스 매개 변수 이름: 위 그림에서numberstringcomboxboolsecretString
  • 옵션 설명: 정책 인터페이스에서 인터페이스 매개 변수의 이름.
  • 참고 옵션: 인터페이스 파라미터에 마우스가 머무르면 그에 따라 표시되는 인터페이스 파라미터에 대한 자세한 설명.
  • 타입 옵션: 이 인터페이스 파라미터의 타입.
  • 기본값 옵션: 이 인터페이스 파라미터의 기본값.

파러미터는 설정에 의존합니다: 하나의 매개 변수를 설정하여 다른 매개 변수가 그 매개 변수에 기반한 선택에 따라 표시 및 숨기는 것을 구현할 수 있습니다. 예를 들어, 우리가 매개 변수를 설정하는 경우numberA,는 숫자의 타입입니다.numberA이 문서는 한 가지 매개 변수에 기초합니다.isShowA(불형) 거짓 결정numberA표시 및 숨기기.numberA변수는 인터페이스 매개 변수에서 다음과 같이 설정됩니다.numberA@isShowA

img

이 방법은 선택되지 않습니다.isShowA이 문서는numberA매개 변수는 숨겨져 있다. 드래그아웃 컨트롤 타입의 매개 변수에 대해서는, 매개 변수는 드래그아웃의 특정 옵션에 해당하는지 여부를 판단하기 위해 부분적으로 의존한다.인덱스 값ᅳ 또한isShowA예를 들어, 변수를 설정할 때, 변수는 다음과 같습니다.numberA@combox==2numberA이 두 가지 요소는combox파라미터가 세 번째 옵션을 표시하거나 숨기는 것을 선택하는지 (인덱스 0은 첫 번째 옵션, 인덱스 1은 두 번째 옵션, 인덱스 2는 세 번째 옵션)

정책 인터페이스 파라미터, 인터랙션 컨트롤, 템플릿에 있는 파라미터 그룹 기능: 이 부분의 모든 부분들은(?第一组)이 사진의 그림은 이 사진의 사진과 같습니다.

img

이 문서는 다음과 같은 문서를 사용합니다.

img

변수 기본값 저장: 정책 매개 변수는 아래와 같습니다. 다시 테스트할 때 정책 매개 변수를 기본값으로 저장하고 싶다면, 정책 매개 변수를 변경한 후 클릭할 수 있습니다.保存回测设置버튼을 켜세요.

img

img

설정된 정책 매개 변수를 코드 형태로 정책에 저장할 수도 있습니다:

/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
'''backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
'''
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/

데이터 구조

일부 함수들은 호출할 때 요청되는 원자를 붙여줍니다.JSON데이터, 원시JSON데이터 저장된 객체로 돌아갑니다.Info속성에서.........Info속성, 다음은 각 데이터 구조의 주요 속성 설명이다.

무역

모든 트랜잭션 역사 (자신 아닌) 를exchange.GetTrades()이 함수들은

{
    Id      : 9585306,          // 交易记录ID,如果交易所接口没有提供订单ID则使用时间戳填充
    Time    : 1567736576000,    // 时间(Unix timestamp 毫秒)
    Price   : 1000,             // 价格
    Amount  : 1,                // 数量
    Type    : 0                 // 订单类型,参考常量里的订单类型,0即为ORDER_TYPE_BUY,ORDER_TYPE_BUY的值为0
}

시장은exchange.GetTicker()이 함수들은

{
    Info    : {...},             // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    High    : 1000,              // 最高价,如果交易所接口没有提供24小时最高价则使用卖一价格填充
    Low     : 500,               // 最低价,如果交易所接口没有提供24小时最低价则使用买一价格填充
    Sell    : 900,               // 卖一价
    Buy     : 899,               // 买一价
    Last    : 900,               // 最后成交价
    Volume  : 10000000,          // 最近成交量,原则上现货成交量单位为交易币种(baseCurrency),期货成交量单位为合约张数。如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
    Time    : 1567736576000      // 毫秒级别时间戳
}
기록

표준OHLC구조, K 라인을 그리기 및 지표 계산 분석을 위한 구조.exchange.GetRecords()이 구조의 배열을 반환합니다.Record구조는 K선 기둥을 나타냅니다.BARRecord그 중 하나는Time이 K선 기둥 주기의 시작 시간.

{
    Time    : 1567736576000,     // 一个时间戳,精确到毫秒,与Javascript的new Date().getTime()得到的结果格式一样
    Open    : 1000,              // 开盘价
    High    : 1500,              // 最高价
    Low     : 900,               // 最低价
    Close   : 1200,              // 收盘价
    Volume  : 1000000            // 交易量,原则上现货成交量单位为交易币(baseCurrency),期货成交量单位为合约张数,如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
}
순서

주문 구조는exchange.GetOrder()exchange.GetOrders()이 함수들은exchange.GetOrders()이 구조의 배열 또는 빈 배열을 반환합니다.현재 완료되지 않은 주문다시 돌아와[], 즉 빈 수군) ᅳ

{
    Info        : {...},         // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    Id          : 123456,        // 交易单唯一标识
    Price       : 1000,          // 下单价格,注意市价单的该属性可能为0或者-1
    Amount      : 10,            // 下单数量,注意市价单的该属性可能为金额并非币数
    DealAmount  : 10,            // 成交数量,如果交易所接口不提供该数据则可能使用0填充
    AvgPrice    : 1000,          // 成交均价,注意有些交易所不提供该数据。不提供、也无法计算得出的情况该属性设置为0
    Status      : 1,             // 订单状态,参考常量里的订单状态,例如:ORDER_STATE_CLOSED
    Type        : 0,             // 订单类型,参考常量里的订单类型,例如:ORDER_TYPE_BUY
    Offset      : 0              // 数字货币期货的订单数据中订单的开平仓方向。ORDER_OFFSET_OPEN为开仓方向,ORDER_OFFSET_CLOSE为平仓方向
    ContractType : ""            // 现货订单中该属性为""即空字符串,期货订单该属性为具体的合约代码
}
마켓 오더

시장의 깊이, 즉exchange.GetDepth()함수는 데이터 구조로 돌아갑니다.입찰묻습니다.대수열의 요소의 데이터 구조.

{
    Price   : 1000,              // 价格
    Amount  : 1                  // 数量
}
깊이

시장의 깊이는exchange.GetDepth()이 함수들은

{
    Asks    : [...],             // 卖单数组,MarketOrder数组,按价格从低向高排序
    Bids    : [...],             // 买单数组,MarketOrder数组,按价格从高向低排序
    Time    : 1567736576000      // 毫秒级别时间戳
}
계좌

계정 정보,exchange.GetAccount()함수는 반환한다. 반환된 구조의 데이터는 현재 설정된 거래 쌍, 설정된 계약 코드와 관련이 있다.

{
    Info            : {...},     // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    Balance         : 1000,      // 可用计价币数量,现货中如果交易对是BTC_USDT,Balance指的是当前可用USDT数量。U本位期货合约中Balance指的是可用保证金USDT的数量
    FrozenBalance   : 0,         // Balance表示的资产用于挂单的冻结数量
    Stocks          : 1,         // 可用交易币数量,现货中如果交易对是BTC_USDT,Stocks指的是当前可用BTC数量。币本位期货合约中Stocks指的是可用保证金的币(baseCurrency)的数量
    FrozenStocks    : 0          // Stocks表示的资产用于挂单的冻结数量
}
위치

미래에셋거래에서 보유한 포지션 정보는exchange.GetPosition()이 함수들은 여기로 돌아갑니다Position구조대수군

{
    Info            : {...},     // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    MarginLevel     : 10,        // 持仓杆杠大小,如果交易所接口没有提供该数据则通过计算填充,可能会有误差
    Amount          : 100,       // 持仓量,持仓合约张数,通常是正整数。注意每个交易所的合约乘数、价值等合约规格可能不一样,下单规则也可能不一样,例如币安合约可以0.1张下单
    FrozenAmount    : 0,         // 仓位冻结量,用于平仓挂单时的临时冻结仓位数量
    Price           : 10000,     // 持仓均价,原则上该属性为仓位总体的平均价格(不参与结算),如果交易所接口没有提供该数据则用交易所接口现有的持仓均价填充(参与结算)
    Profit          : 0,         // 持仓浮动盈亏,原则上为持仓的未实现盈亏,如果交易所接口没有提供该数据则用交易所接口其它盈亏数据填充,盈亏数值的单位和当前合约保证金的单位相同
    Type            : 0,         // PD_LONG为多头仓位,PD_SHORT为空头仓位
    ContractType    : "quarter", // 合约代码,具体可以参看SetContractType函数描述中传入的参数
    Margin          : 1          // 仓位占用的保证金,如果交易所接口没有提供该数据则使用0填充
}

디지털 화폐 선물에 대한 주의가 필요합니다.exchange.GetPosition()이 함수들은Position구조적 배열.FrozenAmountProfitMargin속성, 거래소가 제공하는 데이터가 일치하지 않기 때문에 다른 거래소의 객체가 호출됩니다.exchange.GetPosition()인터페이스에서 반환되는 데이터의 정의는 다를 수 있습니다. 예를 들어, 일부 거래소는 포지션이 없는 포지션 냉동 데이터를 보유합니다.FrozenAmount0로. 계산이 필요한 경우 특정 데이터를 사용할 수 있습니다.Info속성의 원본 데이터 계산 분석.

시장

거래 품종의 시장 정보는exchange.GetMarkets()이 함수들은 이 함수를 포함합니다.Market구조사전

{
    Symbol          : "btcusdt",       // 该交易品种在交易所的原始名称
    BaseAsset       : "BTC",           // baseCurrency 交易币,统一大写
    QuoteAsset      : "USDT",          // quoteCurrency 计价币,统一大写
    TickSize        : 0.01,            // 价格最小变动数值
    AmountSize      : 0.01,            // 下单量最小变动数值
    PricePrecision  : 2,               // 价格精度,表示价格精确到2位小数
    AmountPrecision : 3,               // 下单量精度,表示下单量精确到3位小数
    MinQty          : 0.001,           // 最小下单量
    MaxQty          : 1000,            // 最大下单量
    MinNotional     : 5,               // 最小下单金额
    MaxNotional     : 9999999,         // 最大下单金额
    CtVal           : 100,             // 合约价值
    Info            : {...}            // 交易所该品种的原始数据
}

각 거래소가 시장 정보 데이터에 대한 지원 정도가 다르기 때문에 거래소가 지원하지 않는 필드는 무시됩니다. 위의 각 필드의 데이터 가치는 거래소의 인터페이스 원본 데이터에서 가져옵니다.Info필드의 내용.

글로벌 함수

버전

Version(), 시스템의 현재 버전 번호를 반환한다.

잠자리 (밀리초)

Sleep(Millisecond), 휴면 함수, 프로그램을 잠시 중단합니다. ▲ 파라미터 값:Millisecond숫자의 종류. 파라그램은 밀리초입니다.Sleep(1000)그리고 그 다음에는, "잠을 취하라. 휴면시간이 1 밀리초 미만인 동작을 지원합니다.Sleep(0.1)◎ 최소 변수를 지원합니다0.000001, 나노초 단위 잠잠. 1 나노초는1e-6: :

주의: 사용중Python언어 정책을 작성할 때, 쿼리 간격, 시간 대기 동작에 사용되어야 합니다.Sleep(Millisecond)함수. 사용은 권장하지 않습니다.Python이 모든 것은time큐의time.sleep(second)함수. 정책에서 사용되기 때문에time.sleep(second)이 함수들은 때 정책 프로그램을 실제로 몇 초 동안 기다리게 합니다.second이 함수는 정지된 초수를 설정하는 함수입니다.) 이 때문에 정책 재검토는 매우 느립니다.

가상 (virtual)

IsVirtual(), 현재 정책이 모형 재검토를 위해 실행되는지 판단합니다. 귀환 값: 타입. 모의 검색 상태 반환true실제 디스크가 돌아왔습니다.false

우편 ((...)

Mail(smtpServer, smtpUsername, smtpPassword, mailTo, title, body), 메일 전송 함수↑ 파라그램 값: 파라그램 모두 문자열 타입이다。 반환 값: 형, 전송 성공 반환truesmtpServer우편을 보내기 위해smtp서비스,smtpUsername이 글은 이글에 쓰여진 것입니다.smtpPassword이메일의 SMTP 비밀번호 (우편번호가 아닌 SMTP 비밀번호)mailTo이 메일에는 이글로 된 메일과 같은 메일들이 있습니다.title이 메일 제목은body이메일의 내용은 다음과 같습니다.

function main(){
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
}
def main():
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")

더 많은

qq89520C 함수에서 한 번만 반복하는 것이 문제입니다

와 와_C ((function, args...) 이 기본값은 3s입니까? 기본값을 변경하여 바로 _CDelay ((1000) 를 C ((function, args...) 이전에 설정할 수 있습니까? 한 번 설정해도 될까요?

하이클러스터: 만약 여러분이 1000개의 로봇을 동시에 만들 수 있다면, 또한 스트레스를 받지 않고도, 여러 개의 관리자를 만들 수 있습니다. 클러스터를 만드는 데 코드 예가 있습니까? 여러 호스트를 구축하여 작업을 분산하는 방법

뱅지1log ((talib.help (('MACD')); js에서만 사용할 수 있으며, 파이썬에서는 talib.help 속성이 없습니다.

cjz140_C (function, args...) 와 Sleep (Sleep) 의 차이점은 무엇일까요?

3263243ySetErrorFilter를 사용하다가 ErrorFilter를 어떻게 비어낼까요?

qq47898077만약 제3자 라이브러리를 이용하고 싶다면 어떻게 해야 할까요?

qq47898077만약 거래소 객체가 새로운 클래스를 정의하는 것을 계승하고자 한다면, 부모 클래스는 무엇을 채워야 하는가?

에탄우이 사이트는 다른 사이트와 비교해 볼 수 있습니다.

그 exange.IO (exange.IO "status") 는?

왜 sell의 함수가 회색으로 표시되는가? by가 사용할 수 있다면 어떻게 팔 수 있습니까?

왜 sell의 함수가 회색으로 표시되는가? by가 사용할 수 있다면 어떻게 팔 수 있습니까?

js는 언어학이 없는데, 哈哈哈.

js는 언어학이 없는데, 哈哈哈.

Don.분량의 중간선을 어떻게 써야 할까요?

쥬트르트시장 가격에 교환을 구매합니다.Buy ((1000) 성공하지 않으면 무엇을 반환합니까?

닌자쿠새로운 글꼴이 멋지네요.

해마Bitmex의 테스트 네트워크 ((testnet.bitmex.com) 에서도 API 인터페이스가 존재하지만 현재 거래소는 Bitmex 본부를 선택할 수 있으며 API 문서 주소는 https://testnet.bitmex.com/app/apiOverview입니다. 어떻게 지원할 수 있을까요?

cxjijinvar ret1 = exchanges[0].IO (("api", "future_estimated_price", "symbol=btc_usd"); 로그 (('ok 선물 예상 거래 가격', ret1); https://dn-filebox.qbox.me/d1ed268c1e75753c5d289447d279aa9d81e41b5f.png 다른 거래소의 기능 인터페이스를 호출하여 오류를 작성하는 이유는 무엇입니까?

알렌프로스트라인realTicker와 Ticker의 차이점은 무엇입니까? 최근에는 리얼티커와 리얼티커 API에서 언급되지 않은 두 가지 전략이 동시에 등장했습니다.

비전안녕하세요. 파이썬 개발자로서, 여러분의 API 문서가 무엇을 쓰고 있다고 생각하십니까? 필드 함수 인터페이스가 약간 이상해 보이지만, githubpage와 readdocs처럼 문서를 쓸 수 있나요?

알렌프로스트라인GetAccount: [EAPI: Rate limit exceeded] 어떻게 해결되는지 궁금합니다?

zhjx2314StochRSI가 지원되지 않습니다.

yhfggPython 정책 리얼 디스크에서 스크립트는 자신의 Ali 클라우드 서버 또는 botvs 클러스터에 있습니까?

yhfgg어떤 버전의 파이썬을 사용하시나요?

아예GetFee의 설명은 가 하나의 Fee 구조 을 반환하고, 하나의 구성자를 빼는 것이라고 생각됩니다.

zkwapjs에서 Talib를 호출하는 방법

yhfggpython 문서를 검색합니다

wmjbs123전략 편집자의 코드 배경은 검은색이 될 수 있습니까? 흰색 톱니, 밤에 코드를 작성하고 근시하기 쉽습니다.

Don.로봇의 WeChat 게시물에서 요약은 어떻게 설정합니까?

미쳤어요주문 (Order) 구조에 거래의 정비값 필드를 추가할 수 있습니까?

작은 것GetOrders: 모든 미완성 주문을 가져오기, Order 배열 구조를 반환하기, 중국 비트코인 거래에서 ETH, 가장 최근의 10 항목만 반환합니다. 여기에 중국 비트코인 ETH의 모든 미완성 주문을 반환하는 함수가 있습니까?

yhfgg통계 확률 이론에 필요한 수학 함수들은 어디서 사용되나요?

이 함수의 값은 $Cross (x, y) 입니다.

제 할머니는이 로그리셋은 모든 로그를 비워버립니다. 어떻게 하면 최근 몇 개의 로그를 삭제할 수 있을까요?

에드워드talib에서 CORRE 함수는 이식되지 않은 것처럼 보이거나 놓쳤습니까?

가난한 산에 있는 이 지표에 대한 참조 기능이 없는 것 같습니다.

작은 것이 k 라인 시간을 읽고 지금 시간으로 번역하는 방법 아, 이해가 안 돼, 너무 길어, 해결, 감사합니다

작은 것소수에서 숫자를 삭제하는 방법을 어떻게 쓸지, 저는 records.remove ((records[0]) 를 사용해서

스네키야우일반적으로는 시간 K선으로, 어떻게 일 K선의 ATR를 호출합니까?

스네키야우일반적으로는 시간 K선으로, 어떻게 일 K선의 ATR를 호출합니까?

57278863전통적인 선물의 가격과 주문을 얻는 방법을 배우십시오. 죄송합니다. 뿌리가 얇습니다.

키린이 자리에서 우리는 이 자리에서 다른 사람들을 만나게 될 것입니다.

작은 것제로, 전통적인 선물 거래의 예를 써줄 수 있나요?

작은 것복수 빈单을 동시에 보유할 때, 보유 상태를 어떻게 인쇄하느냐, 나의 인쇄 방식은 [object object][object object], 복수单과 빈单 보유 상태를 어떻게 얻을 것인가, 그리고 GetTicker ((), 그 주, 다음 주, 그리고 분기 모두 어떻게 얻을 것인가.

cxjijin선물 거래소는 GetTicker (,) 를 사용하여 시장을 얻을 수 있습니까?

팔아치워StochRSI는 어떤 지표를 추가할 수 있을까요?

모박스CancelOrder (orderId) 는 주문 번호에 따라 주문을 취소하고 true 또는 false를 반환합니다. true= 셀이 성공적으로 취소되었습니다.

모박스_G(K, V) 저장할 수 있는 글로벌 사전 목록 이 방법은 저장할 수 있는 글로벌 변수를 사용해서 다른 정책들 사이에서 데이터를 공유할 수 있는가?

플루피3D인기를 끌고

제로로그프로프리트리셋을 사용하여 수익 로그를 다시 설정할 수 있습니다. 이전 수익 차트의 역사는 사라집니다.

xy이 EA를 직접 복사할 수 있을까요?

스라이론맨이 플랫폼이 정말 멋지고, 정말 멋지고, 더 많은 사람들이 함께 소통하는 것 같아요.

작은 것이 언어는 어떤 언어이고, 학습 자료가 있나요?

jxhbtc데이터 오류 일주일 동안 로봇을 연결할 수 없습니다

이 지표는 단지 종결 가격을 계산하기 위한 지표가 아닌가요?

btcrobot안녕, 세상

작은 꿈_C 함수는 성공적으로 결과를 얻을 때까지 다시 시도합니다.

작은 꿈python의 talib 라이브러리는 설치가 필요합니다.https://www.botvs.com/bbs-topic/669 이 게시물을 참조하십시오.

작은 꿈Sleep는 프로그램이 아무 것도 하지 않고, 매개 변수가 설정되는 것을 기다리는 밀리초 수, _C는 매개 변수를 한 번 다시 호출하는 함수이다.

작은 꿈상속을 하지 않고 JS를 직접 객체에 엮어버린다.

작은 꿈로컬 편집기 원격 동기화 플러그인, 기본적으로 로컬 편집기 원격 오디션.

작은 꿈QQ 그룹에 오셔서,^^ 쉽게 토론하실 수 있습니다~

작은 꿈API 문헌에서 회색은 함수가 너무 많은 설명이 없이 회색, 파란색의 대표자가 더 많은 설명이 있고, 그것뿐이라는 것을 의미합니다.

작은 꿈ES6는 현재 지원되지 않습니다 ^^

작은 꿈QQ 그룹에 가서 문제를 설명해줘, 내가 대답해줄게 ^^

작은 꿈이 문서는 바로 오류를 반환하고 주문을 하지 않습니다. (사실 구매하기 위해 돈이 충분하지 않습니다!)

쥬트르트예를 들어, OKCoin, 만약 구매한 금액이 보유한 인민 화폐보다 많다면 어떤 수익을 올릴까요?

작은 꿈그리고 어떤 거래소에서 제가 OK 선물에서 주문 번호를 돌려보낼까요?

제로이미 실행 중인 트랜잭션 전환을 지원하고 있으며 최신 호스트를 다운로드해야 합니다. 지원 Bter/Poloniex 자세한 API 문서 트랜잭션 함수 탭 아래의 설명 (검색자 캐시를 비어 후 갱신하지 않으면 보이지 않습니다)

작은 꿈QQ, 제가 도와드릴게요.

직업적인 가정화이트리스트를 설정해야 합니다. 저는 호스트의 IP를 설정합니다.

작은 꿈이것은 하위 링크입니다. 설치되지 않았습니다. 서버가 응답하지 않았습니다. API KEY를 요청할 때 IP 주소를 설정해야합니까?

직업적인 가정이것은 당황스럽습니다... 제가 실행할 수 있는 전략은 비트 시대부터 고장 났고, GetAccount도 GetAccount에 액세스 할 수 없습니다: 포스트 http://api.btc38.com/v1/getMyBalance.php: read tcp 192.168.0.227:58596->211.149.148.144:80: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 2017-05-23 21:08:24 비트 시대 오류 GetAccount: timeout 2017-05-23 21:08:02 비트 시대 오류 GetAccount: timeout 2017-05-23 21:07:40 비트 시대 오류 GetAccount: timeout 2017-05-23 21:07:20 다시 시작 IP 화이트리스트 문제인가요?

작은 꿈거래소의 서버는 응답하지 않았고, TCP 프로토콜은 세 번이나 악수되지 않았습니다.

직업적인 가정A connection attempt failed because the connected party did not properly respond after a period of time. A connection attempt failed because the connected party did not properly respond after a period of time. A connection attempt failed because the connected party did not properly respond after a period of time. A connection attempt failed because the connected party did not properly respond after a period of time. A connection attempt failed because the connected party did not properly respond after a period of time. A connection attempt failed because the connected party did not properly respond after a period of time.

작은 꿈안녕하세요! exchange.IO (api, ApiName, Args) 의 함수가 지원되지 않습니다. https://www.botvs.com/bbs-topic/812

직업적인 가정연결 시도가 실패한 이유는 연결된 당사자가 일정 기간 후에 제대로 응답하지 않았기 때문입니다.

직업적인 가정비트 시대가 지지하지 않나요?

작은 꿈https://dn-filebox.qbox.me/a709b30c6cc0a3565234b9e0c99b073f7ba8b454.png 이 글은 이쪽에서 읽었습니다.

닌자쿠예를 들어, 나는 폴로니엑스 (poloniex) 의 모든 통화 거래를 하고 싶지만, BOTvs (BOTvs) 가 지원하는 화폐는 몇 개 밖에 없으며, exchange.IO는 P 네트워크를 지원하지 않는 것 같습니다.

작은 꿈이 경우, 이 화면은 Exchange.IO를 호출할 수 있습니다.

닌자쿠어떤 API가 계정 검증을 필요로 할까요?

작은 꿈계정 검증이 필요하지 않은 API는 httpQuery (BotVS 문서를 참조하십시오) 를 사용할 수 있으며 실제 거래 API는 액세스해야합니다.

작은 꿈HttpQuery API를 사용하여 매개 변수를 전송할 수 있습니다: https://www.okcoin.com/api/v1/future_estimated_price.do?symbol=btc_usd, 이렇게 하면 됩니다. 계정 검증이 필요하지 않은 계정 API의 경우 플랫폼의 HttpQuery 함수를 직접 사용하여 계정과 관련된 경우 IO API를 사용합니다. 포스팅: https://www.botvs.com/bbs-topic/850

비전좋은 감사합니다. 좋은 API 문서를 기대합니다.

작은 꿈이 API를 어디서 보았는지 알려주세요.

작은 꿈https://dn-filebox.qbox.me/fe1a6f5563ed43a5357f858ecf8a50239619228e.png API 문서는 자바스크립트 언어로 설명되어 있으며, 파이썬 버전은 커뮤니케이션 커뮤니티 페이지의 꼭대기에 설명되어 있습니다.

제로안녕하세요, 제안에 감사드립니다. 현재 API 문서는 재구성 중입니다.

작은 꿈안녕하세요~ 접속 빈도가 제한을 넘었다는 표시입니다. https://dn-filebox.qbox.me/a09498920d04cac62624b7438a058d2098d8fb00.png 정책에서 Sleep (1000) 함수를 사용했습니까? 이 1000은 프로그램을 회당 1초 중단시키는 것입니다. 자체적으로 설정할 수 있습니다. 목적은 프로그램을 제어하는 것입니다. API에 액세스하는 빈도, 일부 거래소가 최대 액세스 제한을 설정하기 때문에 특정 방문 횟수를 초과하는 특정 시간이 액세스 거부, IP 주소를 차단합니다.

작은 꿈https://dn-filebox.qbox.me/c29ab7fc279e1b758355f137907cf52dc8257df6.png 제가 개인적으로 쓴 글은 STOCHRSI 지표와 비교해봤는데, 평론에 따르면, 속도가 약간 느리고 최적화되어 있고, 일시적으로 사용할 수 있습니다.

제로botvs가 제공하는 서버에서 다시 테스트를 하거나 자신의 호스트가 있는 서버에서 다시 테스트를 선택할 수 있습니다. 버전은 2.7.5입니다.

작은 꿈이 글은 현재 추가된 글입니다.

작은 꿈이제 배경 스타일을 직접 설정할 수 있습니다.

작은 꿈파이썬 문서가 작성되고 있습니다.

작은 꿈알리바의 문헌을 참고하세요.

hzzgood48 https://www.botvs.com/bbs-topic/276

작은 꿈이 경우, 이 경우, 이 경우, 이 경우, 이 경우, 이 경우.

제로오더의 AVGPrice 속성에 접근하면 거래소가 지원할 수 있고 지원하지 않는 거래소는 0으로 유지됩니다.

yhfgg제3자 자료는 어떻게 인용합니까?

제로mathjs가 만족할 수 없다면, 3자 라이브러리 복제입 정책만 찾아볼 수 있다. 컴파일 속도를 위해, 시스템은 일부 라이브러리만을 내장했다.

작은 꿈"이봐요, 이봐요, 이봐요, 이봐요, 이봐요, 이봐요.

감사합니다.

작은 꿈그룹에서? 당신은 설명서 버전의 디지털 통화 거래 클래스 코드 분석을 볼 수 있습니다. 그 안에 $.Cross 함수의 설명이 있습니다.

제로가장 최근의 항목을 삭제할 수 없고, 최신 몇 개만 유지할 수 있습니다.

키린포지션[i]를 사용하여 모든 포지션을 얻으려면 포지션은 대수입니다.

닌자쿠exchange.GetRecords ((PERIOD_D1));

키린내 전통적인 선물은 항상 "GetAccount: not login", "패드 잘못 입력되지 않았다면 로그인 할 수 없습니다".

제로기본값은 주입니다. 지정된 SetContractType를 얻기 위해서는 먼저 SetContractType가 필요합니다.

제로보시다시피, true는 거래소가 반환하는 취소 명령의 반환 값입니다. 하지만 실제로는 취소되지 않습니다.

모박스3q

제로잠시 동안은 그렇지 않노라

수안물론, MT4의 전용입니다.

제로자바스크립트 자료는 인터넷 상에 있습니다.

팔아치워네 문제가 해결됐나요?

제로대부분의 경우, 입력된 데이터는 직접 기록 또는 순수 가격의 배열이 될 수 있습니다.