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  }