ExFix (ex_fix v0.2.7)
Elixir implementation of FIX Session Protocol FIXT.1.1. Currently only supports FIX session initiator (buy side).
Usage
defmodule MySessionHandler do
@behaviour ExFix.SessionHandler
require Logger
alias ExFix.InMessage
alias ExFix.OutMessage
alias ExFix.Parser
@msg_new_order_single "D"
@field_account "1"
@field_cl_ord_id "11"
@field_order_qty "38"
@field_ord_type "40"
@field_price "44"
@field_side "54"
@field_symbol "55"
@field_transact_time "60"
@value_side_buy "1"
@value_ord_type_limit "2"
def on_logon(session_name, _env) do
spawn fn() ->
## Buy 10 shares of SYM1 for $1.23 per share
@msg_new_order_single
|> OutMessage.new()
|> OutMessage.set_field(@field_account, 1234)
|> OutMessage.set_field(@field_cl_ord_id, "cod12345")
|> OutMessage.set_field(@field_order_qty, 10)
|> OutMessage.set_field(@field_ord_type, @value_ord_type_limit)
|> OutMessage.set_field(@field_price, 1.23)
|> OutMessage.set_field(@field_side, @value_side_buy)
|> OutMessage.set_field(@field_symbol, "SYM1")
|> OutMessage.set_field(@field_transact_time, DateTime.utc_now())
|> ExFix.send_message!(session_name)
end
end
def on_app_message(_session_name, _msg_type, %InMessage{} = msg, _env) do
Logger.info "App msg received: #{inspect Parser.parse2(msg)}"
end
def on_session_message(_session_name, _msg_type, %InMessage{} = msg, _env) do
Logger.info "Session msg received: #{inspect Parser.parse2(msg)}"
end
def on_logout(_session_id, _env), do: :ok
end
ExFix.start_session_initiator("simulator", "BUY", "SELL", MySessionHandler,
hostname: "localhost", port: 9876, username: "user1", password: "pwd1",
transport_mod: :ssl)
Summary
Functions
@spec send_message!(ExFix.OutMessage.t(), ExFix.Session.session_name()) :: :ok | no_return()
Send FIX message to a session
@spec start_session_initiator( String.t(), String.t(), String.t(), ExFix.SessionHandler, list() ) :: :ok
Starts FIX session initiator
@spec stop_session(ExFix.Session.session_name(), ExFix.SessionRegistry | nil) :: :ok | no_return()
Stop FIX session