mercado_bitcoin 0.5.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/mb_console +3 -2
- data/bin/mb_console_new +15 -0
- data/lib/mercado_bitcoin.rb +1 -0
- data/lib/mercado_bitcoin/base_api_call.rb +3 -3
- data/lib/mercado_bitcoin/console.rb +36 -6
- data/lib/mercado_bitcoin/console/command_parse.rb +53 -0
- data/lib/mercado_bitcoin/console/commands.rb +11 -0
- data/lib/mercado_bitcoin/console/commands/account.rb +18 -0
- data/lib/mercado_bitcoin/console/commands/account/withdraw.rb +19 -0
- data/lib/mercado_bitcoin/console/commands/account/withdraw/brl.rb +12 -0
- data/lib/mercado_bitcoin/console/commands/account/withdraw/btc.rb +20 -0
- data/lib/mercado_bitcoin/console/commands/account/withdraw/get.rb +13 -0
- data/lib/mercado_bitcoin/console/commands/account/withdraw/ltc.rb +12 -0
- data/lib/mercado_bitcoin/console/commands/base.rb +55 -0
- data/lib/mercado_bitcoin/console/commands/base_no_take_command.rb +5 -0
- data/lib/mercado_bitcoin/console/commands/book.rb +20 -0
- data/lib/mercado_bitcoin/console/commands/order.rb +15 -0
- data/lib/mercado_bitcoin/console/commands/order/buy.rb +14 -0
- data/lib/mercado_bitcoin/console/commands/order/cancel.rb +12 -0
- data/lib/mercado_bitcoin/console/commands/order/get.rb +12 -0
- data/lib/mercado_bitcoin/console/commands/order/list.rb +48 -0
- data/lib/mercado_bitcoin/console/commands/order/sell.rb +14 -0
- data/lib/mercado_bitcoin/console/commands/system.rb +15 -0
- data/lib/mercado_bitcoin/console/commands/ticker.rb +5 -0
- data/lib/mercado_bitcoin/errors.rb +1 -0
- data/lib/mercado_bitcoin/trade_api.rb +16 -3
- data/lib/mercado_bitcoin/version.rb +1 -1
- data/mercado_bitcoin.gemspec +1 -0
- metadata +36 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2c806d3d9c216ed908be9b78444eba4b835d10d
|
4
|
+
data.tar.gz: 4d4c4981a3fa9346a9a8125e29b699a500b88718
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e91872f735cb238f76ce383dedaa8cbf465d04bddd220da2fa5e89f886fae88fb6f85498db204fe459cf926ff274254dc1146c0ecc240d08923caaa38c9d369
|
7
|
+
data.tar.gz: 23fcf50f576909af42e303209f7971debef0154bb877453a0f11d6d162c8fa61b0e048b0ff15e39a5cbc7356432d6c11232af9ec1122d3ed174d66599f7bf484
|
data/bin/mb_console
CHANGED
@@ -17,7 +17,8 @@ def options
|
|
17
17
|
key: ENV['MB_API_KEY'],
|
18
18
|
code: ENV['MB_SECRET_KEY'],
|
19
19
|
coin_pair: ENV['MB_COIN_PAIR'] || MercadoBitcoin::TradeApi::BTC,
|
20
|
-
pretty_print: true
|
20
|
+
pretty_print: true,
|
21
|
+
status_list: '2'
|
21
22
|
}
|
22
23
|
end
|
23
24
|
|
@@ -73,7 +74,7 @@ opt_parser = OptionParser.new do |opts|
|
|
73
74
|
options[:order_type] = v
|
74
75
|
end
|
75
76
|
|
76
|
-
opts.on("--status-list [STATUS_LIST]", [
|
77
|
+
opts.on("--status-list [STATUS_LIST]", ['open', 'cancelled', 'filled', 2, 3, 4], "lista separada por virgulas: (open|2)|(cancelled|3)|(filled|4) default: open") do |v|
|
77
78
|
options[:status_list] = v
|
78
79
|
end
|
79
80
|
|
data/bin/mb_console_new
ADDED
data/lib/mercado_bitcoin.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module MercadoBitcoin
|
2
2
|
class BaseApiCall
|
3
|
-
attr_accessor :coin, :parser, :rest_client, :parser_error_class
|
3
|
+
attr_accessor :coin, :parser, :rest_client, :parser_error_class, :parsed
|
4
4
|
def initialize(coin = :bitcoin, opts = {})
|
5
5
|
@coin = coin.to_s.downcase.to_sym
|
6
6
|
raise MercadoBitcoin::CoinTypeError.new("bitcoin or litecoin expected #{coin} received") unless valid_coin?
|
@@ -14,7 +14,7 @@ module MercadoBitcoin
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def fetch
|
17
|
-
parsed = parse(get(url))
|
17
|
+
@parsed = parse(get(url))
|
18
18
|
model.new(parsed)
|
19
19
|
end
|
20
20
|
|
@@ -31,7 +31,7 @@ module MercadoBitcoin
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def bitcoin?
|
34
|
-
coin == :bitcoin
|
34
|
+
coin == :bitcoin
|
35
35
|
end
|
36
36
|
|
37
37
|
def litecoin?
|
@@ -1,18 +1,39 @@
|
|
1
1
|
class MercadoBitcoin::Console
|
2
2
|
attr_accessor :options
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
def initialize(opts = {})
|
5
|
+
@options = default_options.merge(opts)
|
6
|
+
end
|
7
|
+
|
8
|
+
def run!
|
9
|
+
option_parser.parse(self)
|
10
|
+
end
|
11
|
+
|
12
|
+
def option_parser
|
13
|
+
@option_parser ||= MercadoBitcoin::Console::CommandParse.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def default_options
|
17
|
+
@options ||= {
|
18
|
+
key: ENV['MB_API_KEY'],
|
19
|
+
code: ENV['MB_SECRET_KEY'],
|
20
|
+
coin_pair: ENV['MB_COIN_PAIR'] || MercadoBitcoin::TradeApi::BTC,
|
21
|
+
pretty_print: true,
|
22
|
+
status_list: '2'
|
23
|
+
}
|
10
24
|
end
|
11
25
|
|
12
26
|
def exec(command, opts)
|
13
27
|
print send(command, *opts)
|
14
28
|
end
|
15
29
|
|
30
|
+
def ticker(*args)
|
31
|
+
MercadoBitcoin::Ticker
|
32
|
+
.new(options[:coin_pair] == MercadoBitcoin::TradeApi::BTC ? :bitcoin : :litecoin)
|
33
|
+
.tap { |t| t.fetch }
|
34
|
+
.parsed
|
35
|
+
end
|
36
|
+
|
16
37
|
def list_system_messages(*args)
|
17
38
|
trade_api.list_system_messages
|
18
39
|
end
|
@@ -92,6 +113,12 @@ class MercadoBitcoin::Console
|
|
92
113
|
end
|
93
114
|
end
|
94
115
|
|
116
|
+
def withdrawal_coin(*args)
|
117
|
+
prms = params.dup
|
118
|
+
prms = params.merge(args.first) if args.count == 1 and args.first.is_a?(Hash)
|
119
|
+
trade_api.withdrawal_coin(**prms)
|
120
|
+
end
|
121
|
+
|
95
122
|
private
|
96
123
|
|
97
124
|
def print(value)
|
@@ -114,3 +141,6 @@ class MercadoBitcoin::Console
|
|
114
141
|
)
|
115
142
|
end
|
116
143
|
end
|
144
|
+
|
145
|
+
require 'mercado_bitcoin/console/commands'
|
146
|
+
require 'mercado_bitcoin/console/command_parse'
|
@@ -0,0 +1,53 @@
|
|
1
|
+
class MercadoBitcoin::Console::CommandParse
|
2
|
+
attr_accessor :console
|
3
|
+
|
4
|
+
class << self
|
5
|
+
def parse(console)
|
6
|
+
new.parse(console)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def parse(console)
|
11
|
+
@console = console
|
12
|
+
parser.add_command(CmdParse::HelpCommand.new, default: true)
|
13
|
+
parser.add_command(CmdParse::VersionCommand.new)
|
14
|
+
MercadoBitcoin::Console::Commands::Base.command_classes.each do |command|
|
15
|
+
parser.add_command(command.new(console))
|
16
|
+
end
|
17
|
+
global_options
|
18
|
+
parser.parse
|
19
|
+
end
|
20
|
+
|
21
|
+
def global_options
|
22
|
+
parser.global_options do |opts|
|
23
|
+
opts.on("-k", "--api-key MB_API_KEY", "api key") do |v|
|
24
|
+
console.options[:code] = v
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("-s", "--secret-key MB_SECRET_KEY", "secret key") do |v|
|
28
|
+
console.options[:key] = v
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on("--coin-pair MB_COIN_PAIR", [:brlbtc, :brlltc, :brl], "coin_pair (brlbtc | brlltc | brl), padrão: brlbtc") do |v|
|
32
|
+
console.options[:coin_pair] = v.to_s.to_upper
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on("--[no-]pretty-print", "Mostra (ou não) o json de saida formatado, saída formatada é a default") do |v|
|
36
|
+
console.options[:pretty_print] = v
|
37
|
+
end
|
38
|
+
|
39
|
+
opts.on("--[no-]debug", "debug info printed") do |v|
|
40
|
+
console.options[:debug] = v
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def parser
|
46
|
+
@parser ||= CmdParse::CommandParser.new.tap do |init|
|
47
|
+
init.main_options.program_name = "mb_console"
|
48
|
+
init.main_options.version = MercadoBitcoin::VERSION
|
49
|
+
init.main_options.banner = "MercadoBitcoin Console"
|
50
|
+
init.help_line_width = 160
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module MercadoBitcoin::Console::Commands
|
2
|
+
end
|
3
|
+
|
4
|
+
require 'cmdparse'
|
5
|
+
require 'mercado_bitcoin/console/commands/base'
|
6
|
+
require 'mercado_bitcoin/console/commands/base_no_take_command'
|
7
|
+
require 'mercado_bitcoin/console/commands/account'
|
8
|
+
require 'mercado_bitcoin/console/commands/order'
|
9
|
+
require 'mercado_bitcoin/console/commands/system'
|
10
|
+
require 'mercado_bitcoin/console/commands/book'
|
11
|
+
require 'mercado_bitcoin/console/commands/ticker'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Account < MercadoBitcoin::Console::Commands::Base
|
2
|
+
short_desc 'account operations'
|
3
|
+
|
4
|
+
def after_initialize
|
5
|
+
add_command(Info.new(console))
|
6
|
+
add_command(Withdraw.new(console))
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
class Info < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
13
|
+
short_desc 'get_account_info'
|
14
|
+
long_desc 'Retorna dados da conta, como saldos das moedas (Real, Bitcoin e Litecoin), saldos considerando retenção em ordens abertas, quantidades de ordens abertas por moeda digital, limites de saque/retirada das moedas.'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'mercado_bitcoin/console/commands/account/withdraw'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Account::Withdraw < MercadoBitcoin::Console::Commands::Base
|
2
|
+
short_desc 'withdraw'
|
3
|
+
|
4
|
+
def after_initialize
|
5
|
+
add_command(Get.new(console))
|
6
|
+
add_command(BTC.new(console))
|
7
|
+
add_command(BRL.new(console))
|
8
|
+
add_command(LTC.new(console))
|
9
|
+
options do |opts|
|
10
|
+
opts.on("--description [DESCRIPTION]", "Texto livre para auxiliar o usuário a relacionar a retirada/saque com atividades externas.") do |v|
|
11
|
+
console.options[:description] = v
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
Dir[File.expand_path('../withdraw/*.rb', __FILE__)].each do |file|
|
18
|
+
require file
|
19
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Account::Withdraw::BRL < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
2
|
+
short_desc 'withdrawal_coin'
|
3
|
+
long_desc 'Saques de Real'
|
4
|
+
|
5
|
+
def after_initialize
|
6
|
+
argument_desc(quantity: 'Valor bruto do saque.', account_ref: 'ID de uma conta bancária já cadastrada e marcada como confiável')
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(quantity, account_ref)
|
10
|
+
super(coin: 'brl', quantity: quantity, account_ref: account_ref)
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Account::Withdraw::BTC < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
2
|
+
short_desc 'withdrawal_coin'
|
3
|
+
long_desc 'Saques de BTC'
|
4
|
+
|
5
|
+
def after_initialize
|
6
|
+
argument_desc(quantity: 'Valor bruto do saque.', address: 'Endereço Bitcoin marcado como confiável')
|
7
|
+
options do |opts|
|
8
|
+
opts.on("--[no-]tx-aggregate", "retirada pode ser feita junto de outras retiradas em uma mesma transação no Blockchain.") do |v|
|
9
|
+
console.options[:tx_aggregate] = v
|
10
|
+
end
|
11
|
+
opts.on("--[no-]via-blockchain", "retirada para endereço no Mercado Bitcoin pode ser feita via Blockchain para gerar uma transação na rede Bitcoin.") do |v|
|
12
|
+
console.options[:via_blockchain] = v
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def execute(quantity, address)
|
18
|
+
super(coin: 'btc', quantity: quantity, address: address)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Account::Withdraw::Get < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
2
|
+
short_desc 'get_withdrawal'
|
3
|
+
long_desc 'Retorna os dados de uma retirada de moeda digital (BTC, LTC) ou de um saque de Real (BRL).'
|
4
|
+
|
5
|
+
def after_initialize
|
6
|
+
argument_desc(withdraw_id: 'Número de identificação da retirada/saque, único por coin.', coin: 'BRL|BTC|LCT')
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(coin, withdraw_id)
|
10
|
+
console.options[:coin_pair] = coin
|
11
|
+
super(withdraw_id)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Account::Withdraw::LTC < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
2
|
+
short_desc 'withdrawal_coin'
|
3
|
+
long_desc 'Saques de LTC'
|
4
|
+
|
5
|
+
def after_initialize
|
6
|
+
argument_desc(quantity: 'Valor bruto do saque.', address: 'Endereço Litecoin marcado como confiável')
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(quantity, address)
|
10
|
+
super(coin: 'ltc', quantity: quantity, address: address)
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Base < CmdParse::Command
|
2
|
+
class << self
|
3
|
+
def inherited(klass)
|
4
|
+
(@klasses ||= []) << klass
|
5
|
+
end
|
6
|
+
|
7
|
+
def command_classes
|
8
|
+
@command_classes ||= @klasses.select do |klass|
|
9
|
+
!(klass.to_s =~ /Base/) && klass.to_s.split('::').count == 4
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def short_desc(*args)
|
14
|
+
if args.count > 0
|
15
|
+
@short_desc = args.first
|
16
|
+
end
|
17
|
+
@short_desc
|
18
|
+
end
|
19
|
+
|
20
|
+
def long_desc(*args)
|
21
|
+
if args.count > 0
|
22
|
+
@long_desc = args.first
|
23
|
+
end
|
24
|
+
@long_desc
|
25
|
+
end
|
26
|
+
|
27
|
+
def take_commands(*args)
|
28
|
+
if args.count > 0
|
29
|
+
@take_commands = args.first
|
30
|
+
end
|
31
|
+
@take_commands.nil? ? true : @take_commands
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_accessor :console
|
36
|
+
|
37
|
+
def initialize(console)
|
38
|
+
@console = console
|
39
|
+
super(self.class.to_s.split('::').last.downcase, takes_commands: take_commands)
|
40
|
+
self.short_desc = self.class.short_desc
|
41
|
+
self.long_desc = self.class.long_desc
|
42
|
+
after_initialize
|
43
|
+
end
|
44
|
+
|
45
|
+
def take_commands
|
46
|
+
self.class.take_commands
|
47
|
+
end
|
48
|
+
|
49
|
+
def after_initialize
|
50
|
+
end
|
51
|
+
|
52
|
+
def execute(*args)
|
53
|
+
console.exec short_desc, args
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Book < MercadoBitcoin::Console::Commands::Base
|
2
|
+
short_desc 'book operations'
|
3
|
+
|
4
|
+
def after_initialize
|
5
|
+
add_command(List.new(console))
|
6
|
+
end
|
7
|
+
|
8
|
+
class List < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
9
|
+
short_desc 'list_orderbook'
|
10
|
+
long_desc 'Retorna uma lista de até 200 ordens, de acordo com os filtros informados, ordenadas pela data de última atualização. As operações executadas de cada ordem também são retornadas. Apenas ordens que pertencem ao proprietário da chave da TAPI são retornadas. Caso nenhuma ordem seja encontrada, é retornada uma lista vazia.'
|
11
|
+
|
12
|
+
def after_initialize
|
13
|
+
options do |opts|
|
14
|
+
opts.on("--[no-]full", "Indica quantidades de ordens retornadas no livro.") do |v|
|
15
|
+
console.options[:full] = v
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Order < MercadoBitcoin::Console::Commands::Base
|
2
|
+
short_desc 'order operations'
|
3
|
+
|
4
|
+
def after_initialize
|
5
|
+
add_command(List.new(console))
|
6
|
+
add_command(Get.new(console))
|
7
|
+
add_command(Cancel.new(console))
|
8
|
+
add_command(Buy.new(console))
|
9
|
+
add_command(Sell.new(console))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Dir[File.expand_path('../order/*.rb', __FILE__)].each do |file|
|
14
|
+
require file
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Order::Buy < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
2
|
+
short_desc 'place_buy_order'
|
3
|
+
long_desc 'Abre uma ordem de compra (buy ou bid) do par de moedas, quantidade de moeda digital e preço unitário limite informados. A criação contempla o processo de confrontamento da ordem com o livro de negociações. Assim, a resposta pode informar se a ordem foi executada (parcialmente ou não) imediatamente após sua criação e, assim, se segue ou não aberta e ativa no livro.'
|
4
|
+
|
5
|
+
def after_initialize
|
6
|
+
argument_desc(quantity: 'Quantidade da moeda digital a comprar/vender ao preço de price. (até 8 decimais, separador decimal: .)'+"\n", price: 'Preço unitário máximo de compra ou mínimo de venda. (até 5 decimais, separador decimal: .)')
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(quantity, price)
|
10
|
+
console.options[:quantity] = quantity.to_f
|
11
|
+
console.options[:limit_price] = price.to_f
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Order::Cancel < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
2
|
+
short_desc 'cancel_order'
|
3
|
+
long_desc 'Retorna uma lista de até 200 ordens, de acordo com os filtros informados, ordenadas pela data de última atualização. As operações executadas de cada ordem também são retornadas. Apenas ordens que pertencem ao proprietário da chave da TAPI são retornadas. Caso nenhuma ordem seja encontrada, é retornada uma lista vazia.'
|
4
|
+
|
5
|
+
def after_initialize
|
6
|
+
argument_desc(order_id: 'Número de identificação único da ordem por coin_pair.')
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(order_id)
|
10
|
+
super
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Order::Get < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
2
|
+
short_desc 'get_order'
|
3
|
+
long_desc 'Retorna os dados da ordem de acordo com o ID informado. Dentre os dados estão as informações das Operações executadas dessa ordem. Apenas ordens que pertencem ao proprietário da chave da TAPI pode ser consultadas. Erros específicos são retornados para os casos onde o order_id informado não seja de uma ordem válida ou pertença a outro usuário.'
|
4
|
+
|
5
|
+
def after_initialize
|
6
|
+
argument_desc(order_id: 'Número de identificação único da ordem por coin_pair.')
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(order_id)
|
10
|
+
super
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Order::List < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
2
|
+
StatusList = ['open', 'cancelled', 'filled', 2, 3, 4]
|
3
|
+
StatusListHelper = "lista separada por virgulas: (open|2)|(cancelled|3)|(filled|4) default: open"
|
4
|
+
|
5
|
+
short_desc 'list_orders'
|
6
|
+
long_desc 'Retorna uma lista de até 200 ordens, de acordo com os filtros informados, ordenadas pela data de última atualização. As operações executadas de cada ordem também são retornadas. Apenas ordens que pertencem ao proprietário da chave da TAPI são retornadas. Caso nenhuma ordem seja encontrada, é retornada uma lista vazia.'
|
7
|
+
|
8
|
+
def after_initialize
|
9
|
+
options do |opts|
|
10
|
+
opts.on("--order-type [BUY_SELL_OR_CODE]", ['buy', 'sell', '1', '2'], "tipo de ordem, (BUY | SELL | 1 | 2), sem default") do |v|
|
11
|
+
console.options[:order_type] = v
|
12
|
+
end
|
13
|
+
|
14
|
+
opts.on("--status-list [STATUS_LIST]", StatusList, StatusListHelper) do |v|
|
15
|
+
console.options[:status_list] = v
|
16
|
+
end
|
17
|
+
|
18
|
+
opts.on("--[no-]has-fills", "Filtro para ordens com ou sem execução") do |v|
|
19
|
+
console.options[:has_fills] = v
|
20
|
+
end
|
21
|
+
|
22
|
+
opts.on("--from-id [FROM_ID]", "Filtro para orders a partir do ID informado (inclusive).") do |v|
|
23
|
+
console.options[:from_id] = v
|
24
|
+
end
|
25
|
+
|
26
|
+
opts.on("--to-id [TO_ID]", "Filtro para orders até do ID informado (inclusive).") do |v|
|
27
|
+
console.options[:to_id] = v
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on("--from-timestamp [FROM_TIMESTAMP]", "Filtro para orders criadas a partir do timestamp informado (inclusive).") do |v|
|
31
|
+
console.options[:from_timestamp] = v
|
32
|
+
end
|
33
|
+
|
34
|
+
opts.on("--to-timestamp [TO_TIMESTAMP]", "Filtro para orders criadas até do timestamp informado (inclusive).") do |v|
|
35
|
+
console.options[:to_timestamp] = v
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
argument_desc(kind_list: StatusListHelper)
|
40
|
+
end
|
41
|
+
|
42
|
+
def execute(*args)
|
43
|
+
if(args.count > 0)
|
44
|
+
console.options[:status_list] = (StatusList & args).uniq.join(',')
|
45
|
+
end
|
46
|
+
console.exec short_desc, console.options
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::Order::Sell < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
2
|
+
short_desc 'place_sell_order'
|
3
|
+
long_desc 'Abre uma ordem de venda (sell ou ask) do par de moedas, quantidade de moeda digital e preço unitário limite informados. A criação contempla o processo de confrontamento da ordem com o livro de negociações. Assim, a resposta pode informar se a ordem foi executada (parcialmente ou não) imediatamente após sua criação e, assim, se segue ou não aberta e ativa no livro.'
|
4
|
+
|
5
|
+
def after_initialize
|
6
|
+
argument_desc(quantity: 'Quantidade da moeda digital a comprar/vender ao preço de price. (até 8 decimais, separador decimal: .)'+"\n", price: 'Preço unitário máximo de compra ou mínimo de venda. (até 5 decimais, separador decimal: .)')
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(quantity, price)
|
10
|
+
console.options[:quantity] = quantity.to_f
|
11
|
+
console.options[:limit_price] = price.to_f
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class MercadoBitcoin::Console::Commands::System < MercadoBitcoin::Console::Commands::Base
|
2
|
+
short_desc 'system operations'
|
3
|
+
|
4
|
+
def after_initialize
|
5
|
+
add_command(Messages.new(console))
|
6
|
+
end
|
7
|
+
|
8
|
+
def execute(*args)
|
9
|
+
end
|
10
|
+
|
11
|
+
class Messages < MercadoBitcoin::Console::Commands::BaseNoTakeCommand
|
12
|
+
short_desc 'list_system_messages'
|
13
|
+
long_desc 'Método para comunicação de eventos do sistema relativos à TAPÌ, entre eles bugs, correções, manutenção programada e novas funcionalidades e versões. O conteúdo muda a medida que os eventos ocorrem. A comunicação externa, feita via Twitter e e-mail aos usuários da TAPI, continuará ocorrendo. Entretanto, essa forma permite ao desenvolvedor tratar as informações juntamente ao seus logs ou até mesmo automatizar comportamentos.'
|
14
|
+
end
|
15
|
+
end
|
@@ -84,17 +84,29 @@ module MercadoBitcoin
|
|
84
84
|
post(params)
|
85
85
|
end
|
86
86
|
|
87
|
-
def get_withdrawal(
|
87
|
+
def get_withdrawal(coin: 'BTC', withdrawal_id:)
|
88
88
|
params = base_params('get_withdrawal')
|
89
|
+
params[:coin] = coin.upcase
|
89
90
|
params[:withdrawal_id] = withdrawal_id
|
90
91
|
post(params)
|
91
92
|
end
|
92
93
|
|
93
|
-
def withdraw_coin(
|
94
|
+
def withdraw_coin(coin: 'BTC', quantity:, description: nil, **opts)
|
94
95
|
params = base_params('withdraw_coin')
|
95
96
|
params[:quantity] = quantity
|
96
|
-
params[:
|
97
|
+
params[:coin] = coin.upcase
|
97
98
|
params[:description] = description if description
|
99
|
+
|
100
|
+
if params[:coin] == 'BRL'
|
101
|
+
params[:account_ref] = opts[:account_ref] || (raise MissingParameter.new('account_ref is missing for coin BRL'))
|
102
|
+
else
|
103
|
+
params[:address] = opts[:address]
|
104
|
+
if params[:coin] == 'BTC'
|
105
|
+
params[:tx_fee] = opts[:tx_fee] || 0.00005
|
106
|
+
params[:tx_aggregate] = opts[:tx_aggregate] unless opts[:tx_aggregate].nil?
|
107
|
+
params[:via_blockchain] = opts[:via_blockchain] unless opts[:via_blockchain].nil?
|
108
|
+
end
|
109
|
+
end
|
98
110
|
post(params)
|
99
111
|
end
|
100
112
|
|
@@ -197,6 +209,7 @@ module MercadoBitcoin
|
|
197
209
|
list
|
198
210
|
.gsub(/(cancelled|open|filled)/i, { 'cancelled' => 3, 'open' => 2, 'filled' => 4 })
|
199
211
|
.split(',')
|
212
|
+
.map { |i| i.to_i }
|
200
213
|
.to_json
|
201
214
|
end
|
202
215
|
|
data/mercado_bitcoin.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.add_dependency 'virtus', '~> 1.0'
|
21
21
|
spec.add_dependency 'rest-client', '~> 2.0'
|
22
22
|
spec.add_dependency 'dotenv', '~> 2.1'
|
23
|
+
spec.add_dependency 'cmdparse', '~> 3.0'
|
23
24
|
spec.add_development_dependency "bundler", "~> 1.10"
|
24
25
|
spec.add_development_dependency "pry", "~> 0.10"
|
25
26
|
spec.add_development_dependency "byebug", "~> 9.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mercado_bitcoin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Carvalho
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: virtus
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: cmdparse
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,6 +168,7 @@ files:
|
|
154
168
|
- README.md
|
155
169
|
- Rakefile
|
156
170
|
- bin/mb_console
|
171
|
+
- bin/mb_console_new
|
157
172
|
- docker-compose.yml
|
158
173
|
- lib/mercado_bitcoin.rb
|
159
174
|
- lib/mercado_bitcoin/api.rb
|
@@ -165,6 +180,25 @@ files:
|
|
165
180
|
- lib/mercado_bitcoin/api/data/trade.rb
|
166
181
|
- lib/mercado_bitcoin/base_api_call.rb
|
167
182
|
- lib/mercado_bitcoin/console.rb
|
183
|
+
- lib/mercado_bitcoin/console/command_parse.rb
|
184
|
+
- lib/mercado_bitcoin/console/commands.rb
|
185
|
+
- lib/mercado_bitcoin/console/commands/account.rb
|
186
|
+
- lib/mercado_bitcoin/console/commands/account/withdraw.rb
|
187
|
+
- lib/mercado_bitcoin/console/commands/account/withdraw/brl.rb
|
188
|
+
- lib/mercado_bitcoin/console/commands/account/withdraw/btc.rb
|
189
|
+
- lib/mercado_bitcoin/console/commands/account/withdraw/get.rb
|
190
|
+
- lib/mercado_bitcoin/console/commands/account/withdraw/ltc.rb
|
191
|
+
- lib/mercado_bitcoin/console/commands/base.rb
|
192
|
+
- lib/mercado_bitcoin/console/commands/base_no_take_command.rb
|
193
|
+
- lib/mercado_bitcoin/console/commands/book.rb
|
194
|
+
- lib/mercado_bitcoin/console/commands/order.rb
|
195
|
+
- lib/mercado_bitcoin/console/commands/order/buy.rb
|
196
|
+
- lib/mercado_bitcoin/console/commands/order/cancel.rb
|
197
|
+
- lib/mercado_bitcoin/console/commands/order/get.rb
|
198
|
+
- lib/mercado_bitcoin/console/commands/order/list.rb
|
199
|
+
- lib/mercado_bitcoin/console/commands/order/sell.rb
|
200
|
+
- lib/mercado_bitcoin/console/commands/system.rb
|
201
|
+
- lib/mercado_bitcoin/console/commands/ticker.rb
|
168
202
|
- lib/mercado_bitcoin/errors.rb
|
169
203
|
- lib/mercado_bitcoin/order_book.rb
|
170
204
|
- lib/mercado_bitcoin/query_string_refinement.rb
|