Sample code for 30+ languages & platforms
Lianja

WebSocket Binance Trade Stream (subscribe and receive updates)

See more WebSocket Examples

Subscribe to a binance trade stream and receive updates.

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

loWs = createobject("CkWebSocket")

// For brevity, this example does not check for errors when etablishing the WebSocket connection.
// See Establish WebSocket Connection for more complete sample code for making the connection.

loRest = createobject("CkRest")

// Connect to wss://stream.binance.com:9443
llSuccess = loRest.Connect("stream.binance.com",9443,.T.,.F.)
if (llSuccess = .F.) then
    ? loRest.LastErrorText
    release loWs
    release loRest
    return
endif

llSuccess = loWs.UseConnection(loRest)
if (llSuccess = .F.) then
    ? loWs.LastErrorText
    release loWs
    release loRest
    return
endif

loWs.AddClientHeaders()

//  Raw streams are accessed at /ws/<streamName>
lcResponseBody = loRest.FullRequestNoBody("GET","/ws/btcusdt")
if (loRest.LastMethodSuccess = .F.) then
    ? loRest.LastErrorText
    release loWs
    release loRest
    return
endif

llSuccess = loWs.ValidateServerHandshake()
if (llSuccess <> .T.) then
    ? loWs.LastErrorText
    ? lcResponseBody
    ? loRest.ResponseHeader
    release loWs
    release loRest
    return
endif

? lcResponseBody
? loRest.ResponseHeader

// POST JSON to subscribe to a stream

// {
// "method": "SUBSCRIBE",
// "params":
// [
// "btcusdt@aggTrade",
// "btcusdt@depth"
// ],
// "id": 1
// }

loJson = createobject("CkJsonObject")
loJson.UpdateString("method","SUBSCRIBE")
loJson.UpdateString("params[0]","btcusdt@aggTrade")
loJson.UpdateString("params[1]","btcusdt@depth")
loJson.UpdateInt("id",1)

// Send a full message in a single frame
llFinalFrame = .T.
llSuccess = loWs.SendFrame(loJson.Emit(),llFinalFrame)
if (llSuccess <> .T.) then
    ? loWs.LastErrorText
    release loWs
    release loRest
    release loJson
    return
endif

loJsonTradeData = createobject("CkJsonObject")
loJsonTradeData.EmitCompact = .F.

// Begin reading the trade stream response.
// We'll just read the 1st 10 updates and then exit..
llReceivedFinalFrame = .F.
lnNumTradesReceived = 0
do while lnNumTradesReceived < 5

    llSuccess = loWs.ReadFrame()
    if (llSuccess <> .T.) then
        ? "Failed to receive a frame"
        ? "ReadFrame fail reason = " + str(loWs.ReadFrameFailReason)
        ? loWs.LastErrorText
        release loWs
        release loRest
        release loJson
        release loJsonTradeData
        return
    endif

    // The responses we desire are in Text frames, where the opcode = 1.
    if (loWs.FrameOpcodeInt = 1) then
        lcReceivedJson = loWs.GetFrameData()

        loJsonTradeData.Load(lcReceivedJson)
        ? loJsonTradeData.Emit()

        lnNumTradesReceived = lnNumTradesReceived + 1
    endif

enddo

// Close the websocket connection.
llSuccess = loWs.SendClose(.T.,1000,"Closing this websocket.")
if (llSuccess <> .T.) then
    ? loWs.LastErrorText
    release loWs
    release loRest
    release loJson
    release loJsonTradeData
    return
endif

// Read the Close response.
llSuccess = loWs.ReadFrame()
if (llSuccess <> .T.) then
    ? "ReadFrame fail reason = " + str(loWs.ReadFrameFailReason)
    ? loWs.LastErrorText
    release loWs
    release loRest
    release loJson
    release loJsonTradeData
    return
endif

? "Success."

// The output of the above code is shown here:


release loWs
release loRest
release loJson
release loJsonTradeData