// Create a FIXClient with common routes for market connectors func NewFIXClient(c common.Config) *FIXClient { app := &FIXClient{ MessageRouter: quickfix.NewMessageRouter(), marketConnectorName: c.MarketConnectorName, } // Initiate message bus listening for requests if msgbus, err := messagebus.Connect(c.MessageBusURL); err != nil { log.Fatalf("error: Cannot connect to order message bus @ %v", c.MessageBusURL) } else { app.MessageBus = msgbus } // Connect to database storage driver if storage, err := database.NewOrderStore(c.DatabaseDriver, c.DatabaseUrl, nil); err != nil { log.Fatalf("error: Cannot connect to database driver %v @ %v", c.DatabaseDriver, c.DatabaseUrl) } else { app.OrderStore = storage } // QuickFIX settings from config appSettings := quickfix.NewSettings() var settings *quickfix.SessionSettings settings = appSettings.GlobalSettings() settings.Set("SocketConnectHost", "127.0.0.1") settings.Set("SocketConnectPort", "5001") settings.Set("HeartBtInt", "30") settings.Set("SenderCompID", "CYAN") settings.Set("TargetCompID", "CORP") settings.Set("ResetOnLogon", "Y") settings.Set("FileLogPath", "tmp") settings = quickfix.NewSessionSettings() settings.Set("BeginString", "FIX.4.4") if session, err := appSettings.AddSession(settings); err != nil { log.WithError(err).Fatal("FIX Session Error") } else { app.Session = session } // FIX routes app.AddRoute(fix44er.Route(app.onFIX44ExecutionReport)) app.AddRoute(fix44ocj.Route(app.onFIX44OrderCancelReject)) // FIX logging logFactory := quickfix.NewNullLogFactory() // quickfix.NewScreenLogFactory() // Create initiator if initiator, err := quickfix.NewInitiator(app, quickfix.NewMemoryStoreFactory(), appSettings, logFactory); err != nil { log.WithError(err).Fatal("FIX NewInitiator Error") } else { app.Initiator = initiator } return app }
func main() { app := app.NewInitiatorApp() cfg, _ := os.Open("whygo/cfg/initiator.cfg") storeFactory := quickfix.NewMemoryStoreFactory() appSettings, _ := quickfix.ParseSettings(cfg) logFactory, _ := quickfix.NewFileLogFactory(appSettings) initiator, _ := quickfix.NewInitiator(app, storeFactory, appSettings, logFactory) initiator.Start() app.Run() }
func main() { cfgFileName := "tradeclient.cfg" cfg, err := os.Open(cfgFileName) if err != nil { fmt.Printf("Error opening %v, %v\n", cfgFileName, err) return } appSettings, err := quickfix.ParseSettings(cfg) if err != nil { fmt.Println("Error reading cfg,", err) return } app := TradeClient{} fileLogFactory, err := quickfix.NewFileLogFactory(appSettings) if err != nil { fmt.Println("Error creating file log factory,", err) return } initiator, err := quickfix.NewInitiator(app, quickfix.NewMemoryStoreFactory(), appSettings, fileLogFactory) if err != nil { fmt.Printf("Unable to create Initiator: %s\n", err) return } initiator.Start() for { action, err := queryAction() if err != nil { break } switch action { case "1": err = queryEnterOrder() default: err = fmt.Errorf("unknown action: '%v'", action) } if err != nil { fmt.Printf("%v\n", err) break } } initiator.Stop() }
func main() { flag.Parse() cfg, err := os.Open(*fixconfig) if err != nil { log.Fatal(err) } appSettings, err := quickfix.ParseSettings(cfg) if err != nil { log.Fatal(err) } // logFactory, err := quickfix.NewFileLogFactory(appSettings) logFactory := quickfix.NewNullLogFactory() if err != nil { log.Fatal(err) } storeFactory := quickfix.NewMemoryStoreFactory() initiator, err := quickfix.NewInitiator(app, storeFactory, appSettings, logFactory) if err != nil { log.Fatal(err) } if err = initiator.Start(); err != nil { log.Fatal(err) } <-start for i := 0; i < *sampleSize; i++ { order := newordersingle.Builder( field.NewClOrdID("100"), field.NewHandlInst("1"), field.NewSymbol("TSLA"), field.NewSide(enum.Side_BUY), &field.TransactTimeField{}, field.NewOrdType(enum.OrdType_MARKET)) quickfix.SendToTarget(order, SessionID) // time.Sleep(1 * time.Millisecond) } time.Sleep(2 * time.Second) }
func main() { flag.Parse() cfg, err := os.Open(*fixconfig) if err != nil { log.Fatal(err) } appSettings, err := quickfix.ParseSettings(cfg) if err != nil { log.Fatal(err) } // logFactory, err := quickfix.NewFileLogFactory(appSettings) logFactory := quickfix.NewNullLogFactory() if err != nil { log.Fatal(err) } storeFactory := quickfix.NewMemoryStoreFactory() initiator, err := quickfix.NewInitiator(app, storeFactory, appSettings, logFactory) if err != nil { log.Fatal(err) } if err = initiator.Start(); err != nil { log.Fatal(err) } <-start for i := 0; i < *sampleSize; i++ { order := newordersingle.Message{} order.ClOrdID = "100" order.HandlInst = "1" order.Symbol = "TSLA" order.Side = enum.Side_BUY order.TransactTime = time.Now() order.OrdType = enum.OrdType_MARKET quickfix.SendToTarget(order, SessionID) // time.Sleep(1 * time.Millisecond) } time.Sleep(2 * time.Second) }
func main() { flag.Parse() cfgFileName := path.Join("config", "tradeclient.cfg") if flag.NArg() > 0 { cfgFileName = flag.Arg(0) } cfg, err := os.Open(cfgFileName) if err != nil { fmt.Printf("Error opening %v, %v\n", cfgFileName, err) return } appSettings, err := quickfix.ParseSettings(cfg) if err != nil { fmt.Println("Error reading cfg,", err) return } app := TradeClient{} fileLogFactory, err := quickfix.NewFileLogFactory(appSettings) if err != nil { fmt.Println("Error creating file log factory,", err) return } initiator, err := quickfix.NewInitiator(app, quickfix.NewMemoryStoreFactory(), appSettings, fileLogFactory) if err != nil { fmt.Printf("Unable to create Initiator: %s\n", err) return } initiator.Start() Loop: for { action, err := internal.QueryAction() if err != nil { break } switch action { case "1": err = internal.QueryEnterOrder() case "2": err = internal.QueryCancelOrder() case "3": err = internal.QueryMarketDataRequest() case "4": //quit break Loop default: err = fmt.Errorf("unknown action: '%v'", action) } if err != nil { fmt.Printf("%v\n", err) } } initiator.Stop() }