Giter VIP home page Giter VIP logo

quickfix's Introduction

QuickFIX/Go

Build Status GoDoc Go Report Card

Open Source FIX Protocol library implemented in Go

Looking for help with MessageStore syntax changes?

See v0.9.0 release notes here

About

QuickFIX/Go is a FIX Protocol Community implementation for the Go programming language.

  • 100% free and open source with a liberal license
  • Supports FIX versions 4.0 - 5.0SP2
  • Runs on any hardware and operating system supported by Go (1.21+ required)
  • Spec driven run-time message validation
  • Spec driven code generation of type-safe FIX messages, fields, and repeating groups
  • Support for protocol customizations
  • Session state storage options: SQL, MongoDB, On-disk, or In-memory
  • Logging options: File, Screen
  • Failover and High Availability
  • Daily and weekly scheduling of session connections
  • Integrated support for SSL communicaitons
  • Automated unit and acceptance tests
  • Commercial Support available

Sponsored by Connamara

Installation

With Go module support, simply add the following import

import "github.com/quickfixgo/quickfix"

to your code, and then go [build|run|test] will automatically fetch the necessary dependencies.

Otherwise, run the following Go command to install the quickfix package:

go get -u github.com/quickfixgo/quickfix

Getting Started

FIX Messaging Model

To send and receive messages, your application will need a few additional packages.

QuickFIX/Go maintains separate packages for tags, fields, enums, messages, and message components auto-generated from the FIX 4.0 - FIX5.0SP2 XML specifications-

For most FIX applications, these generated resources are sufficient. Custom FIX applications may generate source specific to the FIX spec of that application using the generate-fix tool included with QuickFIX/Go.

Following installation, generate-fix is installed to $GOPATH/bin/generate-fix. Run $GOPATH/bin/generate-fix --help for usage instructions.

General Support

Github Discussions

Our Github Discussions Board is free, public, and easily searchable. It’s the preferred method of user support from the QuickFIX/Go team.

Please provide as much detail as you can when asking a question, and include relevant configurations and code snippets.

FIX Protocol

More information about the FIX protocol can be found at the FIX Protocol website.

Bugs and Issues

Bugs and issues can be submitted by anyone through our GitHub repository issues list.

Note: Please do not submit questions or help requests to the issues list. It is for bugs and issues. If you need help, please use the Discussions board as described above and you’ll be able to send your question to the entire community.

GitHub Issues

Please provide sample code, logs, and a description of the problem when the issue is submitted.

We will try to address new issues as quickly as possible, and we welcome contributions for bug fixes and new features!

Commercial Support

Connamara Systems offers commercial support for developers who are integrating any of the QuickFIX implementations (Go, C++, Java, .NET). The support is offered in 10-hour bundles and grants developers access, via telephone or email, to the team that created QuickFIX/Go, QuickFIX/n, and are maintainers of QuickFIX.

In addition to offering QuickFIX support, Connamara delivers Made-To-Measure Trading Solutions by bridging the gap between buy and build. By using internally developed trading platform components, Connamara delivers the best of off-the-shelf ISV solutions and custom application development. Coupled with Connamara’s unique licensing model, trading firms can get the best of both build and buy.

Contributing

If you wish to work on QuickFIX/Go itself, you will need Docker and VSCode on your machine.

  • Clone the repo and open it with VSCode with Docker running
  • This repo comes with vscode devcontainer configs in ./.devcontainer/
  • Click the pop-up to re-open the project in the Dev Container
  • This opens the project in a docker container pre-configured with everything you need

Build and Test

The default make target runs go vet and unit tests.

make

If this exits with exit status 0, then everything is working!

Generated Code

Generated code from the FIX40-FIX50SP2 specs are available as separate repos under the QuickFIX/Go organization. The source specifications for this generated code is located in spec/. Generated code can be identified by the .generated.go suffix. Any changes to generated code must be captured by changes to source in cmd/generate-fix. After making changes to the code generator source, run the following to re-generate the source

make generate

If you are making changes to the generated code, please create Pull Requests for these changes for the affected repos.

Acceptance Tests

QuickFIX/Go has a comprehensive acceptance test suite covering the FIX protocol. These are the same tests used across all QuickFIX implementations.

QuickFIX/Go acceptance tests depend on ruby in path, if you are using the dev container, it is already installed

To run acceptance tests,

# generate code locally
make generate

# build acceptance test rig
make build-test-srv

# run acceptance tests
make accept

Licensing

This software is available under the QuickFIX Software License. Please see the LICENSE.txt for the terms specified by the QuickFIX Software License.

quickfix's People

Contributors

ackleymi avatar adam-talos avatar alexandroskyriakakis avatar alexppxela avatar bhaan avatar blutack avatar cbusbey avatar dependabot-preview[bot] avatar dependabot[bot] avatar fedepaol avatar haoyang1994 avatar hyde-zhang avatar ijufumi avatar jfyuen avatar kyleklaussconn avatar linmaosong2018 avatar mgatny avatar michaelwilner avatar oczio avatar pfeairheller avatar reddec avatar reedom avatar rodolfo-seedcx avatar sai-g avatar sami-sweng avatar stanche avatar sylr avatar waheedoo avatar zee276 avatar zherr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quickfix's Issues

PossResend

19a_PossResendMessageThatHAsAlreadyBeenSent.def
19b_PossResendMessageThatHasNotBeenSent.def

GapFill

10_MsgSeqNumEqual.def
10_MsgSeqNumGreater.def

FIX42

  • 14f_IncorrectDataFormat.def
  • 14g_HeaderBodyTrailerFieldsOutOfOrder.def
  • 14h_RepeatedTag.def
  • 14i_RepeatingGroupCountNotEqual.def
  • 21_RepeatingGroupSpecifierWithValueOfZero.def
  • ReverseRoute.def
  • ReverseRouteWithEmptyRoutingTags.def

ready for production use?

Hi,
I'm the CTO of a Fintek startup, we require a fix protocol solution and nearing production in a couple of months.

First, congrats!
The project is very impressive! and I think that it's a very important contribution to the open-source community and to the FIX community in particular.

In the next couple of weeks we'll start integration with a sell side broker.

@cbusbey : After seeing this repository we started wondering :

  1. Is it ready for production use in your opinion?
  2. Are you planning on maintaining it for the next couple of months/year?

Thanks in advance,
Erik.

Initiator panic if connection closed

Reproducible with trade client.

Start the executor or order match
Start the trade client
Stop the executor or order match
Try sending an order from trade client
Trade client panics.

SendTestRequest

6_SendTestRequest

If a heartbeat is not sent to the target, a test request should be received
and we should eventually timeout

Application does not get signalled when the other side disconnects

The comment on the OnLogout in application.go says Notification of a session logging off or disconnecting., but while I can see in the code that this method will be called on a log out, I don't see it called anywhere when we are disconnected because the other party stopped responding.
I think it's just a matter of adding s.application.OnLogout(s.sessionID) to func (s *Session) onDisconnect() in session.go.

I would really like to get this notification so we can try to reconnect or otherwise take that specific fix connection out of the pool (at least temporarily)

If you want I can send a pull request.

Session Scheduling

StartTime, EndTime, StartDay, EndDay...

  • start time, end time config (#195)
  • a session in the logout state expires when outside of session time (#197,#198)
  • a session in the logon state expires when outside of session time (#197,#198)
  • a session resets if in session time, but outside of the session creation (#197,#198,#201)
  • a session can expire when not running (#200,#202)
  • an acceptor will not accept session connections outside of session time (#203)
  • an initiator will not attempt a connection outside of session time (#203, #209)
  • non-utc time zones (#206)
  • start day, end day config for extended sessions (#207)
  • documentation (#207)

SequenceReset

11a_NewSeqNoGreater.def
11b_NewSeqNoEqual.def
11c_NewSeqNoLess.def

Initiator Reconnect

The demo trade client does not recover if the executor or order match is not running prior to starting the executor or order match. The initiator should attempt reconnect.

SimultaneousResendRequest

20_SimultaneousResendRequest.def

If message sequence number is too high, send a resend request for
missing messages

Generate custom dictionary

Is there any plan on creating custom dictionary from a custom dictionary as every (if not all) FIX RoE as customized and not fully compliant with the protocol?

Client Testing

If you want help on Client Testing, I have access to a production environment .

FIX44

  • 14f_IncorrectDataFormat.def
  • 14i_RepeatingGroupCountNotEqual.def
  • 21_RepeatingGroupSpecifierWithValueOfZero.def
  • ReverseRoute.def
  • ReverseRouteWithEmptyRoutingTags.def
  • SessionReset.def

FIX Log parser

I am trying to read FIX logs but I am struggling to do it without exposing the ParseMessage function.

There could be a better alternative that I am missing?

Field Setters for generated messages

Useful particularly for optional fields. Would allow for one line to set a field vs the current option, eg

order.SetStopPx(100)

//instead of...
px:=100
order.StopPx = &px

FIX40

  • 14a_BadField.def
  • 14b_RequiredFieldMissing.def
  • 14c_TagNotDefinedForMsgType.def
  • 14d_TagSpecifiedWithoutValue.def
  • 14e_IncorrectEnumValue.def
  • 14f_IncorrectDataFormat.def
  • 14g_HeaderBodyTrailerFieldsOutOfOrder.def
  • 14h_RepeatedTag.def
  • ReverseRouteWithEmptyRoutingTags.def
  • ReverseRoute.def

ResendRequest

8_AdminAndApplicationMessages.def
8_OnlyAdminMessages.def
8_OnlyApplicationMessages.def

Reject Logon Support

Introduce a message reject that can be used in FromAdmin for rejecting a logon message

FIX50

  • 14a_BadField.def
  • 14b_RequiredFieldMissing.def
  • 14c_TagNotDefinedForMsgType.def
  • 14e_IncorrectEnumValue.def
  • 14f_IncorrectDataFormat.def
  • 14g_HeaderBodyTrailerFieldsOutOfOrder.def
  • 14h_RepeatedTag.def
  • 14i_RepeatingGroupCountNotEqual.def
  • 21_RepeatingGroupSpecifierWithValueOfZero.def
  • RejectResentMessage.def
  • ReverseRoute.def
  • ReverseRouteWithEmptyRoutingTags.def
  • SessionReset.def

FIX50sp2

  • 14a_BadField.def
  • 14b_RequiredFieldMissing.def
  • 14c_TagNotDefinedForMsgType.def
  • 14e_IncorrectEnumValue.def
  • 14f_IncorrectDataFormat.def
  • 14g_HeaderBodyTrailerFieldsOutOfOrder.def
  • 14h_RepeatedTag.def
  • 14i_RepeatingGroupCountNotEqual.def
  • 21_RepeatingGroupSpecifierWithValueOfZero.def
  • RejectResentMessage.def
  • ReverseRoute.def
  • ReverseRouteWithEmptyRoutingTags.def
  • SessionReset.def

FIX43

  • 14f_IncorrectDataFormat.def
  • 14i_RepeatingGroupCountNotEqual.def
  • 21_RepeatingGroupSpecifierWithValueOfZero.def
  • ReverseRoute.def
  • ReverseRouteWithEmptyRoutingTags.def

FIX41

  • 14g_HeaderBodyTrailerFieldsOutOfOrder.def
  • ReverseRoute.def
  • ReverseRouteWithEmptyRoutingTags.def

FIX50sp1

  • 14a_BadField.def
  • 14b_RequiredFieldMissing.def
  • 14c_TagNotDefinedForMsgType.def
  • 14e_IncorrectEnumValue.def
  • 14f_IncorrectDataFormat.def
  • 14g_HeaderBodyTrailerFieldsOutOfOrder.def
  • 14h_RepeatedTag.def
  • 14i_RepeatingGroupCountNotEqual.def
  • 21_RepeatingGroupSpecifierWithValueOfZero.def
  • RejectResentMessage.def
  • ReverseRoute.def
  • ReverseRouteWithEmptyRoutingTags.def
  • SessionReset.def

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.