File: /var/www/exnova-telegram-bot-v2/ssid-ws.js
import {SsidAuthMethod, ClientSdk, BlitzOptionsDirection, UserProfile, Balances, Balance, BalanceType, BlitzOptions, InstrumentType} from "@tradecodehub/client-sdk-js";
try {
let ssid = process.argv[2]
let command = process.argv[3]
if (process.argv.length > 3) {
let blitzBetPrice = process.argv[4];
}
if (process.argv.length > 4) {
let blitzDirection = process.argv[5];
}
let balancesObject = '';
let blitzOptions = '';
let positions = '';
let keepConnection = false;
const sdk = await ClientSdk.create(
'wss://ws.trade.exnova.com/echo/websocket',
303,
// 'wss://trade.exnova.com/echo/websocket',
// 82,
new SsidAuthMethod(ssid)
)
let profile = {};
switch(command) {
case 'profile':
profile = sdk.userProfile;
console.log(JSON.stringify(profile));
break;
case 'allBalances':
balancesObject = await sdk.balances()
console.log(JSON.stringify(balancesObject.getBalances()))
break;
case 'realBalance':
balancesObject = await sdk.balances();
const balance = balancesObject.getBalances().find((balance) => balance.type === BalanceType.Real)
console.log(JSON.stringify(balance));
break;
case 'allpositions': // user bets history?
// тут получаем фасад для взаимодействия с позициями
const p = await sdk.positions()
// тут получаем отдельный фасад для истории позиций
const h = await p.getPositionsHistory()
// тут пока знаем что есть еще страница в истории то вытаскиваем следующую страницу из истории
for (; h.hasPrevPage();) {
await h.fetchPrevPage()
}
// тут просто получаем все загруженные из истории позиции и выводим externalId
h.getPositions().forEach(p => {
console.log(JSON.stringify(p))
console.log("<br/><br/><br/>");
})
break;
case 'getBlitz':
blitzOptions = await sdk.blitzOptions();
console.log(JSON.stringify(blitzOptions.getActives()));
break;
case 'buyBlitz':
balancesObject = await sdk.balances()
// DEMO BALANCE HERE
let balanceObject = balancesObject.getBalances().find((balance) => balance.type === BalanceType.Demo);
blitzOptions = await sdk.blitzOptions()
const blitzOptionsActives = blitzOptions.getActives()
const blitzOptionsFirstAvailableActive = blitzOptionsActives.find((active) => active.canBeBoughtAt(new Date()) && active.ticker.indexOf('BTCUSD') == 0) //
let dealData = {};
if (blitzDirection === 'up') {
// GO UP
dealData = await blitzOptions.buy(
blitzOptionsFirstAvailableActive,
BlitzOptionsDirection.Call,
blitzOptionsFirstAvailableActive.expirationTimes[0],
blitzBetPrice*1,
balanceObject
)
} else if (blitzDirection === 'down') {
// GO DOWN
dealData = await blitzOptions.buy(
blitzOptionsFirstAvailableActive,
BlitzOptionsDirection.Put,
blitzOptionsFirstAvailableActive.expirationTimes[0],
blitzBetPrice*1,
balanceObject
)
}
keepConnection = true;
profile = sdk.userProfile;
positions = await sdk.positions()
dealData.result = {};
let start = Date.now();
let now = Date.now();
let passed = (now-start)/1000
positions.subscribeOnUpdatePosition((position) => {
now = Date.now();
passed = (now-start)/1000;
if (position.instrumentType === InstrumentType.BlitzOption) {
if (position.closeProfit !== undefined) {
dealData.result = position;
// RETURN RESULT WHEN DEAL IS DONE
console.log(JSON.stringify(dealData));
}
if (position.status !== 'open') {
sdk.shutdown();
}
if (passed > 10) {
dealData.result = {status: 'timeout'};
console.log(JSON.stringify(dealData));
sdk.shutdown();
}
}
})
break;
default:
break;
}
if (!keepConnection) {
sdk.shutdown();
}
} catch (error) {
console.log(error);
if (sdk !== undefined) {
sdk.shutdown();
}
}