1
zyy
2 days ago 4fefff17528a878d345ff3311c297a66a671b8d6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package com.yami.trading.huobi.websocket.service.huobi;
 
import com.alibaba.fastjson.JSONObject;
 
import com.yami.trading.huobi.websocket.client.AlgoClient;
import com.yami.trading.huobi.websocket.client.req.algo.*;
import com.yami.trading.huobi.websocket.constant.Options;
import com.yami.trading.huobi.websocket.constant.enums.algo.AlgoOrderTypeEnum;
import com.yami.trading.huobi.websocket.model.algo.*;
import com.yami.trading.huobi.websocket.service.huobi.connection.HuobiRestConnection;
import com.yami.trading.huobi.websocket.service.huobi.connection.HuobiRestConnection25519;
import com.yami.trading.huobi.websocket.service.huobi.parser.algo.*;
import com.yami.trading.huobi.websocket.service.huobi.signature.UrlParamsBuilder;
import com.yami.trading.huobi.websocket.utils.InputChecker;
 
 
public class HuobiAlgoService implements AlgoClient {
 
  private static final String GET_ALGO_ORDERS_SPECIFIC_PATH = "/v2/algo-orders/specific";//查询特定策略委托
  private static final String GET_OPEN_ALGO_ORDERS_PATH = "/v2/algo-orders/opening";//查询未触发OPEN策略委托
  private static final String GET_HISTORY_ALGO_ORDERS_PATH = "/v2/algo-orders/history";//查询策略委托历史
  private static final String CREATE_ALGO_ORDER_PATH = "/v2/algo-orders";//策略委托下单
  private static final String CANCEL_ALGO_ORDER_PATH = "/v2/algo-orders/cancellation";//策略委托(触发前)撤单
  private static final String CANCEL_ALGO_ALL_ORDER_PATH = "/v2/algo-orders/cancel-all-after";//自动撤销订单
 
 
  private Options options;
 
  private HuobiRestConnection restConnection;
 
  public HuobiAlgoService(Options options) {
    this.options = options;
    if(options.getSign().equals("256")){
      this.restConnection = new HuobiRestConnection(options);
    }else if(options.getSign().equals("25519")){
      this.restConnection = new HuobiRestConnection25519(options);
    }
  }
 
 
  @Override
  public CreateAlgoOrderResult createAlgoOrder(CreateAlgoOrderRequest request) {
 
    InputChecker checker = InputChecker.checker()
        .shouldNotNull(request.getAccountId(), "accountId")
        .shouldNotNull(request.getSymbol(), "symbol")
        .shouldNotNull(request.getOrderSide(), "orderSide")
        .shouldNotNull(request.getOrderType(), "orderType")
        .shouldNotNull(request.getClientOrderId(), "clientOrderId")
        .shouldNotNull(request.getStopPrice(), "stopPrice");
 
    if (request.getOrderType() == AlgoOrderTypeEnum.LIMIT) {
      checker
          .shouldNotNull(request.getOrderPrice(), "orderPrice")
          .shouldNotNull(request.getOrderSize(), "orderSize");
    } else {
      checker.shouldNotNull(request.getOrderValue(), "orderValue");
    }
 
    UrlParamsBuilder builder = UrlParamsBuilder.build()
        .putToPost("accountId", request.getAccountId())
        .putToPost("symbol", request.getSymbol())
        .putToPost("orderPrice", request.getOrderPrice())
        .putToPost("orderSide", request.getOrderSide().getSide())
        .putToPost("orderSize", request.getOrderSize())
        .putToPost("orderValue", request.getOrderValue())
        .putToPost("timeInForce", request.getTimeInForce() == null ? null : request.getTimeInForce().getTimeInForce())
        .putToPost("orderType", request.getOrderType().getType())
        .putToPost("clientOrderId", request.getClientOrderId())
        .putToPost("stopPrice", request.getStopPrice());
 
    JSONObject jsonObject = restConnection.executePostWithSignature(CREATE_ALGO_ORDER_PATH, builder);
    return new CreateAlgoOrderResultParser().parse(jsonObject.getJSONObject("data"));
  }
 
