Code readability and added the forgotten mocks
This commit is contained in:
parent
134eaaa518
commit
7accdaa84f
12 changed files with 126 additions and 96 deletions
|
|
@ -1,9 +1,13 @@
|
|||
const common = require('../common/ccxt')
|
||||
const _ = require('lodash/fp')
|
||||
const consts = require('./consts')
|
||||
const ORDER_TYPE = consts.ORDER_TYPES.MARKET
|
||||
const FIAT = common.FIAT['kraken']
|
||||
const CRYPTO = common.CRYPTO['kraken']
|
||||
|
||||
const { ORDER_TYPES } = require('./consts')
|
||||
const { COINS } = require('../../new-admin/config/coins')
|
||||
|
||||
const ORDER_TYPE = ORDER_TYPES.MARKET
|
||||
const { BTC, ETH, LTC, BCH } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, BCH]
|
||||
const FIAT = ['USD', 'EUR']
|
||||
const AMOUNT_PRECISION = 8
|
||||
|
||||
const loadConfig = (account) => {
|
||||
const mapper = {
|
||||
|
|
@ -16,6 +20,4 @@ const loadConfig = (account) => {
|
|||
|
||||
const isConfigValid = ({ key, clientId, secret }) => key && secret && clientId
|
||||
|
||||
const amountPrecision = () => 8
|
||||
|
||||
module.exports = { loadConfig, isConfigValid, amountPrecision , CRYPTO, FIAT, ORDER_TYPE }
|
||||
module.exports = { loadConfig, isConfigValid, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
|
||||
|
|
|
|||
|
|
@ -1,37 +1,34 @@
|
|||
var ccxt = require('ccxt')
|
||||
const coinUtils = require('../../coin-utils')
|
||||
const common = require('../common/ccxt')
|
||||
const kraken = require('./kraken')
|
||||
const bitstamp = require('./bitstamp')
|
||||
const itbit = require('./itbit')
|
||||
const consts = require('./consts')
|
||||
const _ = require('lodash/fp')
|
||||
const ccxt = require('ccxt')
|
||||
|
||||
const ALL_EXCHANGES = {
|
||||
kraken,
|
||||
bitstamp,
|
||||
itbit
|
||||
}
|
||||
const { toUnit } = require('../../coin-utils')
|
||||
const { buildMarket, ALL } = require('../common/ccxt')
|
||||
const { ORDER_TYPES } = require('./consts')
|
||||
|
||||
const DEFAULT_PRICE_PRECISION = 2
|
||||
const DEFAULT_AMOUNT_PRECISION = 8
|
||||
|
||||
function trade (side, account, cryptoAtoms, fiatCode, cryptoCode, exchangeName) {
|
||||
try {
|
||||
const exchangeConfig = ALL_EXCHANGES[exchangeName]
|
||||
const exchangeConfig = ALL[exchangeName]
|
||||
if (!exchangeConfig) throw Error('Exchange configuration not found')
|
||||
|
||||
if (!exchangeConfig) throw Error('no exchange')
|
||||
if (exchangeConfig.isConfigValid && !exchangeConfig.isConfigValid(account)) throw Error('Invalid config')
|
||||
const { loadOptions, loadConfig = _.noop, isConfigValid, ORDER_TYPE, AMOUNT_PRECISION } = exchangeConfig
|
||||
if (_.isFunction(isConfigValid) && !isConfigValid(account)) throw Error('Invalid config')
|
||||
|
||||
const exchange = new ccxt[exchangeName](exchangeConfig.loadConfig(account))
|
||||
const symbol = buildMarket(fiatCode, cryptoCode, exchangeName)
|
||||
const precision = _.defaultTo(DEFAULT_AMOUNT_PRECISION, AMOUNT_PRECISION)
|
||||
const amount = toUnit(cryptoAtoms, cryptoCode).toFixed(precision)
|
||||
const options = _.isFunction(loadOptions) ? loadOptions(account) : {}
|
||||
const exchange = new ccxt[exchangeName](loadConfig(account))
|
||||
|
||||
const symbol = common.verifyCurrencies(exchangeName, fiatCode, cryptoCode)
|
||||
const precision = exchangeConfig.amountPrecision ? exchangeConfig.amountPrecision() : consts.DECIMAL_PRECISION.DEFAULT_AMOUNT
|
||||
const amount = coinUtils.toUnit(cryptoAtoms, cryptoCode).toFixed(precision)
|
||||
const options = exchangeConfig.loadOptions ? exchangeConfig.loadOptions(account) : {}
|
||||
if (exchangeConfig.ORDER_TYPE === consts.ORDER_TYPES.MARKET) {
|
||||
return exchange.createOrder(symbol, consts.ORDER_TYPES.MARKET, side, amount, null, options)
|
||||
if (ORDER_TYPE === ORDER_TYPES.MARKET) {
|
||||
return exchange.createOrder(symbol, ORDER_TYPES.MARKET, side, amount, null, options)
|
||||
}
|
||||
return exchange.fetchOrderBook(symbol)
|
||||
.then(orderBook => {
|
||||
const price = calculatePrice(side, amount, orderBook).toFixed(consts.DECIMAL_PRECISION.PRICE)
|
||||
return exchange.createOrder(symbol, consts.ORDER_TYPES.LIMIT, side, amount, price, options)
|
||||
const price = calculatePrice(side, amount, orderBook).toFixed(DEFAULT_PRICE_PRECISION)
|
||||
return exchange.createOrder(symbol, ORDER_TYPES.LIMIT, side, amount, price, options)
|
||||
})
|
||||
} catch (e) {
|
||||
return Promise.reject(e)
|
||||
|
|
|
|||
|
|
@ -3,9 +3,5 @@ const ORDER_TYPES = {
|
|||
MARKET: 'market',
|
||||
LIMIT: 'limit'
|
||||
}
|
||||
const DECIMAL_PRECISION = {
|
||||
PRICE: 2,
|
||||
DEFAULT_AMOUNT: 8
|
||||
}
|
||||
|
||||
module.exports = { ORDER_TYPES, DECIMAL_PRECISION }
|
||||
module.exports = { ORDER_TYPES }
|
||||
|
|
|
|||
|
|
@ -1,9 +1,13 @@
|
|||
const common = require('../common/ccxt')
|
||||
const _ = require('lodash/fp')
|
||||
const consts = require('./consts')
|
||||
const ORDER_TYPE = consts.ORDER_TYPES.LIMIT
|
||||
const FIAT = common.FIAT['kraken']
|
||||
const CRYPTO = common.CRYPTO['kraken']
|
||||
|
||||
const { ORDER_TYPES } = require('./consts')
|
||||
const { COINS } = require('../../new-admin/config/coins') // para cada exchange
|
||||
|
||||
const ORDER_TYPE = ORDER_TYPES.LIMIT
|
||||
const { BTC, ETH, LTC, BCH } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, BCH]
|
||||
const FIAT = ['USD']
|
||||
const AMOUNT_PRECISION = 4
|
||||
|
||||
const loadConfig = (account) => {
|
||||
const mapper = {
|
||||
|
|
@ -17,6 +21,4 @@ const loadConfig = (account) => {
|
|||
const loadOptions = ({ walletId }) => ({ walletId })
|
||||
const isConfigValid = ({ clientKey, clientSecret, userId, walletId }) => clientKey && clientSecret && userId && walletId
|
||||
|
||||
const amountPrecision = () => 4
|
||||
|
||||
module.exports = { amountPrecision, loadOptions, loadConfig, isConfigValid, CRYPTO, FIAT, ORDER_TYPE }
|
||||
module.exports = { loadOptions, loadConfig, isConfigValid, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
|
||||
|
|
|
|||
|
|
@ -1,9 +1,13 @@
|
|||
const common = require('../common/ccxt')
|
||||
const _ = require('lodash/fp')
|
||||
const consts = require('./consts')
|
||||
const ORDER_TYPE = consts.ORDER_TYPES.MARKET
|
||||
const FIAT = common.FIAT['kraken']
|
||||
const CRYPTO = common.CRYPTO['kraken']
|
||||
|
||||
const { ORDER_TYPES } = require('./consts')
|
||||
const { COINS } = require('../../new-admin/config/coins')
|
||||
|
||||
const ORDER_TYPE = ORDER_TYPES.MARKET
|
||||
const { BTC, BCH, DASH, ETH, LTC, ZEC } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, DASH, ZEC, BCH]
|
||||
const FIAT = ['USD', 'EUR']
|
||||
const AMOUNT_PRECISION = 6
|
||||
|
||||
const loadConfig = (account) => {
|
||||
const mapper = {
|
||||
|
|
@ -16,6 +20,4 @@ const loadConfig = (account) => {
|
|||
const loadOptions = () => ({ expiretm: '+60' })
|
||||
const isConfigValid = ({ apiKey, privateKey }) => apiKey && privateKey
|
||||
|
||||
const amountPrecision = () => 6
|
||||
|
||||
module.exports = { amountPrecision, loadOptions, loadConfig, isConfigValid, CRYPTO, FIAT, ORDER_TYPE }
|
||||
module.exports = { loadOptions, loadConfig, isConfigValid, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@ module.exports = {
|
|||
sell
|
||||
}
|
||||
|
||||
function buy (account, cryptoAtoms, fiatCode, cryptoCode) {
|
||||
function buy (cryptoAtoms, fiatCode, cryptoCode) {
|
||||
console.log('[mock] buying %s %s for %s', cryptoAtoms.toString(), cryptoCode, fiatCode)
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
function sell (account, cryptoAtoms, fiatCode, cryptoCode) {
|
||||
function sell (cryptoAtoms, fiatCode, cryptoCode) {
|
||||
console.log('[mock] selling %s %s for %s', cryptoAtoms.toString(), cryptoCode, fiatCode)
|
||||
return Promise.resolve()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue