재화 선물 거래소와 암호화폐 거래소 API의 유사성과 차이점

저자:선함, 2019-09-28 10:22:34, 업데이트: 2023-11-06 20:01:39

img

상품 선물 CTP와 암호화폐 API 거래소는 상당한 차이를 가지고 있습니다. 암호화폐 거래소 프로그래밍 거래에 익숙한 것은 상품 선물 CTP 프로그래밍에 익숙한 것을 의미하지는 않습니다. 우리는 단순히 방법과 경험을 복사할 수 없습니다. 이 기사는 그들 사이의 유사성과 차이점을 요약합니다.

역사 자료

CTP 인터페이스는 역사적 시장 코트를 제공하지 않으며, 역사적 시장 코트는 시장 코팅 에이전시를 통해 해결해야합니다. 로그인 실패로 인해 시장 데이터가 손실되면 CTP는 시장 보충 메커니즘을 제공하지 않습니다. 역사적 시장 코트는 제3자 에이전시를 통해만 얻을 수 있습니다. 대부분의 암호화폐 거래소는 일반적으로 K-라인 및 거래 역사를 얻기 위해 인터페이스를 제공합니다.

다른 합의

암호화폐 교환 API는 일반적으로REST그리고websocketCTP는 네트워크 관련 논리를 내부적으로 캡슐화하고 TCP 프로토콜에 기반한 FTD 프로토콜을 사용하여 CTP 배경과 통신합니다. 세 가지 모드로 나뉘어 있습니다:

  • 요청 응답 모드: 클라이언트가 요청을 시작하고 CTP 배경은 요청을 수신하고 응답합니다.

  • 방송 통신 모드: 고객이 계약 시장 코팅에 가입 한 후 CTP는 시장 코팅을 방송을 통해 밀어냅니다.

  • 개인 통신 모드: 클라이언트가 계약을 주문 한 후, 주문 정보, 거래 반환 등은 CTP가 포인트에서 포인트로 밀어줍니다.

CTP 계약의 모든 코트 및 주문 거래는 변경 후 통지되며, 문의 주문, 계정 및 포지션은 적극적으로 문의됩니다. 위의 세 가지 모드는 암호화폐 거래소 API에서 유사한 형태를 찾을 수 있습니다.

다른 수준의 데이터

CTP 프로토콜의 깊이는 최신 구매 및 판매 가격, 구매 및 판매 가격의 다섯 계층과 같은 더 깊은 시장 코팅이 비싸다, 당신은 그것을 얻기 위해 선물 거래소에 추가 돈을 지불해야합니다. 다른 한편, 암호화폐 거래소는 일반적으로 구매 및 판매 가격의 200 계층까지 완전한 깊이를 얻을 수 있습니다.

또한, CTP는 실제 거래 코트를 밀어 넣지 않으며, 위치 변경으로만 역행할 수 있으며, 암호화폐 거래 API는 실제 상세한 거래 코트를 얻을 수 있습니다. CTP 플랫폼의 시장 데이터 틱 레벨은 초당 2 틱입니다. 대부분의 암호화폐 거래소 웹소켓은 초당 10 틱까지 할 수 있습니다.

다른 접근 제한

암호화폐 거래소는 일반적으로 초당 10 틱으로 제한됩니다. 주문 인출에 대한 특별한 요구 사항은 없습니다. CTP는 적극적으로 전송해야하는 요청에 대한 엄격한 제한을 가지고 있습니다. 일반적으로 2 초에 한 번은 상당히 안전하며 인출 수에 대한 요구 사항도 있습니다.

안정성

CTP 프로토콜은 매우 안정적이며 오류 또는 네트워크 문제가 거의 없습니다. 암호화폐 교환이 제한이 적고 거래 시간이 길어지기 때문에 시스템 유지보수, 데이터 지연 및 네트워크 오류가 매우 일반적입니다.

FMZ 퀀트 플랫폼 CTP 프로토콜 우수 사례

CTP 기본 모드와 같은 시장 인터페이스를 얻기 위해GetTicker, GetDepth, GetRecords최신 데이터를 얻기 위해 캐시 데이터입니다, 데이터가 없을 경우 데이터가 있을 때까지 기다립니다, 그래서 전략은 사용할 수 없습니다Sleep시장 코트 변화가 있을 때,ticker, depth, 그리고records이 시점에서, 어떤 인터페이스도 호출될 때 즉시 반환됩니다. 그런 다음 호출 된 인터페이스 상태는 업데이트 모드를 기다리기 위해 설정됩니다. 다음 번에 동일한 인터페이스가 호출되면 새로운 데이터가 반환 될 때까지 기다립니다.

일부 인기가없는 거래 계약 또는 가격이 매일 제한된 가격에 도달하면 거래 활동없이 오랫동안 발생할 수 있습니다. 전략이 오랫동안 고정되는 것은 정상입니다.

만약 당신이 시장 코트를 얻을 때마다 데이터를 얻고 싶다면, 심지어는 오래된 데이터, 당신은 시장 즉시 업데이트 모드로 전환할 수 있습니다exchange.IO ("mode", 0)이 시점에서, 전략은 이벤트 드라이버로 작성할 수 없습니다. 당신은 추가해야 합니다SLeep빠른 무한 루프를 피하기 위해 이벤트. 일부 낮은 주파수 전략은이 모드를 사용할 수 있습니다, 그리고 전략 디자인은 간단합니다.exchange.IO("mode", 1)기본 캐시 모드로 다시 전환합니다.

단일 계약을 작동 할 때 기본 모드를 사용하면 좋습니다. 그러나 여러 거래 계약이있는 경우 하나의 계약이 업데이트되지 않아 시장 인터페이스가 차단되고 다른 거래 계약 코트 시장 업데이트가 사용할 수 없습니다. 이 문제를 해결하려면 즉각 업데이트 모드를 사용할 수 있지만 높은 빈도 전략을 작성하는 것이 편리하지 않습니다. 이 시점에서 이벤트 푸시 모드를 사용하여 주문과 코트를 푸시 할 수 있습니다. 설정 방법은exchange.IO("wait")여러 교환 객체가 추가되면, 이것은 재화 선물 거래에서 드문 상황입니다, 당신은 사용할 수 있습니다exchange.IO ("wait_any"), 그리고 반환index반환 교환의 지수를 표시합니다.

시장 코팅tick변경 버튼:

{Event:"tick", Index: exchange index (in the order of robot exchange added), Nano: event nanosecond time, Symbol: contract name}

명령어 밀어

{Event:"order", Index: Exchange Index, Nano: Event Nanosecond Time, Order: Order Information (consistent with GetOrder)}

이 시점에서 전략 구조는 다음과 같이 쓸 수 있습니다.

function on_tick(symbol){
     Log("symbol update")
     exchange.SetContractType(symbol)
     Log(exchange.GetTicker())
}

function on_order(order){
     Log("order update", order)
}

function main(){
     while(true){
         if(exchange.IO("status")){ //Determine the link status
             exchange.IO("mode", 0)
             _C (exchange.SetContractType, "MA888") // subscribe to the MA, only the first time is the real request to send a subscription, the following are just program switch, won't consume any time.
             _C(exchange.SetContractType, "rb888") // Subscribe rb
             While(True){
                 Var e = exchange.IO("wait")
                 If(e){
                     If(e.event == "tick"){
                         On_tick(e.Symbol)
                     }else if(e.event == "order"){
                         On_order(e.Order)
                     }
                 }
            }
         }else{
             Sleep(10*1000)
         }
     }
}

관련

더 많은