  @Override
  public CancelAlgoOrderResult cancelAlgoOrder(CancelAlgoOrderRequest request) {
 
    InputChecker.checker().checkList(request.getClientOrderIds(), 1, 50, "clientOrderIds");
 
    UrlParamsBuilder builder = UrlParamsBuilder.build()
        .putToPost("clientOrderIds", request.getClientOrderIds());
 
    JSONObject jsonObject = restConnection.executePostWithSignature(CANCEL_ALGO_ORDER_PATH, builder);
    JSONObject data = jsonObject.getJSONObject("data");
    return new CancelAlgoOrderResultParser().parse(data);
  }
 
  @Override
  public GetOpenAlgoOrdersResult getOpenAlgoOrders(GetOpenAlgoOrdersRequest request) {
 
    UrlParamsBuilder builder = UrlParamsBuilder.build()
        .putToUrl("accountId", request.getAccountId())
        .putToUrl("symbol", request.getSymbol())
        .putToUrl("orderSide", request.getOrderSide() == null ? null : request.getOrderSide().getSide())
        .putToUrl("orderType", request.getOrderType() == null ? null : request.getOrderType().getType())
        .putToUrl("sort", request.getSort() == null ? null : request.getSort().getSort())
        .putToUrl("limit", request.getLimit())
        .putToUrl("fromId", request.getFromId());
 
    JSONObject jsonObject = restConnection.executeGetWithSignature(GET_OPEN_ALGO_ORDERS_PATH, builder);
    return new GetOpenAlgoOrdersResultParser().parse(jsonObject);
  }
 
  @Override
  public GetHistoryAlgoOrdersResult getHistoryAlgoOrders(GetHistoryAlgoOrdersRequest request) {
 
    InputChecker.checker()
        .shouldNotNull(request.getSymbol(), "symbol")
        .shouldNotNull(request.getOrderStatus(), "orderStatus")
    ;
 
    UrlParamsBuilder builder = UrlParamsBuilder.build()
        .putToUrl("accountId", request.getAccountId())
        .putToUrl("symbol", request.getSymbol())
        .putToUrl("orderSide", request.getOrderSide() == null ? null : request.getOrderSide().getSide())
        .putToUrl("orderType", request.getOrderType() == null ? null : request.getOrderType().getType())
        .putToUrl("orderStatus", request.getOrderStatus() == null ? null : request.getOrderStatus().getStatus())
        .putToUrl("startTime", request.getStartTime())
        .putToUrl("endTime", request.getEndTime())
        .putToUrl("sort", request.getSort() == null ? null : request.getSort().getSort())
        .putToUrl("limit", request.getLimit())
        .putToUrl("fromId", request.getFromId());
 
    JSONObject jsonObject = restConnection.executeGetWithSignature(GET_HISTORY_ALGO_ORDERS_PATH, builder);
    return new GetHistoryAlgoOrdersResultParser().parse(jsonObject);
  }
 
  @Override
  public AlgoOrder getAlgoOrdersSpecific(String clientOrderId) {
 
    InputChecker.checker().shouldNotNull(clientOrderId, "clientOrderId");
 
    UrlParamsBuilder builder = UrlParamsBuilder.build()
        .putToUrl("clientOrderId", clientOrderId);
 
    JSONObject jsonObject = restConnection.executeGetWithSignature(GET_ALGO_ORDERS_SPECIFIC_PATH, builder);
    return new AlgoOrderParser().parse(jsonObject.getJSONObject("data"));
  }
 
  @Override
  public CancelAlgoAllOrderResult cancelAlgoAllOrder(CancelAlgoAllOrderRequest request) {
    InputChecker.checker().shouldNotNull(request.getTimeout(), "timeout");
 
    UrlParamsBuilder builder = UrlParamsBuilder.build()
            .putToPost("timeout", request.getTimeout());
 
    JSONObject jsonObject = restConnection.executePostWithSignature(CANCEL_ALGO_ALL_ORDER_PATH, builder);
    return new CancelAlgoAllOrderResultParser().parse(jsonObject.getJSONObject("data"));
  }
}