bitflyer-cli 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d792bae85c516c5a7261b17d75f8909c3c71a709
4
- data.tar.gz: 9f0701681f4a4f0226f5a31d7ba5fc5b26d4a0d7
3
+ metadata.gz: 361b2441ac3dd18926a9058a98ba0c873ac4b121
4
+ data.tar.gz: 84f1630b3e802554db67297d6f43503b789c362d
5
5
  SHA512:
6
- metadata.gz: 7f64ddb6fb092ad324ae520058ed9506363d29189069db095e154fb39f207d86869b4cf892cef53baedace99c3a557824d61272d9fa026b3af08269dd8bec0ac
7
- data.tar.gz: 66439eaee46eb3ace89ddb23ba10de5c9d8cf4c4097e6edac534783695a6fb5bc29e06a42ce89d3cbbbbb0d3974dfdd2e1d71cd9c9bf6739131fe87999a55adb
6
+ metadata.gz: 2de2c18dc14311034f603ebf5680128ddca0e66f302807305cdef612fa957c0a55ec9421345a447e0efcd203f4de5331832be4e13276b80733cff33f9adbdf8a
7
+ data.tar.gz: ba346a5b99a94c78416ee4e504a1ed6806edcf8e45aa433c06953d77576bc474c01b65c6a6071caa644c523ff9065f102a6db89081fbc0da73f9348d205b9395
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bitflyer-cli (0.1.2)
4
+ bitflyer-cli (0.2.0)
5
5
  bitflyer (~> 0.1.0)
6
6
  colorize (~> 0.8.1)
7
7
  thor (~> 0.19.4)
data/bitflyer-cli.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'bitflyer-cli'
7
- spec.version = '0.1.2'
7
+ spec.version = '0.2.0'
8
8
  spec.authors = ['Yuji Ueki']
9
9
  spec.email = ['unhappychoice@gmail.com']
10
10
 
data/lib/bitflyer/cli.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'thor'
2
+ require 'bitflyer/cli/command/cancel_all_command'
2
3
  require 'bitflyer/cli/command/counter_trade_command'
3
4
  require 'bitflyer/cli/command/summary_command'
4
5
  require 'bitflyer/cli/command/order_by_best_command'
@@ -21,5 +22,10 @@ module Bitflyer
21
22
  def counter_trade
22
23
  CounterTradeCommand.new.run
23
24
  end
25
+
26
+ desc 'cancel_all', 'cancel all of orders'
27
+ def cancel_all
28
+ CancelAllCommand.new.run
29
+ end
24
30
  end
25
31
  end
@@ -0,0 +1,9 @@
1
+ module Authorization
2
+ def api_key
3
+ ENV['BITFLYER_API_KEY'] || puts('environment variable BITFLYER_API_KEY is not set')
4
+ end
5
+
6
+ def api_secret
7
+ ENV['BITFLYER_API_SECRET'] || puts('environment variable BITFLYER_API_SECRET is not set')
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'bitflyer/cli/has_http_client'
2
+
3
+ class CancelAllCommand
4
+ include HasHTTPClient
5
+
6
+ def run
7
+ http_private_client.cancel_all_child_orders(product_code: 'FX_BTC_JPY')
8
+ end
9
+ end
@@ -1,15 +1,13 @@
1
- require 'bitflyer'
1
+ require 'bitflyer/cli/has_http_client'
2
2
 
3
3
  class CounterTradeCommand
4
- def initialize
5
- @http_client = Bitflyer.http_private_client(api_key, api_secret)
6
- end
4
+ include HasHTTPClient
7
5
 
8
6
  def run
9
- position = Position.new(@http_client.positions)
7
+ position = Position.new(http_private_client.positions)
10
8
  size = position.size.abs
11
9
  type = position.size > 0 ? 'SELL' : 'BUY'
12
- response = @http_client.send_child_order(
10
+ response = http_private_client.send_child_order(
13
11
  product_code: 'FX_BTC_JPY',
14
12
  child_order_type: 'MARKET',
15
13
  side: type,
@@ -21,14 +19,4 @@ class CounterTradeCommand
21
19
  puts "Clear position #{type} / #{size}"
22
20
  end
23
21
  end
24
-
25
- private
26
-
27
- def api_key
28
- ENV['BITFLYER_API_KEY']
29
- end
30
-
31
- def api_secret
32
- ENV['BITFLYER_API_SECRET']
33
- end
34
22
  end
@@ -1,10 +1,7 @@
1
- require 'bitflyer'
1
+ require 'bitflyer/cli/has_http_client'
2
2
 
3
3
  class OrderByBestCommand
4
- def initialize
5
- @http_public_client = Bitflyer.http_public_client
6
- @http_private_client = Bitflyer.http_private_client(api_key, api_secret)
7
- end
4
+ include HasHTTPClient
8
5
 
9
6
  def run(options)
10
7
  amount = options.amount
@@ -15,30 +12,21 @@ class OrderByBestCommand
15
12
  return
16
13
  end
17
14
 
18
- ticker = @http_public_client.ticker('FX_BTC_JPY')
15
+ ticker = http_public_client.ticker('FX_BTC_JPY')
19
16
  price = type == 'buy' ? ticker['best_bid'] : ticker['best_ask']
20
17
 
21
- response = @http_private_client.send_child_order(
18
+ response = http_private_client.send_child_order(
22
19
  product_code: 'FX_BTC_JPY',
23
20
  child_order_type: 'LIMIT',
24
21
  side: type.upcase,
25
22
  price: price,
26
23
  size: amount
27
24
  )
25
+
28
26
  if response['child_order_acceptance_id'].nil?
29
27
  puts 'An error has occurred' + response.to_s
30
28
  else
31
29
  puts "An order is created #{type} / #{price} / #{amount}"
32
30
  end
33
31
  end
34
-
35
- private
36
-
37
- def api_key
38
- ENV['BITFLYER_API_KEY']
39
- end
40
-
41
- def api_secret
42
- ENV['BITFLYER_API_SECRET']
43
- end
44
32
  end
@@ -1,16 +1,18 @@
1
- require 'bitflyer'
1
+ require 'bitflyer/cli/has_http_client'
2
+ require 'bitflyer/cli/has_realtime_client'
2
3
  require 'bitflyer/cli/ext/string'
3
4
  require 'bitflyer/cli/model/position'
4
5
 
5
6
  class SummaryCommand
7
+ include HasHTTPClient
8
+ include HasRealtimeClient
9
+
6
10
  BUFFER_SIZE = 30.freeze
7
11
 
8
12
  def initialize
9
13
  @current_price = 0.0
10
- @http_clinet = Bitflyer.http_private_client(api_key, api_secret)
11
- @realtime_client = Bitflyer.realtime_client
12
14
 
13
- @realtime_client.executions_fx_btc_jpy = ->(message) {
15
+ realtime_client.executions_fx_btc_jpy = ->(message) {
14
16
  message.each { |m| @current_price = m['price'].to_f }
15
17
  }
16
18
 
@@ -30,7 +32,7 @@ class SummaryCommand
30
32
  while true
31
33
  print "\e[3F\e[0J"
32
34
  print "Current: " + @current_price.to_i.to_s.split_by_comma
33
- print "\nPosition: " + "#{@position.average} * #{@position.size}".to_s.split_by_comma
35
+ print "\nPosition: " + "#{@position.average} * #{@position.size.to_f}".to_s.split_by_comma
34
36
  print "\nSpread: " + spread.to_s.split_by_comma.color_with_number(spread)
35
37
  print "\nBalance: " + (@balance + profit).to_s.split_by_comma.ljust(15, ' ') + "(#{profit.to_s.split_by_comma.color_with_number(profit)})"
36
38
  sleep 0.1
@@ -39,17 +41,9 @@ class SummaryCommand
39
41
 
40
42
  private
41
43
 
42
- def api_key
43
- ENV['BITFLYER_API_KEY']
44
- end
45
-
46
- def api_secret
47
- ENV['BITFLYER_API_SECRET']
48
- end
49
-
50
44
  def update_balance
51
- @position = Position.new(@http_clinet.positions)
52
- @balance = @http_clinet.collateral['collateral'].to_i
45
+ @position = Position.new(http_private_client.positions)
46
+ @balance = http_private_client.collateral['collateral'].to_i
53
47
  end
54
48
 
55
49
  def profit
@@ -0,0 +1,14 @@
1
+ require 'bitflyer'
2
+ require 'bitflyer/cli/authorization'
3
+
4
+ module HasHTTPClient
5
+ include Authorization
6
+
7
+ def http_public_client
8
+ @http_public_client ||= Bitflyer.http_public_client
9
+ end
10
+
11
+ def http_private_client
12
+ @http_private_client ||= Bitflyer.http_private_client(api_key, api_secret)
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ require 'bitflyer'
2
+
3
+ module HasRealtimeClient
4
+ def realtime_client
5
+ @realtime_client ||= Bitflyer.realtime_client
6
+ end
7
+ end
@@ -1,11 +1,14 @@
1
+ require 'bigdecimal'
2
+ require 'bigdecimal/util'
3
+
1
4
  class Position
2
5
  def initialize(positions)
3
6
  @positions = positions
4
7
  end
5
8
 
6
9
  def profit(current_price)
7
- @positions.inject(0.0) do |sum, position|
8
- sum + (current_price - position['price'].to_f) * position['size'].to_f * (position['side'] == 'BUY' ? 1.0 : -1.0)
10
+ @positions.inject('0'.to_d) do |sum, position|
11
+ sum + (current_price - position['price'].to_s.to_d) * position['size'].to_s.to_d * coefficient(position)
9
12
  end
10
13
  end
11
14
 
@@ -14,12 +17,16 @@ class Position
14
17
  end
15
18
 
16
19
  def sum
17
- @positions.inject(0.0) do |sum, position|
18
- sum + position['price'].to_f * position['size'].to_f
19
- end
20
+ @positions.inject('0'.to_d) { |sum, position| sum + position['price'].to_s.to_d * position['size'].to_s.to_d }
20
21
  end
21
22
 
22
23
  def size
23
- @positions.inject(0.0) { |sum, position| sum + position['size'].to_f * (position['side'] == 'BUY' ? 1.0 : -1.0) }.round(5)
24
+ @positions.inject('0'.to_d) { |sum, position| sum + position['size'].to_s.to_d * coefficient(position) }
25
+ end
26
+
27
+ private
28
+
29
+ def coefficient(position)
30
+ position['side'] == 'BUY' ? 1.0 : -1.0
24
31
  end
25
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitflyer-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Ueki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-04 00:00:00.000000000 Z
11
+ date: 2017-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -111,10 +111,14 @@ files:
111
111
  - bitflyer-cli.gemspec
112
112
  - exe/bitflyer
113
113
  - lib/bitflyer/cli.rb
114
+ - lib/bitflyer/cli/authorization.rb
115
+ - lib/bitflyer/cli/command/cancel_all_command.rb
114
116
  - lib/bitflyer/cli/command/counter_trade_command.rb
115
117
  - lib/bitflyer/cli/command/order_by_best_command.rb
116
118
  - lib/bitflyer/cli/command/summary_command.rb
117
119
  - lib/bitflyer/cli/ext/string.rb
120
+ - lib/bitflyer/cli/has_http_client.rb
121
+ - lib/bitflyer/cli/has_realtime_client.rb
118
122
  - lib/bitflyer/cli/model/position.rb
119
123
  homepage: https://github.com/unhappychoice/bitflyer-cli
120
124
  licenses: