class Krkt::Kraken

classe para processar saldos & transacoes trades e ledger

Attributes

api[R]

@return [Client] API kraken

dbq[R]

@return [Array<Hash>] todos os dados bigquery

ops[R]

@return [Thor::CoreExt::HashWithIndifferentAccess] opcoes trabalho

Public Class Methods

new(dad, pop) click to toggle source

@param [Hash] dad todos os dados bigquery @param [Thor::CoreExt::HashWithIndifferentAccess] pop opcoes trabalho @option pop [Hash] :h ({}) configuracao dias ajuste reposicionamento temporal @option pop [Boolean] :v (false) mostra dados transacoes trades & ledger? @option pop [Boolean] :t (false) mostra transacoes todas ou somente novas? @return [Kraken] API kraken - obter saldos & transacoes trades e ledger

# File lib/krkt/kraken.rb, line 22
def initialize(dad, pop)
  # API kraken base
  @api = Client.new
  @dbq = dad
  @ops = pop
end

Public Instance Methods

dkr() click to toggle source

@return [Hash] dados kraken - saldos & transacoes trades e ledger

# File lib/krkt/kraken.rb, line 30
def dkr
  @dkr ||= {
    sl: api.balance,
    kt: api.trades_history,
    kl: api.ledger
  }
end
formata_saldos(moe, sal) click to toggle source

@parm [String] moe codigo kraken da moeda @parm [String] moe saldo kraken da moeda @return [String] texto formatado saldos (kraken/bigquery) & iguais/ok/nok?

# File lib/krkt/kraken.rb, line 61
def formata_saldos(moe, sal)
  t = dbq[:sl][moe.downcase.to_sym].to_d
  format(
    '%<mo>-5.5s %<kr>21.9f %<bq>21.9f %<ok>3.3s',
    mo: moe,
    kr: sal,
    bq: t,
    ok: t == sal ? 'OK' : 'NOK'
  )
end
formata_transacao_ledger(idx, hlx) click to toggle source

@parm idx (see formata_transacao_trades) @parm [Hash] hlx transacao ledger @return [String] texto formatado transacao ledger

# File lib/krkt/kraken.rb, line 91
def formata_transacao_ledger(idx, hlx)
  format(
    '%<ky>-6.6s %<dt>19.19s %<ty>-10.10s %<mo>-4.4s %<pr>18.7f %<vl>18.7f',
    ky: idx,
    dt: Time.at(hlx['time']),
    ty: hlx['type'],
    mo: hlx['asset'],
    pr: hlx['amount'].to_d,
    vl: hlx['fee'].to_d
  )
end
formata_transacao_trades(idx, htx) click to toggle source

@parm [String] idx codigo transacao @parm [Hash] htx transacao trade @return [String] texto formatado transacao trade

# File lib/krkt/kraken.rb, line 75
def formata_transacao_trades(idx, htx)
  format(
    '%<ky>-6.6s %<dt>19.19s %<ty>-10.10s %<mo>-8.8s %<pr>8.2f %<vl>15.7f %<co>8.2f',
    ky: idx,
    dt: Time.at(htx['time']),
    ty: "#{htx['type']}/#{htx['ordertype']}",
    mo: htx['pair'],
    pr: htx['price'].to_d,
    vl: htx['vol'].to_d,
    co: htx['cost'].to_d
  )
end
kyl() click to toggle source

@return [Array<String>] lista txid de transacoes ledger

# File lib/krkt/kraken.rb, line 44
def kyl
  @kyl ||= dkr[:kl]['ledger'].keys - (ops[:t] ? [] : dbq[:nl].map { |e| e[:txid] })
end
kyt() click to toggle source

@return [Array<String>] lista txid de transacoes trades

# File lib/krkt/kraken.rb, line 39
def kyt
  @kyt ||= dkr[:kt]['trades'].keys - (ops[:t] ? [] : dbq[:nt].map { |e| e[:txid] })
end
ledger() click to toggle source

@return [Hash] transacoes ledger

# File lib/krkt/kraken.rb, line 54
def ledger
  @ledger ||= dkr[:kl]['ledger'].select { |k, _| kyl.include?(k) }
end
mostra_ledger() click to toggle source

@return [String] texto transacoes ledger

# File lib/krkt/kraken.rb, line 124
def mostra_ledger
  return unless ops[:v] && ledger.count.positive?

  puts("\nledger data       hora     tipo       moeda -------quantidade -------------custo")
  ledger.each { |k, v| puts(formata_transacao_ledger(k, v)) }
end
mostra_resumo() click to toggle source

@return [String] texto saldos & transacoes & ajuste dias

# File lib/krkt/kraken.rb, line 104
def mostra_resumo
  puts("\nmoeda          saldo kraken        saldo bigquery")
  dkr[:sl].each { |k, v| puts(formata_saldos(k, v.to_d)) }

  mostra_trades
  mostra_ledger
  return unless trades.count.positive?

  puts("\nstring ajuste dias dos trades\n-h=#{kyt.map { |e| "#{e}:0" }.join(' ')}")
end
mostra_trades() click to toggle source

@return [String] texto transacoes trades

# File lib/krkt/kraken.rb, line 116
def mostra_trades
  return unless ops[:v] && trades.count.positive?

  puts("\ntrade  data       hora     tipo       par      ---preco ---------volume ---custo")
  trades.each { |k, v| puts(formata_transacao_trades(k, v)) }
end
trades() click to toggle source

@return [Hash] transacoes trades

# File lib/krkt/kraken.rb, line 49
def trades
  @trades ||= dkr[:kt]['trades'].select { |k, _| kyt.include?(k) }
end