package main import ( "encoding/json" "fmt" "strings" "time" "gitee.com/haifengat/goctp" // ctp "gitee.com/haifengat/goctp/lnx" ctp "gitee.com/haifengat/goctp/win" ) var ( instrumentID = "rb2109" tradeFront = "tcp://180.168.146.187:10201" quoteFront = "tcp://180.168.146.187:10211" loginInfo = "9999/008105/1/simnow_client_test/0000000000000000" investorID, password, brokerID, appID, authCode string ) var t = ctp.NewTrade() var q = ctp.NewQuote() func init() { fs := strings.Split(loginInfo, "/") brokerID, investorID, password, appID, authCode = fs[0], fs[1], fs[2], fs[3], fs[4] } func onTick(data *goctp.TickField) { if bs, err := json.Marshal(data); err == nil { println("tick:" + string(bs)) } else { fmt.Print("ontick") } } func testQuote() { q.RegOnFrontConnected(func() { fmt.Println("quote connected") q.ReqLogin(investorID, password, brokerID) }) q.RegOnRspUserLogin(func(login *goctp.RspUserLoginField, info *goctp.RspInfoField) { fmt.Println("quote login:", info) q.ReqSubscript(instrumentID) }) q.RegOnTick(onTick) fmt.Println("quote connecting " + quoteFront) q.ReqConnect(quoteFront) } func testTrade() { t.RegOnFrontConnected(func() { fmt.Println("trade connected") go t.ReqLogin(investorID, password, brokerID, appID, authCode) }) t.RegOnRspUserLogin(func(login *goctp.RspUserLoginField, info *goctp.RspInfoField) { fmt.Println(info) fmt.Printf("trade login info: %v\n", *login) }) t.RegOnRtnOrder(func(field *goctp.OrderField) { // fmt.Printf("%v\n", field) fmt.Print("orderKey:", field.OrderSysID, field.StatusMsg) // t.Orders.Range(func(key, value interface{}) bool { // fmt.Print("orderKey:", key, value.(goctp.OrderField).StatusMsg) // return true // }) }) t.RegOnErrRtnOrder(func(field *goctp.OrderField, info *goctp.RspInfoField) { fmt.Printf("%v\n", info) }) t.RegOnRtnInstrumentStatus(func(field *goctp.InstrumentStatus) { fmt.Println(field) }) t.RegOnFrontDisConnected(func(reason int) { fmt.Printf("%v\n", reason) }) fmt.Println("connected to trade " + tradeFront) t.ReqConnect(tradeFront) } func main() { go testQuote() // 不能同时测试交易 go testTrade() for !t.IsLogin { time.Sleep(10 * time.Second) } cnt := 0 // t.ReqOrderInsertMarket("rb2109", goctp.DirectionBuy, goctp.OffsetFlagOpen, 1) time.Sleep(3 * time.Second) // key := t.ReqOrderInsert("rb2105", goctp.DirectionBuy, goctp.OffsetFlagOpen, 3000, 1) // print(key) t.Instruments.Range(func(k, v interface{}) bool { // fmt.Printf("%v", v) cnt++ return true }) print("instrument count:", cnt) // t.RegOnRtnFromFutureToBank(func(field *goctp.TransferField) { // fmt.Print(field) // }) // t.ReqFutureToBank("", "", 30) t.Release() q.Release() select {} }