Files
krakenbot/commands/stack.js
william fef80dd77d Merge tag 'v0.4.4'
0.4.4

# -----BEGIN PGP SIGNATURE-----
#
# iQIzBAABCgAdFiEE8ghYQ1eZpvEAiagrUAnheX8D+NAFAmEc9HkACgkQUAnheX8D
# +NANmw//WZo8nk1ODqx2AVi1wlrcbNsA3RzzocAZkXiIBa5O2eqQk6vsG017OZFn
# /cBRqmsxWnYQK4IS22s0Ec85c8RkPP/XcJxneKYg/VTI4cbnD2gpJMUBm11Tuvkn
# CmdbikVjcBzlLYXpNIYDiwkQo3dbS3/6+qqxr+4YAHpK7CZqg+lEdSR5jFOOJzSw
# zTAk0Y5c8yMpQubkeSWQL6hYQ+Ei0JxISv6hrG3ulE9rhIpm5Re+cDHu/HXd8Q7x
# 1FFRsH8RgaUvA/dpmBON3TYztqHyEqt840Vvr/afakA/phZ/SG1javeZkrl8WXMG
# Yhyrbi8f62/5uEY5foG4p6b8+83K2Gtyj8W8KU3I5AFIMwiHJ37RYsOa2JuIhJb5
# nV5ET568vI1AHF3G1R7O39lbQJpk+0arShbGbkidFyxxhvI/Qm5Fx8cTIqxLltYE
# YbApNgR1YvQvFEB68fTsGn8WtEPCt3mrg/YnjHY6JQloeDje3IruQhOBOlkP1Shl
# +tL3o7RUx0lCZNT0Lunuh6E82nSRS6DIq4/V975JMgwQDZngTj+9cDPhuNkZFUbk
# LCOga/0hVs2IDbWRQ7f7l6PbldiLp9FY3c5XWoMkfr1QZsCF2YGHBovq6GBTqgS2
# p24ciXW0yyo3D1qPc1mMrNf40aLltN47ShFyodvRLSfDZD3LrpU=
# =9LIp
# -----END PGP SIGNATURE-----
# gpg: Signature made Wed Aug 18 13:52:25 2021
# gpg:                using RSA key F20858435799A6F10089A82B5009E1797F03F8D0
# gpg: Can't check signature: No public key
2022-05-08 20:25:49 +02:00

56 lines
2.2 KiB
JavaScript

module.exports = async (kraken, validate, { getEnv, getEnvOpt }) => {
const [crypto, fiat, amount, feeCurrency] = getEnv('KRAKEN_API_CRYPTO', 'KRAKEN_API_FIAT', 'KRAKEN_BUY_AMOUNT', 'KRAKEN_FEE_CURRENCY')
const ordertype = getEnvOpt('KRAKEN_ORDER_TYPE', 'limit', ['limit', 'market'])
// if living in Germany, one needs to add an additional parameter to explicitly agree to the trade
// if the parameter is not set one will get the following error: EOrder:Trading agreement required
// see https://support.kraken.com/hc/en-us/articles/360000920026--Trading-agreement-required-error-for-German-residents
const trading_agreement = getEnvOpt('KRAKEN_GERMANY_TRADING_AGREEMENT', '', ['agree', ''])
// https://www.kraken.com/features/api
const pair = `${crypto}${fiat}`
// for explanation of oflags see https://www.kraken.com/features/api#add-standard-order
var fee = ""
if (feeCurrency == crypto) {
fee = "fcib"
} else if (feeCurrency == fiat) {
fee = "fciq"
} else {
fee = ""
}
// Fetch and display information
const { result: balance } = await kraken.api('Balance')
const { result: ticker } = await kraken.api('Ticker', { pair })
const fiatBalance = balance[`Z${fiat}`] || balance[fiat] || 0.0
const cryptoBalance = balance[`X${crypto}`] || balance[crypto] || 0.0
const [{ a: [a], b: [b] }] = Object.values(ticker)
const ask = parseFloat(a)
const bid = parseFloat(b)
const price = bid
// Calculate volume and adjust precision
const volume = (amount / price).toFixed(8)
console.log('💰 Balance:', fiatBalance, fiat, '/', cryptoBalance, crypto, '\n')
console.log('📈 Ask:', ask, fiat)
console.log('📉 Bid:', bid, fiat, '\n')
if (parseFloat(fiatBalance) < parseFloat(amount)) {
console.log('❌ Insufficient funds')
return
}
// Place order
const details = { pair, type: 'buy', ordertype, price, volume }
if (validate) details.validate = true
if (trading_agreement) details.trading_agreement = trading_agreement
if (fee) details.oflags = fee
const { result: { descr: { order }, txid } } = await kraken.api('AddOrder', details)
console.log('💸 Order:', order)
if (txid) console.log('📎 Transaction ID:', txid.join(', '))
}