OHLCV Candlesticks
What is this endpoint for?
This Stream delivers the OHLCV for an instrument on an exchange in real-time.
Parameters
Configuring a wildcard
A wildcard allows you to request all information we have on a specific instrument, class, or exchange in the same stream.
Use a *
in place of the relevant exchange
, instrument
, or class
parameter.
For example, the configuration below would deliver trades for BTC/USD across all exchanges where itâs supported:
exchange: *
class: spot
instrument: btc-usd
Fields
Request examples
Make sure to read our Python quick-start guide before starting.
# This is a code example. Configure your parameters in the parameter configuration section #
from __future__ import print_function
import logging
import os
import grpc
from google.protobuf.json_format import MessageToJson
from google.protobuf import duration_pb2
from kaikosdk import sdk_pb2_grpc
from kaikosdk.core import instrument_criteria_pb2, assets_pb2
from kaikosdk.stream.aggregates_ohlcv_v1 import request_pb2 as pb_ohlcv
from kaikosdk.stream.aggregates_vwap_v1 import request_pb2 as pb_vwap
from kaikosdk.stream.market_update_v1 import request_pb2 as pb_market_update
from kaikosdk.stream.market_update_v1 import commodity_pb2 as pb_commodity
from kaikosdk.stream.trades_v1 import request_pb2 as pb_trades
from kaikosdk.stream.index_v1 import request_pb2 as pb_index
from kaikosdk.stream.index_multi_assets_v1 import request_pb2 as pb_index_multi_assets
from kaikosdk.stream.index_forex_rate_v1 import request_pb2 as pb_index_forex_rate
from kaikosdk.stream.aggregated_quote_v2 import request_pb2 as pb_aggregated_quote
from kaikosdk.stream.aggregates_spot_exchange_rate_v2 import request_pb2 as pb_spot_exchange_rate
from kaikosdk.stream.aggregates_direct_exchange_rate_v2 import request_pb2 as pb_direct_exchange_rate
from kaikosdk.stream.derivatives_instrument_metrics_v1 import request_pb2 as pb_derivatives_instrument_metrics
from kaikosdk.stream.iv_svi_parameters_v1 import request_pb2 as pb_iv_svi_parameters
def ohlcv_request(channel: grpc.Channel):
try:
with channel:
stub = sdk_pb2_grpc.StreamAggregatesOHLCVServiceV1Stub(channel)
responses = stub.Subscribe(pb_ohlcv.StreamAggregatesOHLCVRequestV1(
# start of parameter configuration #
aggregate='1m',
instrument_criteria = instrument_criteria_pb2.InstrumentCriteria(
exchange = "cbse",
instrument_class = "spot",
code = "btc-usd"
)
))
# end of parameter configuration #
for response in responses:
print("Received message %s" % (MessageToJson(response, including_default_value_fields = True)))
# print("Received message %s" % list(map(lambda o: o.string_value, response.data.values)))
except grpc.RpcError as e:
print(e.details(), e.code())
def run():
credentials = grpc.ssl_channel_credentials(root_certificates=None)
call_credentials = grpc.access_token_call_credentials(os.environ['KAIKO_API_KEY'])
composite_credentials = grpc.composite_channel_credentials(credentials, call_credentials)
channel = grpc.secure_channel('gateway-v0-grpc.kaiko.ovh', composite_credentials)
ohlcv_request(channel)
if __name__ == '__main__':
logging.basicConfig()
run()
This example demonstrates how to request historical data using replay. The maximum amount of data you can request for one replay cannot exceed a total of 24 hours in hours
, seconds
, and minutes
.
Replay data is available on a 72-hour rolling basis and should only be used to retrieve missed data. If full history is required, please use Rest API or CSV deployment methods.
# This is a code example. Configure your parameters and dates in each section #
from __future__ import print_function
import logging
import grpc
import os
from google.protobuf.json_format import MessageToJson
from google.protobuf.timestamp_pb2 import Timestamp
import grpc
from google.protobuf.json_format import MessageToJson
from google.protobuf.timestamp_pb2 import Timestamp
from kaikosdk import sdk_pb2_grpc
from kaikosdk.core import instrument_criteria_pb2, assets_pb2
from kaikosdk.stream.aggregates_ohlcv_v1 import request_pb2 as pb_ohlcv
from kaikosdk.stream.aggregates_vwap_v1 import request_pb2 as pb_vwap
from kaikosdk.stream.market_update_v1 import request_pb2 as pb_market_update
from kaikosdk.stream.market_update_v1 import commodity_pb2 as pb_commodity
from kaikosdk.stream.trades_v1 import request_pb2 as pb_trades
from kaikosdk.stream.index_v1 import request_pb2 as pb_index
from kaikosdk.stream.index_multi_assets_v1 import request_pb2 as pb_index_multi_assets
from kaikosdk.stream.index_forex_rate_v1 import request_pb2 as pb_index_forex_rate
from kaikosdk.stream.aggregated_quote_v2 import request_pb2 as pb_aggregated_quote
from kaikosdk.stream.aggregates_spot_exchange_rate_v2 import request_pb2 as pb_spot_exchange_rate
from kaikosdk.stream.aggregates_direct_exchange_rate_v2 import request_pb2 as pb_direct_exchange_rate
def ohlcv_request(channel: grpc.Channel):
try:
# start of date configuration #
start = Timestamp()
start.FromJsonString('2024-09-25T05:00:00Z')
end = Timestamp()
end.FromJsonString('2024-09-26T06:00:00Z')
# end of date configuration #
stub = sdk_pb2_grpc.StreamMarketUpdateServiceV1Stub(channel)
responses = stub.Subscribe(pb_market_update.StreamMarketUpdateRequestV1(
instrument_criteria = instrument_criteria_pb2.InstrumentCriteria(
# start of parameter configuration #
exchange = "cbse",
instrument_class = "spot",
code = "btc-usd"),
# end of parameter configuration #
interval={
'start_time': start,
'end_time' : end
}
))
for response in responses:
print("Received message %s" % (MessageToJson(response, including_default_value_fields = True)))
# print("Received message %s" % list(map(lambda o: o.string_value, response.data.values)))
except grpc.RpcError as e:
print(e.details(), e.code())
def run():
credentials = grpc.ssl_channel_credentials(root_certificates=None)
call_credentials = grpc.access_token_call_credentials(os.environ['KAIKO_API_KEY'])
composite_credentials = grpc.composite_channel_credentials(credentials, call_credentials)
channel = grpc.secure_channel('gateway-v0-grpc.kaiko.ovh', composite_credentials)
res = ohlcv_request(channel)
print("Response: %s" % res)
channel.close()
if __name__ == '__main__':
logging.basicConfig()
run()
cURL requests are intended for testing purposes only.
curl -X POST "https://gateway-v0-http.kaiko.ovh/api/stream/aggregates_ohlcv_v1" -H "accept: application/json" -H "X-Api-Key: $your_key" -H "Content-Type: application/json" -d "{ \"instrumentCriteria\": { \"exchange\": \"cbse\", \"instrumentClass\": \"spot\", \"code\": \"btc-usd\" }, \"aggregate\": \"1m\"}"
For more advanced users, you can access our full SDK here, where you'll find more coding languages, examples and guidance.
Response Example
{"aggregate": "1s",
"class": "spot",
"close": "60521.02",
"exchange": "cbse",
"high": "60528.91",
"low": "60521.02",
"open": "60528.91",
"code": "btc-usd",
"timestamp": "2024-08-09T13:13:14.347471354Z",
"uid": "2024-08-09T13:13:13Z",
"volume": "0.00028618000000000003",
"sequenceId": "" }
Last updated