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  }