어떻게 오래된 전략을 웹소켓 인용 인터페이스를 도킹하는 것을 가르쳐

저자:선함, 2019-10-08 14:56:58, 업데이트: 2023-11-06 19:41:28

img

이 페이지에는 많은 흥미로운 전략이 있습니다 (https://www.fmz.com/square그 당시 대부분의 암호화폐 거래소 API 인터페이스는rest많은 전략은rest또한 거래소에서 코트 업데이트가 느린 경우도 있습니다.rest인터페이스가 가까운 미래에 실패한 결과 전략이 제대로 작동하지 않습니다.

전략이 수정되는 한, 웹소켓 인터페이스에 대한 지원을 추가하는 것은 전략 코드에 몇 가지 변경을 요구하며, 이는 일반적으로 상당히 번거로울 수 있습니다 (전략을 변경하는 어려움은 다시 쓰는 것보다 훨씬 높습니다).

어떻게 전략 코드를 변경하지 않고 웹소켓 시장 코트 인터페이스를 사용할 수 있습니까?

여기 FMZ 퀀트 플랫폼의 모든 유연성이 있습니다.

  • 전략 템플릿 클래스 라이브러리을 사용하십시오.

  • 거래소 코팅을 위한 호크 (Hook) 거래를 수행하는 기능exchange.GetTicker.

따라서, 전략 코드를 변경하지 않고,websocket시장 인터페이스

코드 작성 언어는 자바스크립트 프로그래밍 언어를 사용합니다.

분석 전략

예를 들어, 우리가 고전적인 전략을 수정해야 할 때

전략 주소:https://www.fmz.com/strategy/9929

전략 코드를 살펴보고 전략이tick시장 가격. 그것은 주로Buy, Sell, 그리고Lastticker데이터tickerFMZ Quant 플랫폼의 API 함수에서 데이터를 얻습니다.exchange.GetTicker이제 목표가 명확해졌어요exchange.GetTicker함수Hook동작 (즉 다른 버전으로 대체)

그러나 우리는 그것을 "아이스브레이커" 전략 코드에서 다시 쓸 수 없습니다, 그것은 전략 논리에 영향을 미칠 것입니다, 우리는 웹 소켓에 원활한 도킹을 원합니다!

그래서 다음 주인공이 데뷔해야 합니다.

템플릿 클래스 라이브러리 함수와 init 함수가 함께 작동

우리는 템플릿 클래스 라이브러리을 만들 수 있습니다: SeamlessConnWS

img

다음 2 매개 변수를 설정SeamlessConnWS template.

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

img

이 둘은websocket이 문서의 한계 때문에, 우리는 단지 preformhook대행exchange.GetTicker인터페이스. 따라서 우리는 매개 변수를 활성화해야 합니다.Hook_GetTicker) 의GetTicker인터페이스websocket mode.

일단 템플릿이 생성되면, 우리는 교환에 대한 특정 액세스를 쓸 수 있습니다websocket템플릿에 인터페이스, 특정 인용구에 가입, 그리고 교환의 기능 코드를 데이터를 푸시하기 위해 기다립니다. 특정 코드는 여기에 설명되지 않습니다, 당신은 참조할 수 있습니다SeamlessConnWS코드 (이미 오픈 소스) 및 FMZ Quant 공식 API 문서.init템플릿에 있는 함수와 글로벌 변수_DictConnectCreater, _ConnMap:

코드 부분:

var _DictConnectCreater = {
    "Huobi" : WSConnecter_Huobi,
    "Binance" : WSConnecter_Binance,
}

var _ConnMap = {}

function init () {
    if (IsUsedWebSocket) {
        var connectCreater = null
        if (exchanges.length != 1) {
            Log("Switching to the ws interface only for the "exchange" exchange object (ie, the first added exchange object)")
        }
        var isFound = false 
        for (var name in _DictConnectCreater) {
            if (exchange.GetName() == name) {
                connectCreater = _DictConnectCreater[name]
                isFound = true
            }
        }

        if (!isFound) {
            throw "Did not find an implementation"
        }
        
        if (Hook_GetTicker) {
            var symbol = exchange.GetCurrency()
            _ConnMap.GetTicker = connectCreater("GetTicker", symbol)
            exchange.GetTicker = function () {
                return _C(_ConnMap.GetTicker.Read)
            }
        }
        // ... 
        
    }
}

이 템플릿은websocket두 거래소의 시장 인터페이스, 즉 Binance와 Huobi.init아이스브레이커 전략이SeamlessConnWS템플릿init실제 시장 실행 진행 중에 먼저 실행됩니다.

우리는 그 내용을 대체 할 수 있습니다exchange.GetTicker함수와 함께websocket인터페이스, 따라서 웹 소켓 시장에 원활한 도킹을 달성.

SeamlessConnWS템플릿 주소https://www.fmz.com/strategy/167755

사용 방법

케이크 한 조각!SeamlessConnWS 아이스브레이커 전략을 사용해서 참조할 수 있습니다.

img

템플릿을 확인하고 저장 버튼을 클릭하세요.

아이스브레이커 전략 실시간 로봇을 만들면 거래소가 거래 쌍을 선택합니다.

img

제어 매개 변수를 열기SeamlessConnWS template.

img

실행해:

img

푸시드 데이터를 쉽게 볼 수 있도록 157호선에는 프린트 로그 코드를 추가했습니다. 이는 교환에서 푸시드 데이터를 출력합니다.

img

로봇 로그에 표시:

img

이 방법으로, 우리는 전략 코드의 어떤 라인도 수정할 필요가 없습니다,websocket시장 인터페이스

이 예제는 단지exchange.GetTicker시장 인터페이스 기능, 다른 시장 인터페이스exchange.GetDepth, exchange.GetTrades그리고exchange.GetRecords같은 루틴입니다! 표준 템플릿을 위해SeamlessConnWS, 당신은 그것을 더 확장 시도할 수 있습니다.

특별 연결을 구현하기 위해websocket템플릿에서Dial기능 (디얼 기능에 대한 API 문서를 참조), 필요에 따라 조정할 수 있습니다. 예를 들어, 당신은 파라미터 -2를 지정 할 수 있습니다read()이 함수는 버퍼의 최신 데이터만 반환합니다.websocket연결이 허용됩니다.

읽어주셔서 감사합니다


관련

더 많은