gitee.com/haifengat/gotap_dipper@v0.0.4-0.20231212021028-041a6fa876e5/demo/api_test.go (about) 1 package demo 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "gitee.com/haifengat/gotap_dipper/quote" 9 "gitee.com/haifengat/gotap_dipper/trade" 10 ) 11 12 func init() { 13 os.Chdir("../") 14 } 15 16 func TestQuote(t *testing.T) { 17 q := quote.NewQuote() 18 fmt.Println("接口版本: ", q.GetTapQuoteAPIVersion()) 19 qApp := quote.TapAPIApplicationInfo{} 20 copy(qApp.AuthCode[:], "B112F916FE7D27BCE7B97EB620206457946CED32E26C1EAC946CED32E26C1EAC946CED32E26C1EAC946CED32E26C1EAC5211AF9FEE541DDE9D6F622F72E25D5DEF7F47AA93A738EF5A51B81D8526AB6A9D19E65B41F59D6A946CED32E26C1EACCAF8D4C61E28E2B1ABD9B8F170E14F8847D3EA0BF4E191F5DCB1B791E63DC196D1576DEAF5EC563CA3E560313C0C3411B45076795F550EB050A62C4F74D5892D2D14892E812723FAC858DEBD8D4AF9410729FB849D5D8D6EA48A1B8DC67E037381A279CE9426070929D5DA085659772E24A6F5EA52CF92A4D403F9E46083F27B19A88AD99812DADA44100324759F9FD1964EBD4F2F0FB50B51CD31C0B02BB437") 21 q.CreateTapQuoteAPI(&qApp) 22 fmt.Println("行情 api created") 23 24 q.CreateTapQuoteAPINotify() 25 fmt.Println("行情 spi created") 26 27 q.RegCallBack() 28 q.SetSpi() 29 30 q.OnRspLogin = func(errorCode quote.TAPIINT32, info *quote.TapAPIQuotLoginRspInfo) { 31 fmt.Println("登录: ", errorCode) 32 if errorCode == 0 { 33 fmt.Printf("%+v\n", info) 34 } 35 } 36 q.OnAPIReady = func() { 37 fmt.Println("api ready") 38 s := quote.TAPIUINT32(1) 39 q.QryCommodity(&s) 40 } 41 q.OnRspQryCommodity = func(sessionID quote.TAPIUINT32, errorCode quote.TAPIINT32, isLast quote.TAPIYNFLAG, info *quote.TapAPIQuoteCommodityInfo) { 42 if errorCode != 0 { 43 fmt.Println(errorCode) 44 } else { 45 fmt.Printf("No:%s, exc:%s, type: %c\n", string(info.Commodity.CommodityNo[:]), string(info.Commodity.ExchangeNo[:]), info.Commodity.CommodityType) 46 if isLast == quote.APIYNFLAG_YES { 47 comm := quote.TapAPICommodity{} 48 copy(comm.ExchangeNo[:], "COMEX") 49 copy(comm.CommodityNo[:], "GC") 50 comm.CommodityType = quote.TAPI_COMMODITY_TYPE_FUTURES 51 s := quote.TAPIUINT32(2) 52 q.QryContract(&s, &comm) 53 } 54 } 55 } 56 q.OnRspQryContract = func(sessionID quote.TAPIUINT32, errorCode quote.TAPIINT32, isLast quote.TAPIYNFLAG, info *quote.TapAPIQuoteContractInfo) { 57 if errorCode != 0 { 58 fmt.Println("查合约错误: ", errorCode) 59 } else if info != nil { 60 fmt.Println(string(info.Contract.ContractNo1[:])) 61 if isLast == quote.APIYNFLAG_YES { 62 comm := quote.TapAPICommodity{} 63 copy(comm.ExchangeNo[:], "CFFEX") 64 copy(comm.CommodityNo[:], "IF") 65 comm.CommodityType = quote.TAPI_COMMODITY_TYPE_FUTURES 66 67 c := quote.TapAPIContract{ 68 CallOrPutFlag1: quote.TAPI_CALLPUT_FLAG_NONE, 69 CallOrPutFlag2: quote.TAPI_CALLPUT_FLAG_NONE, 70 } 71 c.Commodity = comm 72 copy(c.ContractNo1[:], "2312") 73 74 s := quote.TAPIUINT32(3) 75 res := q.SubscribeQuote(&s, &c) 76 fmt.Println("订阅行情: ", res) 77 } 78 } 79 } 80 q.OnRspSubscribeQuote = func(sessionID quote.TAPIUINT32, errorCode quote.TAPIINT32, isLast quote.TAPIYNFLAG, info *quote.TapAPIQuoteWhole) { 81 if errorCode != 0 { 82 fmt.Println("订阅行情响应: ", errorCode) 83 } else { 84 // 1,集合竞价;2,集合竞价撮合;3,连续交易;4,交易暂停;5,闭市 85 fmt.Printf("交易状态: %+v\n", *info) 86 } 87 } 88 q.OnRtnQuote = func(info *quote.TapAPIQuoteWhole) { 89 fmt.Printf("%+v\n", *info) 90 } 91 q.OnDisconnect = func(reasonCode quote.TAPIINT32) { fmt.Println("行情断开: ", reasonCode) } 92 93 login := quote.TapAPIQuoteLoginAuth{ 94 ISModifyPassword: quote.APIYNFLAG_NO, 95 ISDDA: quote.APIYNFLAG_NO, 96 } 97 98 // r := q.SetHostAddress("61.163.243.173", quote.TAPIUINT16(7171)) // 北斗星-行情 99 // copy(login.UserNo[:], "ES") 100 101 // r := q.SetHostAddress("123.161.206.213", quote.TAPIUINT16(8383)) // 北斗星-交易 102 // copy(login.UserNo[:], "Q576288330") 103 104 r := q.SetHostAddress("106.37.101.162", quote.TAPIUINT16(16868)) // 启明星 105 copy(login.UserNo[:], "0020000879") 106 107 // r := q.SetHostAddress("118.25.179.96", quote.TAPIUINT16(55012)) // (北)极星国际 108 109 fmt.Println("配置前置: ", r) 110 111 copy(login.Password[:], "123456") 112 r = q.Login(&login) 113 fmt.Println("登录: ", r) 114 115 select {} 116 } 117 118 func TestTradeCTP(tst *testing.T) { 119 t, err := trade.NewTradeExt("simnow_client_test", "67EA896065459BECDFDB924B29CB7DF1946CED32E26C1EAC946CED32E26C1EAC946CED32E26C1EAC946CED32E26C1EAC5211AF9FEE541DDE41BCBAB68D525B0D111A0884D847D57163FF7F329FA574E7946CED32E26C1EAC946CED32E26C1EAC733827B0CE853869ABD9B8F170E14F8847D3EA0BF4E191F5D97B3DFE4CCB1F01842DD2B3EA2F4B20CAD19B8347719B7E20EA1FA7A3D1BFEFF22290F4B5C43E6C520ED5A40EC1D50ACDF342F46A92CCF87AEE6D73542C42EC17818349C7DEDAB0E4DB16977714F873D505029E27B3D57EB92D5BEDA0A710197EB67F94BB1892B30F58A3F211D9C3B3839BE2D73FD08DD776B9188654853DDA57675EBB7D6FBBFC") 120 if err != nil { 121 fmt.Println(err) 122 os.Exit(-1) 123 } 124 // 180.168.146.187:10130 125 err = t.ReqConnect("180.168.146.187", 10130) 126 if err != nil { 127 fmt.Println("connect:", err) 128 } 129 130 err = t.ReqLogin("008107", "1") 131 if err != nil { 132 fmt.Println(err) 133 os.Exit(-2) 134 } 135 } 136 137 func TestTrade(tst *testing.T) { 138 accountNo := "Q24918700" 139 // commodityType := trade.TAPI_COMMODITY_TYPE_FUTURES 140 // exchangeID := "CBOT" 141 // commodityNo := "C" 142 // contractNo := "2312" 143 // price := float64(484.0) 144 145 // exchangeID := "BMD" 146 // commodityNo := "CPO" 147 // contractNo := "2312" 148 // price := float64(3695) 149 150 t, err := trade.NewTradeExt("", "67EA896065459BECDFDB924B29CB7DF1946CED32E26C1EAC946CED32E26C1EAC946CED32E26C1EAC946CED32E26C1EAC5211AF9FEE541DDE41BCBAB68D525B0D111A0884D847D57163FF7F329FA574E7946CED32E26C1EAC946CED32E26C1EAC733827B0CE853869ABD9B8F170E14F8847D3EA0BF4E191F5D97B3DFE4CCB1F01842DD2B3EA2F4B20CAD19B8347719B7E20EA1FA7A3D1BFEFF22290F4B5C43E6C520ED5A40EC1D50ACDF342F46A92CCF87AEE6D73542C42EC17818349C7DEDAB0E4DB16977714F873D505029E27B3D57EB92D5BEDA0A710197EB67F94BB1892B30F58A3F211D9C3B3839BE2D73FD08DD776B9188654853DDA57675EBB7D6FBBFC") 151 if err != nil { 152 fmt.Println(err) 153 os.Exit(-1) 154 } 155 t.OnTrade = func(info *trade.TapAPIFillInfo) { 156 fmt.Printf("OnTrade: %+v\n", *info) 157 } 158 t.OnPosition = func(info *trade.TapAPIPositionSummary) { 159 fmt.Printf("OnPosition: %+v\n", *info) 160 } 161 162 err = t.ReqConnect("123.161.206.213", 8383) 163 if err != nil { 164 fmt.Println(err) 165 os.Exit(-1) 166 } 167 err = t.ReqLogin(accountNo, "654321") 168 if err != nil { 169 fmt.Println(err) 170 os.Exit(-2) 171 } 172 // defer t.Disconnect() 173 defer t.ReqLogout() 174 175 for _, v := range t.AccountID { 176 fmt.Println("帐号: ", v) 177 } 178 fmt.Println("查持仓 ...") 179 ps := t.ReqQryPosition(t.AccountID[0]) 180 for _, p := range ps { 181 if p.MatchSide == trade.TAPI_SIDE_BUY { 182 fmt.Println(p.Key(), ":", p.PositionQty.Uint32()) 183 } else { 184 fmt.Println(p.Key(), ": -", p.PositionQty.Uint32()) 185 } 186 } 187 fmt.Println("持仓完成") 188 189 // for _, v := range t.Instrument { 190 // if v.CommodityNo.String() == commodityNo && v.ContractNo1.String() == contractNo { 191 // session, id, err := t.ReqOrderInsert(exchangeID, commodityNo, contractNo, orderType, price, qty, side, commodityType) 192 // if err != nil { 193 // fmt.Println(err) 194 // os.Exit(-3) 195 // } 196 // fmt.Println("委托: ", session, id) 197 // break 198 // } 199 // } 200 201 // select {} 202 }