各人好,我是步伐员大猩猩。
很久之前做过类似的跟单业务,基本上是浮萍飘摇,不了了之的体系,最近又有人跟我提【区块链交易所交易利用,我们可以跟着大佬做单吗?】,我一听,这个不就是我的强项吗!?
搬到这里讲一讲怎样实现吧。。。此教程完全是技术相关文档哦!~~~
一、API申请
想要交易步伐化,不管是怎么做,起始目标我们必须联通交易所的账户信息,另有查察它的相关API是否可以支持我们步伐化,这一点相关交易所也许是为了更好的交互性,他们都开放了本身的接口,而且一直在维护加强,使得我们开辟人员能更好的进行对接。
欧易的API之前是V3现在已经更新到V5了,接口更方便和快捷。
那么我们怎样步伐化呢?那就是申请开通它的内部API,API申请也是很简单的,只要我们在欧易平台申请账号注册,登陆进去后便可以点击头像,即可看到API按钮。
按照利用步骤就可以完成API的利用了。
这里必须要注意API的权限设置,权限有【读取】、【交易】、【提现】三个多选选择。
一般做单者的API权限,只必要选择【读取】就可以。只必要拿取跟单者的交易订单进行跟单利用。而跟单者权限就必要多选择一个【交易】,毕竟我们必要这个权限来跟单的。
【提现】哪个角色都不要选择。
API申请好之后,记得肯定要妥善生存相关密码信息。
二、开辟API对接
API这块申请完毕之后,步伐员开辟者这里,就分为俩步了。
参考文档:
- https://www.okx.com/docs-v5/zh/#overview-websocket
复制代码 a. 获取做单者的交易信息
为了快速获取到做单者的做单信息,显然对于步伐来说,怎样快速的获取是个难题,API文档有俩种方式,一种是http访问接口方式,另一种是websocket方式。显然,websocket方式更得当快速的获取方式。
注意:我这里利用okhttp3 websocket组件来进行实现
aa. 起首进行websocket连接,并进行登录验证
- OkHttpClient client =newOkHttpClient.Builder()
- .readTimeout(5, TimeUnit.SECONDS)
- .build();
- Request request =newRequest.Builder()
- .url(url)
- .build();
复制代码 登录验证,三个参数都是申请API时的信息,辨识填入即可。
- //登录
- public void login(String apiKey, String passPhrase, String secretKey){
- String timestamp = System.currentTimeMillis() /1000+"";
- String message = timestamp +"GET"+"/users/self/verify";
- sign = sha256_HMAC(message, secretKey);
- String str ="{"op""+":"+""login""+","+""args""+":"+"[{"+""apiKey""+":"+""" + apiKey + """+","+""passphrase""+":"+""" + passPhrase + """+","+""timestamp""+":"+""" + timestamp + """+","+""sign""+":"+""" + sign + """+"}]}";
- sendMessage(str);
- }
复制代码 然后,我们根据websocket订阅的性子,写一个订阅和取消订阅的方法.
- //订阅,参数为频道组成的集合
- publicvoidsubscribe(List<Map> list) {
- Strings = listToJson(list);
- Stringstr ="{"op": "subscribe", "args":"+ s +"}";
- if(null!= webSocket)
- sendMessage(str);
- }
- //取消订阅,参数为频道组成的集合
- publicvoidunsubscribe(List<Map> list) {
- Strings = listToJson(list);
- Stringstr ="{"op": "unsubscribe", "args":"+ s +"}";
- if(null!= webSocket) {
- sendMessage(str);
- }
- }
- private StringlistToJson(List<Map> list) {
- JSONArray jsonArray =newJSONArray();
- for(Mapmap : list) {
- jsonArray.add(JSONObject.fromObject(map));
- }
- returnjsonArray.toJSONString();
- }
复制代码 根据以上方法,就可以使逻辑跑通了,如下实施订阅:
- List<Map> channel = Lists.newArrayList();
- List<Map> channel2 = Lists.newArrayList();
- //添加订阅频道
- Map<String,String> orderMap =newHashMap();
- orderMap.put("channel","orders");
- orderMap.put("instType","SWAP");
- channel.add(orderMap);
- //订单订阅
- webSocketClient.subscribe(channel);
- log.info("订阅订单socket频道");
- //添加订阅频道
- MapalgoOrders =newHashMap();
- algoOrders.put("channel","orders-algo");
- algoOrders.put("instType","SWAP");
- channel2.add(algoOrders);
- //委托订阅
- webSocketClient.subscribe(channel2);
复制代码 假如做单者有做单举动,那么在websocket块的onMessage方法内就会收到做单举动的订单信息。以下是订单的关键信息,根据api文档内的字段进行比较具体表现含义!~
- OkexSocketOrder order = new OkexSocketOrder();
- //canceled:撤单成功
- //live:等待成交
- //partially_filled:部分成交
- //filled:完全成交
- order.setState(switchState(item.getState()));
- //side
- //posSide
- order.setType(switchSide(item.getSide(), item.getPosSide()));
- //instId
- order.setInstrument_id(item.getInstId());
- //ordId
- order.setOrder_id(item.getOrdId());
- //px
- order.setPrice(item.getPx());
- //ordType
- order.setOrder_type(switchOrdType(item.getOrdType()));
- //sz
- order.setSize(item.getSz());
- //lever
- order.setLeverage(item.getLever());
- //仓位模式
- order.setTdMode(item.getTdMode());
- //uTime
- order.setTimestamp(DateUtil.date(Long.parseLong(item.getUTime())));
复制代码 至此以上做单者的订单信息获取完成,而且实现在毫秒级内,完全适用。
b. 根据做单者的订单信息,我们可以根据预期的特定增值和减量来处置惩罚我们的订单,然后进行跟单。
因为每一张票据分别有 下单 撤单 以及成交的状态标识,那么开辟者也必要根据这些状态来处置惩罚我们的跟单状态。
意味做单者怎样做跟单者也怎样做的利用。
这里贴一些订单的利用接口方法,供参考:
- /**
- * <b>功能描述:</b>下单<br>
- */
- @POST("/api/v5/trade/order")
- Call<JSONObject> placeOrder(@Body JSONObject jsonObject);
- /**
- * <b>功能描述:</b>修改订单<br>
- */
- @POST("/api/v5/trade/amend-order")
- Call<JSONObject> amendOrder(@Body V5AmendOrder var1);
- /**
- * 获取杠杆倍数 Get Leverage
- */
- @GET("/api/v5/account/leverage-info")
- Call<JSONObject> getLeverage(@Query("instId") String instId, @Query("mgnMode") String mgnMode);
- /**
- * <b>功能描述:</b>撤单<br>
- */
- @POST("/api/v5/trade/cancel-order")
- Call<JSONObject> cancelOrder(@Body CancelOrder cancelOrder);
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|