Skip to content

Instantly share code, notes, and snippets.

@jamesp
Created July 16, 2009 01:24
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jamesp/148093 to your computer and use it in GitHub Desktop.
Save jamesp/148093 to your computer and use it in GitHub Desktop.
Bloomberg API in jRuby
include Java
require 'blpapi3.jar'
opts = com.bloomberglp.blpapi.SessionOptions.new
opts.server_host = 'localhost'
opts.server_port = 8194
session = com.bloomberglp.blpapi.Session.new opts
service = '//blp/refdata'
throw "Can't start Bloomberg" unless session.start && session.open_service(service)
data_svc = session.get_service service
rates = {}
while true
request = data_svc.create_request 'ReferenceDataRequest'
['EURUSD', 'USDJPY', 'AUDUSD'].each do |ccypair|
request.append 'securities', "#{ccypair} Curncy"
end
['BID', 'ASK'].each {|field| request.append 'fields', field}
session.send_request request, com.bloomberglp.blpapi.CorrelationID.new(1)
while true
event = session.next_event
event_type = event.event_type.to_string
iter = event.message_iterator
while iter.has_next?
message = iter.next
if message.has_element 'securityData'
data = message.get_element('securityData')
(0..(data.num_values-1)).each do |i|
d = data.get_value_as_element(i)
rates[d.get_element_as_string('security')[0..5]] = {
:bid => d.get_element('fieldData').get_element_as_float64('BID'),
:ask => d.get_element('fieldData').get_element_as_float64('ASK')
}
end
end
end
break if event_type == "RESPONSE" # end of the response
end
rates.each {|c, r| puts "#{c}\t#{r[:bid]}/#{r[:ask]}" }
sleep 2
end
# => EURUSD 1.40683/1.40704
# USDJPY 94.3/94.32349
# AUDUSD 0.8003/0.8005
#
# EURUSD 1.406825/1.407034
# USDJPY 94.3/94.31999
# AUDUSD 0.8003/0.8005
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment