Add Quickfix library #1

Merged
RamiroPaz merged 9 commits from quickfix into develop 2026-03-12 15:32:10 +00:00
1241 changed files with 1408919 additions and 261 deletions
Showing only changes of commit 1d32854a09 - Show all commits

View File

@ -1,7 +1,6 @@
package fix package fix
import ( import (
"fmt"
"log/slog" "log/slog"
"os" "os"
"sync" "sync"
@ -47,13 +46,19 @@ func (m *Manager) Start() error {
f, err := os.Open(m.cfg.SettingsFile) f, err := os.Open(m.cfg.SettingsFile)
if err != nil { if err != nil {
return fmt.Errorf("opening FIX settings file %q: %w", m.cfg.SettingsFile, err) err = tracerr.Errorf("error opening FIX settings file %q: %s", m.cfg.SettingsFile, err)
log.Error().Msg(err.Error())
return err
} }
defer f.Close() defer f.Close()
settings, err := quickfix.ParseSettings(f) settings, err := quickfix.ParseSettings(f)
if err != nil { if err != nil {
return fmt.Errorf("parsing FIX settings: %w", err) err = tracerr.Errorf("error parsing FIX settings: %s", err)
log.Error().Msg(err.Error())
return err
} }
storeFactory := quickfix.NewMemoryStoreFactory() storeFactory := quickfix.NewMemoryStoreFactory()
@ -67,13 +72,19 @@ func (m *Manager) Start() error {
initiator, err := quickfix.NewInitiator(fixApp, storeFactory, settings, logFactory) initiator, err := quickfix.NewInitiator(fixApp, storeFactory, settings, logFactory)
if err != nil { if err != nil {
return fmt.Errorf("creating FIX initiator: %w", err) err = tracerr.Errorf("error creating FIX initiator: %s", err)
log.Error().Msg(err.Error())
return err
} }
m.initiator = initiator m.initiator = initiator
if err = m.initiator.Start(); err != nil { if err = m.initiator.Start(); err != nil {
return fmt.Errorf("starting FIX initiator: %w", err) err = tracerr.Errorf("error starting FIX initiator: %s", err)
log.Error().Msg(err.Error())
return err
} }
slog.Info("FIX initiator started", "settings", m.cfg.SettingsFile) slog.Info("FIX initiator started", "settings", m.cfg.SettingsFile)
@ -113,7 +124,10 @@ func (m *Manager) SendQuote(clOrdID, quoteID, symbol, currency string, bidPx, of
m.sessionsMu.RUnlock() m.sessionsMu.RUnlock()
if !ok { if !ok {
return fmt.Errorf("no active FIX session") err := tracerr.Errorf("error sending quote: no active FIX session")
log.Error().Msg(err.Error())
return err
} }
q := quote.New( q := quote.New(
@ -141,7 +155,10 @@ func (m *Manager) SendQuote(clOrdID, quoteID, symbol, currency string, bidPx, of
} }
if err := quickfix.SendToTarget(q, sessionID); err != nil { if err := quickfix.SendToTarget(q, sessionID); err != nil {
return fmt.Errorf("sending FIX quote: %w", err) err = tracerr.Errorf("error sending FIX quote: %s", err)
log.Error().Msg(err.Error())
return err
} }
slog.Info("Quote sent", "clOrdID", clOrdID, "quoteID", quoteID, "symbol", symbol) slog.Info("Quote sent", "clOrdID", clOrdID, "quoteID", quoteID, "symbol", symbol)