Skip to content

Commit cab534f

Browse files
committed
Merge pull request #5 from cbusbey/trade_client_md_requests
demo sending repeating groups with md requests in trade client
2 parents d0abc92 + ce91d52 commit cab534f

File tree

2 files changed

+128
-1
lines changed

2 files changed

+128
-1
lines changed

tradeclient/console.go

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ import (
2121
fix44nos "github.com/quickfixgo/quickfix/fix44/newordersingle"
2222
fix50nos "github.com/quickfixgo/quickfix/fix50/newordersingle"
2323

24+
fix42mdr "github.com/quickfixgo/quickfix/fix42/marketdatarequest"
25+
fix43mdr "github.com/quickfixgo/quickfix/fix43/marketdatarequest"
26+
fix44mdr "github.com/quickfixgo/quickfix/fix44/marketdatarequest"
27+
"github.com/quickfixgo/quickfix/fix50/instrmtmdreqgrp"
28+
fix50mdr "github.com/quickfixgo/quickfix/fix50/marketdatarequest"
29+
"github.com/quickfixgo/quickfix/fix50/mdreqgrp"
30+
2431
"os"
2532
"strconv"
2633
"strings"
@@ -31,6 +38,8 @@ func queryAction() (string, error) {
3138
fmt.Println()
3239
fmt.Println("1) Enter Order")
3340
fmt.Println("2) Cancel Order")
41+
fmt.Println("3) Request Market Test")
42+
fmt.Println("4) Quit")
3443
fmt.Print("Action: ")
3544
scanner := bufio.NewScanner(os.Stdin)
3645
scanner.Scan()
@@ -854,6 +863,74 @@ func queryOrderCancelRequest50() (msg quickfix.Message, err error) {
854863
queryHeader(msg.Header)
855864
return
856865
}
866+
func queryMarketDataRequest42() (msg quickfix.Message, err error) {
867+
request := fix42mdr.Message{
868+
MDReqID: "MARKETDATAID",
869+
SubscriptionRequestType: enum.SubscriptionRequestType_SNAPSHOT,
870+
MarketDepth: 0,
871+
NoMDEntryTypes: []fix42mdr.NoMDEntryTypes{fix42mdr.NoMDEntryTypes{MDEntryType: enum.MDEntryType_BID}},
872+
NoRelatedSym: []fix42mdr.NoRelatedSym{fix42mdr.NoRelatedSym{Symbol: "LNUX"}},
873+
}
874+
875+
msg = request.Marshal()
876+
queryHeader(msg.Header)
877+
return
878+
}
879+
880+
func queryMarketDataRequest43() (msg quickfix.Message, err error) {
881+
request := fix43mdr.Message{
882+
MDReqID: "MARKETDATAID",
883+
SubscriptionRequestType: enum.SubscriptionRequestType_SNAPSHOT,
884+
MarketDepth: 0,
885+
NoMDEntryTypes: []fix43mdr.NoMDEntryTypes{fix43mdr.NoMDEntryTypes{MDEntryType: enum.MDEntryType_BID}},
886+
}
887+
888+
symbol := "LNUX"
889+
var relatedSym fix43mdr.NoRelatedSym
890+
relatedSym.Instrument.Symbol = &symbol
891+
request.NoRelatedSym = []fix43mdr.NoRelatedSym{relatedSym}
892+
893+
msg = request.Marshal()
894+
queryHeader(msg.Header)
895+
return
896+
}
897+
898+
func queryMarketDataRequest44() (msg quickfix.Message, err error) {
899+
request := fix44mdr.Message{
900+
MDReqID: "MARKETDATAID",
901+
SubscriptionRequestType: enum.SubscriptionRequestType_SNAPSHOT,
902+
MarketDepth: 0,
903+
NoMDEntryTypes: []fix44mdr.NoMDEntryTypes{fix44mdr.NoMDEntryTypes{MDEntryType: enum.MDEntryType_BID}},
904+
}
905+
906+
symbol := "LNUX"
907+
var relatedSym fix44mdr.NoRelatedSym
908+
relatedSym.Instrument.Symbol = &symbol
909+
request.NoRelatedSym = []fix44mdr.NoRelatedSym{relatedSym}
910+
911+
msg = request.Marshal()
912+
queryHeader(msg.Header)
913+
return
914+
}
915+
916+
func queryMarketDataRequest50() (msg quickfix.Message, err error) {
917+
request := fix50mdr.Message{
918+
MDReqID: "MARKETDATAID",
919+
SubscriptionRequestType: enum.SubscriptionRequestType_SNAPSHOT,
920+
MarketDepth: 0,
921+
}
922+
923+
request.MDReqGrp.NoMDEntryTypes = []mdreqgrp.NoMDEntryTypes{mdreqgrp.NoMDEntryTypes{enum.MDEntryType_BID}}
924+
925+
symbol := "LNUX"
926+
var relatedSym instrmtmdreqgrp.NoRelatedSym
927+
relatedSym.Instrument.Symbol = &symbol
928+
request.InstrmtMDReqGrp.NoRelatedSym = []instrmtmdreqgrp.NoRelatedSym{relatedSym}
929+
930+
msg = request.Marshal()
931+
queryHeader(msg.Header)
932+
return
933+
}
857934

858935
func queryEnterOrder() error {
859936
beginString, err := queryVersion()
@@ -929,3 +1006,38 @@ func queryCancelOrder() error {
9291006

9301007
return nil
9311008
}
1009+
1010+
func queryMarketDataRequest() error {
1011+
beginString, err := queryVersion()
1012+
if err != nil {
1013+
return err
1014+
}
1015+
1016+
var req quickfix.Message
1017+
switch beginString {
1018+
case enum.BeginStringFIX42:
1019+
req, err = queryMarketDataRequest42()
1020+
1021+
case enum.BeginStringFIX43:
1022+
req, err = queryMarketDataRequest43()
1023+
1024+
case enum.BeginStringFIX44:
1025+
req, err = queryMarketDataRequest44()
1026+
1027+
case enum.BeginStringFIXT11:
1028+
req, err = queryMarketDataRequest50()
1029+
1030+
default:
1031+
return fmt.Errorf("No test for version %v", beginString)
1032+
}
1033+
1034+
if err != nil {
1035+
return err
1036+
}
1037+
1038+
if queryConfirm("Send MarketDataRequest") {
1039+
return quickfix.Send(req)
1040+
}
1041+
1042+
return nil
1043+
}

tradeclient/tradeclient.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,41 @@ import (
77
"os"
88
)
99

10+
//TradeClient implements the quickfix.Application interface
1011
type TradeClient struct {
1112
}
1213

14+
//OnCreate implemented as part of Application interface
1315
func (e TradeClient) OnCreate(sessionID quickfix.SessionID) {
1416
return
1517
}
1618

19+
//OnLogon implemented as part of Application interface
1720
func (e TradeClient) OnLogon(sessionID quickfix.SessionID) {
1821
return
1922
}
2023

24+
//OnLogout implemented as part of Application interface
2125
func (e TradeClient) OnLogout(sessionID quickfix.SessionID) {
2226
return
2327
}
2428

29+
//FromAdmin implemented as part of Application interface
2530
func (e TradeClient) FromAdmin(msg quickfix.Message, sessionID quickfix.SessionID) (reject quickfix.MessageRejectError) {
2631
return
2732
}
2833

34+
//ToAdmin implemented as part of Application interface
2935
func (e TradeClient) ToAdmin(msg quickfix.Message, sessionID quickfix.SessionID) {
3036
return
3137
}
3238

39+
//ToApp implemented as part of Application interface
3340
func (e TradeClient) ToApp(msg quickfix.Message, sessionID quickfix.SessionID) (err error) {
3441
return
3542
}
3643

44+
//FromApp implemented as part of Application interface. This is the callback for all Application level messages from the counter party.
3745
func (e TradeClient) FromApp(msg quickfix.Message, sessionID quickfix.SessionID) (reject quickfix.MessageRejectError) {
3846
fmt.Printf("FromApp: %s\n", msg.String())
3947
return
@@ -75,6 +83,7 @@ func main() {
7583

7684
initiator.Start()
7785

86+
Loop:
7887
for {
7988
action, err := queryAction()
8089
if err != nil {
@@ -88,13 +97,19 @@ func main() {
8897
case "2":
8998
err = queryCancelOrder()
9099

100+
case "3":
101+
err = queryMarketDataRequest()
102+
103+
case "4":
104+
//quit
105+
break Loop
106+
91107
default:
92108
err = fmt.Errorf("unknown action: '%v'", action)
93109
}
94110

95111
if err != nil {
96112
fmt.Printf("%v\n", err)
97-
break
98113
}
99114
}
100115

0 commit comments

Comments
 (0)