github.com/frankrap/okex-api@v1.0.4/margin_rest_api.go (about) 1 package okex 2 3 import ( 4 "strings" 5 ) 6 7 /* 8 币币杠杆账户信息 9 获取币币杠杆账户资产列表,查询各币种的余额、冻结和可用等信息。 10 11 限速规则:20次/2s 12 HTTP请求 13 GET /api/margin/v3/accounts 14 */ 15 func (client *Client) GetMarginAccounts() (GetMarginAccountsResult, error) { 16 //r := []map[string]interface{}{} 17 var r GetMarginAccountsResult 18 19 if _, _, err := client.Request(GET, MARGIN_ACCOUNTS, nil, &r); err != nil { 20 return nil, err 21 } 22 return r, nil 23 } 24 25 /* 26 单一币对账户信息 27 获取币币杠杆某币对账户的余额、冻结和可用等信息。 28 29 限速规则:20次/2s 30 HTTP请求 31 GET /api/margin/v3/accounts/<instrument_id> 32 */ 33 func (client *Client) GetMarginAccountsByInstrument(instrumentId string) (GetMarginAccountsByInstrumentResult, error) { 34 var r GetMarginAccountsByInstrumentResult 35 36 uri := GetInstrumentIdUri(MARGIN_ACCOUNTS_INSTRUMENT, instrumentId) 37 _, _, err := client.Request(GET, uri, nil, &r) 38 return r, err 39 } 40 41 /* 42 账单流水查询 43 列出杠杆帐户资产流水。帐户资产流水是指导致帐户余额增加或减少的行为。流水会分页,并且按时间倒序排序和存储,最新的排在最前面。请参阅分页部分以获取第一页之后的其他纪录。 44 45 限速规则:20次/2s 46 HTTP请求 47 GET /api/margin/v3/accounts/<instrument_id>/ledger 48 */ 49 func (client *Client) GetMarginAccountsLegerByInstrument(instrumentId string, optionalParams *map[string]string) (*[]map[string]interface{}, error) { 50 r := []map[string]interface{}{} 51 uri := GetInstrumentIdUri(MARGIN_ACCOUNTS_INSTRUMENT_LEDGER, instrumentId) 52 if optionalParams != nil && len(*optionalParams) > 0 { 53 uri = BuildParams(uri, *optionalParams) 54 } 55 56 if _, _, err := client.Request(GET, uri, nil, &r); err != nil { 57 return nil, err 58 } 59 return &r, nil 60 } 61 62 /* 63 杠杆配置信息 64 获取币币杠杆账户的借币配置信息,包括当前最大可借、借币利率、最大杠杆倍数。 65 66 限速规则:20次/2s 67 HTTP请求 68 GET /api/margin/v3/accounts/availability 69 */ 70 func (client *Client) GetMarginAccountsAvailability() (*[]map[string]interface{}, error) { 71 r := []map[string]interface{}{} 72 73 if _, _, err := client.Request(GET, MARGIN_ACCOUNTS_AVAILABILITY, nil, &r); err != nil { 74 return nil, err 75 } 76 return &r, nil 77 } 78 79 /* 80 某个杠杆配置信息 81 获取某个币币杠杆账户的借币配置信息,包括当前最大可借、借币利率、最大杠杆倍数。 82 83 限速规则:20次/2s 84 HTTP请求 85 GET /api/margin/v3/accounts/<instrument_id>/availability 86 */ 87 func (client *Client) GetMarginAccountsAvailabilityByInstrumentId(instrumentId string) (GetMarginAccountsAvailabilityByInstrumentIdResult, error) { 88 var r GetMarginAccountsAvailabilityByInstrumentIdResult 89 90 uri := GetInstrumentIdUri(MARGIN_ACCOUNTS_INSTRUMENT_AVAILABILITY, instrumentId) 91 92 if _, _, err := client.Request(GET, uri, nil, &r); err != nil { 93 return nil, err 94 } 95 return r, nil 96 } 97 98 /* 99 获取借币记录 100 获取币币杠杆帐户的借币记录。这个请求支持分页,并且按时间倒序排序和存储,最新的排在最前面。请参阅分页部分以获取第一页之后的其他纪录。 101 102 限速规则:20次/2s 103 HTTP请求 104 GET /api/margin/v3/accounts/borrowed 105 */ 106 func (client *Client) GetMarginAccountsBorrowed(optionalParams *map[string]string) (*[]map[string]interface{}, error) { 107 r := []map[string]interface{}{} 108 109 uri := MARGIN_ACCOUNTS_BORROWED 110 if optionalParams != nil { 111 uri = BuildParams(uri, *optionalParams) 112 } 113 if _, _, err := client.Request(GET, uri, nil, &r); err != nil { 114 return nil, err 115 } 116 return &r, nil 117 } 118 119 /* 120 某账户借币记录 121 获取币币杠杆帐户某币对的借币记录。这个请求支持分页,并且按时间倒序排序和存储,最新的排在最前面。请参阅分页部分以获取第一页之后的其他纪录。 122 123 限速规则:20次/2s 124 HTTP请求 125 GET /api/margin/v3/accounts/<instrument_id>/borrowed 126 */ 127 func (client *Client) GetMarginAccountsBorrowedByInstrumentId(instrumentId string, optionalParams *map[string]string) (GetMarginAccountsBorrowedByInstrumentIdResult, error) { 128 var r GetMarginAccountsBorrowedByInstrumentIdResult 129 130 uri := GetInstrumentIdUri(MARGIN_ACCOUNTS_INSTRUMENT_BORROWED, instrumentId) 131 if optionalParams != nil && len(*optionalParams) > 0 { 132 uri = BuildParams(uri, *optionalParams) 133 } 134 135 if _, _, err := client.Request(GET, uri, nil, &r); err != nil { 136 return nil, err 137 } 138 return r, nil 139 } 140 141 /* 142 获取订单列表 143 列出您当前所有的订单信息。这个请求支持分页,并且按时间倒序排序和存储,最新的排在最前面。请参阅分页部分以获取第一页之后的其他纪录。 144 145 限速规则:20次/2s 146 HTTP请求 147 GET /api/margin/v3/orders 148 */ 149 func (client *Client) GetMarginOrders(instrumentId string, optionalParams map[string]string) ([]map[string]interface{}, error) { 150 r := []map[string]interface{}{} 151 fullParams := NewParams() 152 fullParams["instrument_id"] = instrumentId 153 154 if optionalParams != nil && len(optionalParams) > 0 { 155 for k, v := range optionalParams { 156 fullParams[k] = v 157 } 158 } 159 160 uri := BuildParams(MARGIN_ORDERS, fullParams) 161 162 if _, _, err := client.Request(GET, uri, nil, &r); err != nil { 163 return nil, err 164 } 165 return r, nil 166 } 167 168 /* 169 获取订单信息 170 通过订单ID获取单个订单信息。 171 172 限速规则:20次/2s 173 HTTP请求 174 GET /api/margin/v3/orders/<order_id> 175 或者 176 GET /api/margin/v3/orders/<client_oid> 177 */ 178 func (client *Client) GetMarginOrdersById(instrumentId, orderOrClientId string) (MarginGetOrderResult, error) { 179 var r MarginGetOrderResult 180 uri := strings.Replace(MARGIN_ORDERS_BY_ID, "{order_client_id}", orderOrClientId, -1) 181 182 fullParams := NewParams() 183 fullParams["instrument_id"] = instrumentId 184 uri = BuildParams(uri, fullParams) 185 186 if _, _, err := client.Request(GET, uri, nil, &r); err != nil { 187 return r, err 188 } 189 return r, nil 190 191 } 192 193 /* 194 获取所有未成交订单 195 列出您当前所有的订单信息。这个请求支持分页,并且按时间倒序排序和存储,最新的排在最前面。请参阅分页部分以获取第一页之后的其他纪录。 196 197 限速规则:20次/2s 198 HTTP请求 199 GET /api/margin/v3/orders_pending 200 */ 201 func (client *Client) GetMarginOrdersPending(optionalParams map[string]string) ([]map[string]interface{}, error) { 202 r := []map[string]interface{}{} 203 204 uri := MARGIN_ORDERS_PENDING 205 if optionalParams != nil && len(optionalParams) > 0 { 206 uri = BuildParams(uri, optionalParams) 207 } 208 209 if _, _, err := client.Request(GET, uri, nil, &r); err != nil { 210 return nil, err 211 } 212 return r, nil 213 } 214 215 /* 216 获取成交明细 217 获取最近的成交明细列表。这个请求支持分页,并且按时间倒序排序和存储,最新的排在最前面。请参阅分页部分以获取第一页之后的其他纪录。 218 219 限速规则:20次/2s 220 HTTP请求 221 GET /api/margin/v3/fills 222 */ 223 func (client *Client) GetMarginFills(instrumentId, orderId string, optionalParams map[string]string) ([]FillItem, error) { 224 r := []FillItem{} 225 226 fullParams := NewParams() 227 fullParams["instrument_id"] = instrumentId 228 fullParams["order_id"] = orderId 229 230 if optionalParams != nil && len(optionalParams) > 0 { 231 for k, v := range optionalParams { 232 if v != "" && len(v) > 0 { 233 fullParams[k] = v 234 } 235 } 236 } 237 238 uri := BuildParams(MARGIN_FILLS, fullParams) 239 240 if _, _, err := client.Request(GET, uri, nil, &r); err != nil { 241 return nil, err 242 } 243 return r, nil 244 } 245 246 /* 247 借币 248 在某个币币杠杆账户里进行借币。 249 250 限速规则:100次/2s 251 HTTP请求 252 POST /api/margin/v3/accounts/borrow 253 */ 254 func (client *Client) PostMarginAccountsBorrow(instrumentId, currency, amount string) ([]byte, PostMarginAccountsBorrowResult, error) { 255 var r PostMarginAccountsBorrowResult 256 var respBody []byte 257 258 bodyParams := NewParams() 259 bodyParams["instrument_id"] = instrumentId 260 bodyParams["currency"] = currency 261 bodyParams["amount"] = amount 262 263 respBody, _, err := client.Request(POST, MARGIN_ACCOUNTS_BORROW, bodyParams, &r) 264 return respBody, r, err 265 } 266 267 /* 268 还币 269 在某个币币杠杆账户里进行还币。 270 271 限速规则:100次/2s 272 HTTP请求 273 POST /api/margin/v3/accounts/repayment 274 */ 275 func (client *Client) PostMarginAccountsRepayment(instrumentId, currency, amount string, optionalBorrowId *string) ([]byte, PostMarginAccountsRepaymentResult, error) { 276 var r PostMarginAccountsRepaymentResult 277 var respBody []byte 278 279 bodyParams := NewParams() 280 bodyParams["instrument_id"] = instrumentId 281 bodyParams["currency"] = currency 282 bodyParams["amount"] = amount 283 284 if optionalBorrowId != nil && len(*optionalBorrowId) > 0 { 285 bodyParams["borrow_id"] = *optionalBorrowId 286 } 287 288 respBody, _, err := client.Request(POST, MARGIN_ACCOUNTS_REPAYMENT, bodyParams, &r) 289 return respBody, r, err 290 } 291 292 /* 293 下单 294 OKEx API提供limit和market两种下单模式。只有当您的账户有足够的资金才能下单。一旦下单,您的账户资金将在订单生命周期内被冻结。被冻结的资金以及数量取决于订单指定的类型和参数。 295 296 限速规则:100次/2s 297 HTTP请求 298 POST /api/margin/v3/orders 299 */ 300 func (client *Client) PostMarginOrders(side, instrument_id string, optionalOrderInfo map[string]string) ([]byte, MarginNewOrderResult, error) { 301 var r MarginNewOrderResult 302 var respBody []byte 303 304 postParams := NewParams() 305 postParams["side"] = side 306 postParams["instrument_id"] = instrument_id 307 308 if optionalOrderInfo != nil && len(optionalOrderInfo) > 0 { 309 if v, ok := optionalOrderInfo["client_oid"]; ok { 310 postParams["client_oid"] = v 311 } 312 postParams["type"] = optionalOrderInfo["type"] 313 postParams["margin_trading"] = optionalOrderInfo["margin_trading"] 314 315 if postParams["type"] == "limit" { 316 postParams["price"] = optionalOrderInfo["price"] 317 postParams["size"] = optionalOrderInfo["size"] 318 } else if postParams["type"] == "market" { 319 if v, ok := optionalOrderInfo["size"]; ok { 320 postParams["size"] = v 321 } 322 if v, ok := optionalOrderInfo["notional"]; ok { 323 postParams["notional"] = v 324 } 325 } 326 } 327 328 var err error 329 if respBody, _, err = client.Request(POST, MARGIN_ORDERS, postParams, &r); err != nil { 330 return respBody, r, err 331 } 332 return respBody, r, nil 333 } 334 335 /* 336 批量下单 337 下指定币对的多个订单(每次只能下最多4个币对且每个币对可批量下10个单)。 338 339 限速规则:50次/2s 340 HTTP请求 341 POST /api/spot/v3/batch_orders 342 */ 343 func (client *Client) PostMarginBatchOrders(orderInfos *[]map[string]string) ([]byte, *map[string]interface{}, error) { 344 r := map[string]interface{}{} 345 var respBody []byte 346 var err error 347 if respBody, _, err = client.Request(POST, MARGIN_BATCH_ORDERS, orderInfos, &r); err != nil { 348 return respBody, nil, err 349 } 350 return respBody, &r, nil 351 } 352 353 /* 354 撤销指定订单 355 撤销之前下的未完成订单。 356 357 限速规则:100次/2s 358 HTTP请求 359 POST /api/margin/v3/cancel_orders/<order_id> 360 或者 361 POST /api/margin/v3/cancel_orders/<client_oid> 362 */ 363 func (client *Client) PostMarginCancelOrdersById(instrumentId, orderOrClientId string) ([]byte, MarginNewOrderResult, error) { 364 var r MarginNewOrderResult 365 var respBody []byte 366 uri := strings.Replace(MARGIN_CANCEL_ORDERS_BY_ID, "{order_client_id}", orderOrClientId, -1) 367 368 fullParams := NewParams() 369 fullParams["instrument_id"] = instrumentId 370 uri = BuildParams(uri, fullParams) 371 372 var err error 373 if respBody, _, err = client.Request(POST, uri, fullParams, &r); err != nil { 374 return respBody, r, err 375 } 376 return respBody, r, nil 377 } 378 379 /* 380 批量撤销订单 381 撤销指定的某一种或多种币对的所有未完成订单,每个币对可批量撤10个单。 382 383 限速规则:50次/2s 384 HTTP请求 385 POST /api/margin/v3/cancel_batch_orders 386 */ 387 func (client *Client) PostMarginCancelBatchOrders(orderInfos *[]map[string]string) ([]byte, *map[string]interface{}, error) { 388 r := map[string]interface{}{} 389 var respBody []byte 390 var err error 391 392 if respBody, _, err = client.Request(POST, MARGIN_CANCEL_BATCH_ORDERS, *orderInfos, &r); err != nil { 393 return respBody, nil, err 394 } 395 396 return respBody, &r, nil 397 }