· 6 years ago · Dec 13, 2019, 04:12 AM
1const Binance = require('binance-api-node').default
2const binanceclient = Binance();
3const FTXRest = require('./');
4const BitMEXClient = require('./indexBitmex.js');
5const rp = require('request-promise');
6const FTXWs = require('ftx-api-ws');
7const now = require('performance-now');
8var crypto = require('crypto');
9const sleep = ms => new Promise(r => setTimeout(r, ms));
10// FIX account credentials
11import API from './api';
12import FIXParser, {
13 Field,
14 Fields,
15 Messages,
16 Side,
17 OrderTypes,
18 HandlInst,
19 TimeInForce,
20 EncryptMethod
21} from './fixparser/fixparser.js';
22
23var api = new API({key:"", secret:"", subaccount:""});
24
25var start;
26var end;
27var sendOrderCount = 0;
28var responseCount = 0;
29var FIXconnected = false;
30
31const ftxws = new FTXWs({
32 key: "",
33 secret: "",
34 subaccount: ""
35});
36
37const ftx = new FTXRest({
38 key: "",
39 secret: "",
40 subaccount: ""
41});
42var FTXbidPrice = 0;
43var FTXaskPrice = 0;
44var BinanceBTCBid = 0;
45var BinanceBTCAsk = 0;
46
47api.ftxFix.connect();
48
49async function WSstart() {
50 await ftxws.connect();
51 ftxws.subscribe('ticker', 'BTC-PERP');
52 ftxws.on('BTC-PERP::ticker', function(e) {
53 try {
54 FTXbidPrice = e.bid
55 FTXaskPrice = e.ask;
56 } catch (e) {
57 console.error('BTC-PERP::ticker ' + e);
58 }
59 });
60
61
62
63 const fixParser = new FIXParser();
64 api.ftxFix.on("message", message=>{
65
66 if (message.getField(Fields.MsgType).value == "8") {
67 // console.log(message.getField(Fields.OrderID).value);
68 }
69
70 });
71
72
73
74}
75
76WSstart();
77
78
79
80var tradePrice = 0;
81var tradeSize = 0;
82
83var premiumBuyHisotry = [];
84var premiumSellHistory = [];
85
86var averageBuyPremium = 0;
87var averageSellPremium = 0;
88
89function calculatepremiumHistory()
90{
91 if(BinanceBTCBid!=0 && FTXbidPrice!=0 && BinanceBTCAsk!=0 && FTXaskPrice!=0)
92 {
93 var buyPremium = FTXbidPrice - BinanceBTCBid;
94 premiumBuyHisotry.push(buyPremium);
95 var sellPremium = FTXaskPrice - BinanceBTCAsk;
96 premiumSellHistory.push(sellPremium);
97 }
98 if(premiumBuyHisotry.length>5)
99 {
100 var tempaverage = 0;
101 for(var i = 0; i<premiumBuyHisotry.length ; i++)
102 {
103 tempaverage = tempaverage+premiumBuyHisotry[i];
104 }
105 tempaverage = tempaverage/premiumBuyHisotry.length;
106 averageBuyPremium = tempaverage;
107 premiumBuyHisotry.shift();
108
109 }
110 if(premiumSellHistory.length>5)
111 {
112 var tempaverage = 0;
113 for(var i = 0; i<premiumSellHistory.length ; i++)
114 {
115 tempaverage = tempaverage+premiumSellHistory[i];
116 }
117 tempaverage = tempaverage/premiumSellHistory.length;
118 averageSellPremium = tempaverage;
119 premiumSellHistory.shift();
120
121 }
122}
123
124binanceclient.ws.ticker('BTCUSDT', ticker => {
125 try {
126 BinanceBTCBid = ticker.bestBid;
127 BinanceBTCAsk = ticker.bestAsk;
128 calculatepremiumHistory();
129 } catch (e) {
130 console.log("BTCUSDT " + e);
131 }
132});
133
134binanceclient.ws.trades(['BTCUSDT'], trade => {
135 try {
136 tradePrice = parseFloat(trade.price);
137 tradeSize = parseFloat(trade.quantity);
138 if(parseFloat(tradePrice+averageBuyPremium) > FTXaskPrice*(1.0002) && tradeSize > 0.2 && FTXbidPrice !=0 && FTXaskPrice!=0 && averageBuyPremium!=0)
139 {
140 if (FIXconnected == true)
141 {
142 console.log("sentFix Order");
143 sendOrderFIX('buy', 'BTC-PERP', FTXaskPrice, 0.0005, false, true);
144 }
145 else
146 {
147 sendOrderFTX('buy', 'BTC-PERP', FTXaskPrice, 0.0001, false, true);
148 }
149 }
150 if(parseFloat(tradePrice+averageSellPremium) < FTXbidPrice*(0.9998) && tradeSize > 0.2 && FTXbidPrice !=0 && FTXaskPrice!=0 && averageSellPremium!=0)
151 {
152 if (FIXconnected == true)
153 {
154 console.log("sentFix Order");
155 sendOrderFIX('sell', 'BTC-PERP', FTXbidPrice, 0.0005, false, true);
156 }
157 else
158 {
159 sendOrderFTX('sell', 'BTC-PERP', FTXbidPrice, 0.0001, false, true);
160 }
161 }
162
163 } catch (e) {
164 console.log("BTCUSDT " + e);
165 }
166});
167
168
169async function sendOrderFIX(side, market, price, size, postOnly, ioc) {
170 try {
171const start = now();
172 const result = await api.ftxFix.placeOrder(side, market, price, size, postOnly, ioc);
173 const end = now();
174 console.log(result.getField(Fields.ClOrdID).value);
175 console.log("Time Took", (end - start).toFixed(5));
176 } catch (err) {
177 console.log(side, market, price, size, postOnly, ioc);
178 console.log('sendOrderFIX ', err);
179 }
180
181
182}
183
184
185async function sendOrderFTX(side, market, price, size, postOnly, ioc) {
186 try {
187
188 const data = await ftx.request({
189 method: 'POST',
190 path: '/orders',
191 data: {
192 'market': market,
193 'side': side,
194 'price': price,
195 'order_type': 'limit',
196 'size': size,
197 'postOnly': postOnly,
198 'ioc': ioc
199 }
200 });
201 console.log("Sent Order", side, price, size);
202 } catch (err) {
203 console.log(side, market, price, size, postOnly, ioc);
204 console.log('sendOrderFTX ', err);
205 }
206}
207
208setInterval(async () => {
209 FIXconnected = api.ftxFix.connected;
210 //sendOrderFIX('sell', 'BTC-PERP', FTXbidPrice, 0.0001, false, true);
211}, 10000);
212
213setInterval(async () => {
214 console.log(api.ftxFix.connected);
215}, 100000);