Sample code for 30+ languages & platforms
Lua

Binary.com Tick Stream

See more WebSocket Examples

Tick Stream Request -- Initiate a continuous stream of spot price updates for a given symbol.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

local ws = chilkat.WebSocket.new()

-- 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.

local rest = chilkat.Rest.new()

-- Connect to ws.binaryws.com
local success = rest:connect("ws.binaryws.com", 443, true, false)
ws:use_connection(rest)
ws:add_client_headers()

-- My app_id is 12332.  You'll wnat to use your own...
local responseBody = rest:full_request_no_body("GET", "/websockets/v3?app_id=12332")
success = ws:validate_server_handshake()
if not success then
    print(ws.last_error_text)
    print(responseBody)
    print(rest.response_header)
    return
end

-- Build and send the following message:

-- {
--   "ticks": "R_50",
--   "subscribe": 1
-- }

local json = chilkat.JsonObject.new()
json:append_string("ticks", "R_50")
json:append_int("subscribe", 1)

-- Send a full message in a single frame
local finalFrame = true
success = ws:send_frame(json:emit(), finalFrame)
if not success then
    print(ws.last_error_text)
    return
end

local jsonTickData = chilkat.JsonObject.new()
jsonTickData.emit_compact = false

-- Begin reading the tick stream response.
-- We'll just read the 1st 10 updates and then exit..
local receivedFinalFrame = false
local numTicksReceived = 0
while numTicksReceived < 5 do
    success = ws:read_frame()
    if not success then
        print("Failed to receive a frame")
        print("ReadFrame fail reason = " .. ws.read_frame_fail_reason)
        print(ws.last_error_text)
        return
    end

    -- The responses we desire are in Text frames, where the opcode = 1.
    if ws.frame_opcode_int == 1 then
        local receivedJson = ws:get_frame_data()

        jsonTickData:load(receivedJson)
        print(jsonTickData:emit())

        numTicksReceived = numTicksReceived + 1
    end
end

-- Close the websocket connection.
success = ws:send_close(true, 1000, "Closing this websocket.")
if not success then
    print(ws.last_error_text)
    return
end

-- Read the Close response.
success = ws:read_frame()
if not success then
    print("ReadFrame fail reason = " .. ws.read_frame_fail_reason)
    print(ws.last_error_text)
    return
end

print("Success.")

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

-- {
--   "echo_req": {
--     "subscribe": 1,
--     "ticks": "R_50"
--   },
--   "msg_type": "tick",
--   "tick": {
--     "ask": "373.8725",
--     "bid": "373.8325",
--     "epoch": "1517437456",
--     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
--     "quote": "373.8525",
--     "symbol": "R_50"
--   }
-- }
--
-- {
--   "echo_req": {
--     "subscribe": 1,
--     "ticks": "R_50"
--   },
--   "msg_type": "tick",
--   "tick": {
--     "ask": "373.7952",
--     "bid": "373.7552",
--     "epoch": "1517437458",
--     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
--     "quote": "373.7752",
--     "symbol": "R_50"
--   }
-- }
--
-- {
--   "echo_req": {
--     "subscribe": 1,
--     "ticks": "R_50"
--   },
--   "msg_type": "tick",
--   "tick": {
--     "ask": "373.8638",
--     "bid": "373.8238",
--     "epoch": "1517437460",
--     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
--     "quote": "373.8438",
--     "symbol": "R_50"
--   }
-- }
--
-- {
--   "echo_req": {
--     "subscribe": 1,
--     "ticks": "R_50"
--   },
--   "msg_type": "tick",
--   "tick": {
--     "ask": "373.7636",
--     "bid": "373.7236",
--     "epoch": "1517437462",
--     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
--     "quote": "373.7436",
--     "symbol": "R_50"
--   }
-- }
--
-- {
--   "echo_req": {
--     "subscribe": 1,
--     "ticks": "R_50"
--   },
--   "msg_type": "tick",
--   "tick": {
--     "ask": "373.6870",
--     "bid": "373.6470",
--     "epoch": "1517437464",
--     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
--     "quote": "373.6670",
--     "symbol": "R_50"
--   }
-- }
--
-- Success.