0.0
No commit activity in last 3 years
No release in over 3 years
This FIX protocol wrapper enables one to easily parse and create messages complying with the FIX 4.4 specification. It includes definitions for admin messages (logon, heartbeat, resend request, test request), for some market data messages (market data request, market data snapshot, and market data incremental refresh) as well as the ability to easily define other ones.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 0.7
~> 10.3
~> 3.1
~> 3.1
~> 0.9
~> 0.8

Runtime

~> 0.3
~> 1.4
 Project Readme

FIX Protocol Build Status Coverage Status Gem Version

This FIX protocol wrapper enables one to easily parse and create messages complying with the FIX 4.4 specification.

It includes definitions for admin messages (logon, logout, reject, heartbeat, resend request, test request), for some market data messages (market data request, market data snapshot, and market data incremental refresh) as well as the ability to easily define other ones.

Message creation example

Messages are created by instantiating the relevant message class and serialized using the #dump method.

require 'fix/protocol'

msg = FP::Messages::Logon.new

msg.sender_comp_id  = 'MY_ID'
msg.target_comp_id  = 'MY_COUNTERPARTY'
msg.msg_seq_num     = 0
msg.username        = 'MY_USERNAME'

if msg.valid?
  puts msg.dump
else
  puts msg.errors.join(", ")
end

Which would output the sample message : 8=FIX.4.4\x019=105\x0135=A\x0149=MY_ID\x0156=MY_COUNTERPARTY\x0134=0\x0152=20141021-10:33:15\x0198=0\x01108=30\x01553=MY_USERNAME\x01141=\x0110=176\x01

Message definition example

Complex message definition is possible using a simple DSL as shown below.

module Fix 
  module Protocol
    module Messages

      class MarketDataRequest < Message

        SUBSCRIPTION_TYPES = { 
          snapshot:     0,  
          updates:      1,  
          unsubscribe:  2
        }   

        MKT_DPTH_TYPES = { 
          full: 0,
          top:  1
        }   

        UPDATE_TYPES = { 
          full:         0,  
          incremental:  1
        }   

        unordered :body do
          field :md_req_id,                 tag: 262, required: true
          field :subscription_request_type, tag: 263, required: true, type: :integer, mapping: SUBSCRIPTION_TYPES
          field :market_depth,              tag: 264, required: true, type: :integer, mapping: MKT_DPTH_TYPES
          field :md_update_type,            tag: 265, required: true, type: :integer, mapping: UPDATE_TYPES

          collection :md_entry_types, counter_tag: 267, klass: FP::Messages::MdEntryType
          collection :instruments,    counter_tag: 146, klass: FP::Messages::Instrument  
        end 

      end 
    end 
  end 
end