Назад

Быстрая работа с биржей через терминал

Порой бывает необходимо быстро выполнить какой-либо ордер, т.к. часто во время резких колебаний курса веб-интерфейсы бирж бывают труднодоступны, а во время большого дампа за 5 минут стоимость актива может упасть или вырасти на 10 и более процентов.

Я предлагаю для таких случаев, и не только, использовать работу с биржей посредством API через терминал.

Предупреждение: для работы необходимы хотя бы начальные навыки программирования, если вы не знаете, что делать, ничего не делайте.

Для работы будем использовать программную платформу Node JS.

Для начала необходимо установить платформу на компьютер. Скачиваем ее с официального сайта, ссылка есть в википедии.

Далее потребуется библиотека единого стандарта работы с криптовалютными биржами CCXT (CryptoCurrency eXchange Trading).

Чтобы ее установить, сначала устанавливаем на компьютер GitHubDesktop, на сайте github находим библиотеку ccxt, клонируем ее к себе на компьютер, запускаем терминал Node JS, в нем выполняем

npm install ccxt

теперь библитотека установлена, затем в папке пользователя пишем необходимый скрипт, к примеру, нам нужно срочно закрыть позицию BTC:

создаем файл: close_btc.js в папке пользователя


"use strict";

const ccxt = require ('ccxt')

// ----------------------------------------------------------------------------

;(async () => {

const exchange = new ccxt.huobipro ({

'apiKey': 'publ',

'secret': 'secr',

'verbose': false, // set to true to see more debugging output

'timeout': 60000,

'enableRateLimit': true, // add this

})

// try to load markets first, retry on request timeouts until it succeeds:

while (true) {

try {

await exchange.loadMarkets ();

break;

} catch (e) {

if (e instanceof ccxt.RequestTimeout)

console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)

}

}

const symbol = 'BTC/USDT'

const orderType = 'market'

const side = 'sell'

const amount = 0.002;

//const price = 5000;

// try just one attempt to create an order

try {

const balance = await exchange.fetchBalance ( );

console.log (balance.BTC.free);

const response = await exchange.createOrder (symbol, orderType, side, balance.BTC.free);

console.log (response);

console.log ('Succeeded');

} catch (e) {

console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)

console.log ('Failed');

}

}) ()

теперь сохраняем его, а когда нужно быстро закрыть позицию на бирже HUOBI, в терминале Node JS Command prompt выполняем команду

node close_btc.js

Приведу еще один пример. Например, начался резкий обвал рынка. Пока вы вручную закроете позиции, пройдет несколько минут, что чревато большими потерями. К тому же, возможно, у вас стоят стоп-лимитные или тейк-профитные ордера, что еще больше осложняет задачу. С ней просто справляется следующий скрипт. Он пробегает по списку валютных пар и отменяет все ордера, затем продает все активы. Если указаны активы по отношению к тизеру, скрипт обеспечивает выход в тизер за несколько секунд. Все, что надо поменять - это ключи API и подставить нужные валютные пары в четвертую строку

"use strict";

const ccxt = require ('ccxt')

const symbol = [ 'BTC/USDT', 'NEO/USDT', 'BCH/USDT', 'ETH/USDT', 'BNB/USDT' ]

const delay = 2000

// ----------------------------------------------------------------------------

let sleep = (ms) => new Promise (resolve => setTimeout (resolve, ms))

;(async () => {

const exchange = new ccxt.binance ({

'apiKey': 'xxx',

'secret': 'yyy',

'timeout': 60000,

})

const balance = await exchange.fetchBalance ( )

async function COrder(element){

try {

const canc = await exchange.cancelOrder( element.id, element.symbol )

} catch (e) {

console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)

console.log ('Failed')

}

}

async function fetchCancelAndSale(element){

const orders = await exchange.fetchOpenOrders(element)

orders.forEach(COrder);

let asset = element.split('/', 1)

asset = asset[0]

const freebal = balance[asset].free

console.log(asset + freebal);

if (freebal > 0){

try {

const response = await exchange.createOrder (element, 'market', 'sell', freebal )

} catch (e) {

if (e instanceof ccxt.RequestTimeout)

console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)

}

}

}

// try to load markets first, retry on request timeouts until it succeeds:

while (true) {

try {

await exchange.loadMarkets ();

break;

} catch (e) {

if (e instanceof ccxt.RequestTimeout)

console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)

}

}

try {

symbol.forEach(fetchCancelAndSale)

} catch (e) {

console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)

console.log ('Failed');

}

}) ()

Только авторизованные пользователи могут оставлять новые комментарии

Популярные блоги по теме