rapflag 0.0.5 → 0.0.6

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: 6ebe872b465fc28d5793765b814774686c7bfca2
4
- data.tar.gz: d32509833cf09ca2abe35ab32ed131b113a7b4b9
3
+ metadata.gz: 1ffaa4c17111d1c37c02118a096dff0930a93819
4
+ data.tar.gz: 2787ec4a5db18aee84c1947aeb2c5cfeac173a08
5
5
  SHA512:
6
- metadata.gz: '09e3dca7d5999a73b2df9bc40952fdf2981b040bfcd1a638ca72dadcd733996d12cb9171f32c35761c67c503cbbd37b19ad26940ee34f47ea2a0438dd96c3fa4'
7
- data.tar.gz: e6069e7b5906814d22dbefb63d8257635bacef889bf08fa08a216ec7d14a7dc38060b20f6396223fdb17f7fdf6662a0f22bf48fc657aa8563961d1b13420a469
6
+ metadata.gz: ae3137d9aee15c69368d7d61d98effb9d8c383ad4cd338a4e63bdeb33264348af3de3d57b5a4175bc09c9250b18efecc798de10eab82c53eae4a4c74f064a336
7
+ data.tar.gz: 893844bbc5508ce8effda45098b1de91baaae9834ebb86d7359926662d901d248e5adbacbdfabe37cda8880429575151535d1757b85887a7faab220521191f4a
data/Gemfile CHANGED
@@ -1,5 +1,3 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
- # gem 'poloniex', :path => '../poloniex'
5
- gem 'poloniex', :git => 'https://github.com/ngiger/poloniex.git'
data/History.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.0.6 of 2017.04.11
2
+
3
+ * Download complete lending history not only he default of 500 items
4
+
1
5
  # 0.0.5 of 2017.04.10
2
6
 
3
7
  * Fixed daily balance for poloniex
data/bin/rapflag CHANGED
@@ -27,7 +27,6 @@ RAPFLAG::Wallets.each do |wallet|
27
27
  end
28
28
  if Opts[:dump]
29
29
  crypto_api.dump_history
30
- exit(0)
31
30
  end
32
31
  crypto_api.fetch_csv_history
33
32
  exit(0) if Opts[:poloniex]
@@ -11,7 +11,8 @@ module RAPFLAG
11
11
 
12
12
  class Poloniex < History
13
13
  attr_reader :complete_balances, :active_loans, :lending_history, :deposits, :withdrawals, :deposit_addresses,
14
- :trade_history, :available_account_balances, :open_orders, :tradable_balances
14
+ :trade_history, :available_account_balances, :open_orders, :tradable_balances,
15
+ :output_prefix
15
16
 
16
17
  @@btc_to_usd = {}
17
18
  @@bfx_to_usd = {}
@@ -51,7 +52,7 @@ module RAPFLAG
51
52
  def dump_history
52
53
  load_history_info
53
54
  FileUtils.makedirs('output') unless File.directory?('output')
54
- CSV.open('output/trade_history.csv','w+',
55
+ CSV.open("#{@output_prefix}/trade_history.csv",'w+',
55
56
  :col_sep => ';',
56
57
  :write_headers=> true,
57
58
  :headers => [ 'currency_pair'] + @trade_history.values.first.first.to_h.keys
@@ -62,7 +63,7 @@ module RAPFLAG
62
63
  end
63
64
  end
64
65
  end
65
- CSV.open('output/lending_history.csv','w+',
66
+ CSV.open("#{@output_prefix}/lending_history.csv",'w+',
66
67
  :col_sep => ';',
67
68
  :write_headers=> true,
68
69
  :headers => @lending_history.first.to_h.keys
@@ -71,7 +72,7 @@ module RAPFLAG
71
72
  csv << info.to_h.values
72
73
  end
73
74
  end
74
- CSV.open('output/tradable_balances.csv','w+',
75
+ CSV.open("#{@output_prefix}/tradable_balances.csv",'w+',
75
76
  :col_sep => ';',
76
77
  :write_headers=> true,
77
78
  :headers => [ 'from_currency', 'to_from_currency', ]
@@ -82,7 +83,7 @@ module RAPFLAG
82
83
  end
83
84
  end
84
85
  end
85
- CSV.open('output/complete_balances.csv', 'w+',
86
+ CSV.open("#{@output_prefix}/complete_balances.csv",'w+',
86
87
  :col_sep => ';',
87
88
  :write_headers=> true,
88
89
  :headers => [ 'currency', 'available', 'onOrders', 'btcValue' ]
@@ -91,7 +92,7 @@ module RAPFLAG
91
92
  csv << [balance[0]] + balance[1].values
92
93
  end
93
94
  end
94
- CSV.open('output/active_loans.csv', 'w+',
95
+ CSV.open("#{@output_prefix}/active_loans.csv",'w+',
95
96
  :col_sep => ';',
96
97
  :write_headers=> true,
97
98
  :headers => [ 'key', 'id', 'currency', 'rate', 'amount', 'duration', 'autoRenew', 'date', 'fees', ]
@@ -103,7 +104,7 @@ module RAPFLAG
103
104
  end
104
105
  end
105
106
 
106
- CSV.open('output/available_account_balances.csv', 'w+',
107
+ CSV.open("#{@output_prefix}/available_account_balances.csv",'w+',
107
108
  :col_sep => ';',
108
109
  :write_headers=> true,
109
110
  :headers => [ 'key', 'currency', 'balance']
@@ -114,7 +115,7 @@ module RAPFLAG
114
115
  end
115
116
  end
116
117
  end
117
- CSV.open('output/deposit_addresses.csv', 'w+',
118
+ CSV.open("#{@output_prefix}/deposit_addresses.csv",'w+',
118
119
  :col_sep => ';',
119
120
  :write_headers=> true,
120
121
  :headers => [ 'currency', 'id']
@@ -123,7 +124,7 @@ module RAPFLAG
123
124
  csv << [currency, id]
124
125
  end
125
126
  end
126
- CSV.open('output/withdrawals.csv','w+',
127
+ CSV.open("#{@output_prefix}/withdrawals.csv",'w+',
127
128
  :col_sep => ';',
128
129
  :write_headers=> true,
129
130
  :headers => @deposits.first.to_h.keys
@@ -132,7 +133,7 @@ module RAPFLAG
132
133
  csv << info.to_h.values
133
134
  end
134
135
  end
135
- CSV.open('output/deposits.csv','w+',
136
+ CSV.open("#{@output_prefix}/deposits.csv",'w+',
136
137
  :col_sep => ';',
137
138
  :write_headers=> true,
138
139
  :headers => @withdrawals.first.to_h.keys
@@ -191,55 +192,56 @@ module RAPFLAG
191
192
  Time.parse(@lending_history.collect{|x| x.close}.min).to_i,
192
193
  @withdrawals.collect{|x| x.timestamp}.min,].min
193
194
 
194
- min_date = Time.at(min_time).to_date
195
+ min_date = Time.at(min_time).to_date - 1
195
196
  max_date = Time.at(max_time).to_date
196
197
 
197
198
  puts "We start using the available_account_balances"
198
199
  pp @available_account_balances
199
- puts
200
- puts "Should we better start using the complete_balances"
201
200
  pp @complete_balances
202
- puts "How should I handle the following currency_pair"
203
- pp @trade_history.keys
204
201
  @available_account_balances.each do |key, balances|
205
202
  balances.each do |currency, balance|
206
203
  puts "Calculation history for #{key} #{currency} with current balance of #{balance}"
207
- out_name = "output/poloniex/#{key}_#{currency}.csv"
204
+ out_name = "#{@output_prefix}/#{key}_#{currency}.csv"
208
205
  FileUtils.makedirs(File.dirname(out_name)) unless File.exists?(File.dirname(out_name))
209
206
  @history = []
210
- current_day = max_date
211
- current_balance = balance.to_f
212
- while (current_day >= min_date)
207
+ current_day = min_date
208
+ current_balance = 0.0
209
+ while (current_day < max_date)
210
+ puts "#{key}: at #{current_day}" if current_day.day == 1 && current_day.month % 3 == 1
213
211
  entry = OpenStruct.new
214
212
  entry.current_day = current_day
215
- entry.current_balance = current_balance
213
+ entry.balance_BEG = current_balance
216
214
 
217
215
  deposits = find_per_currency_and_day(@deposits, currency,current_day)
218
216
  sum_deposits = 0.0; deposits.each{ |x| sum_deposits += x.amount.to_f }
219
- entry.deposits = sum_deposits
220
217
 
221
218
  withdrawals = find_per_currency_and_day(@withdrawals, currency, current_day)
222
219
  sum_withdrawals = 0.0; withdrawals.each{ |x| sum_withdrawals += x.amount.to_f }
223
- entry.withdrawals = sum_withdrawals
224
220
 
225
221
  lendings = find_lending_info_day(currency, current_day)
226
- earned = 0.0; sum_fee = 0.0; lendings.each{ |x| earned += x.earned.to_f; sum_fee += x.fee.to_f }
227
- entry.earned = earned
228
- entry.fees = sum_fee
222
+ # fee field is negative, therefore we let sum_fee be negative, too
223
+ income = 0.0; sum_fee = 0.0; lendings.each{ |x| income += x.earned.to_f; sum_fee += x.fee.to_f }
229
224
 
230
225
  # End_of_Day_Balance = End_of_Day_Balance(-1) + Deposits - Withdrawals + Lending_Income - Trading_Fees + Purchases - Sales
231
226
  sales = find_day_trade(currency, current_day, 'buy')
232
227
  sum_sales = 0.0; sales.each{ |sale| sum_sales += sale.amount.to_f*sale.rate.to_f }
233
- entry.sales = sum_sales
234
228
 
235
229
  purchases = find_day_trade(currency, current_day, 'sell')
236
- sum_purchase = 0.0; purchases.each{ |purchase| sum_purchase += purchase.amount.to_f+purchase.rate.to_f }
230
+ sum_purchase = 0.0; purchases.each{ |purchase| sum_purchase += purchase.amount.to_f*purchase.rate.to_f }
231
+ diff_day = sum_deposits - sum_withdrawals + sum_purchase - sum_sales + income
232
+
233
+ entry.deposits = sum_deposits
234
+ entry.income = income
235
+ entry.withdraw = sum_withdrawals
236
+ entry.sales = sum_sales
237
237
  entry.purchases = sum_purchase
238
- entry.day_difference = sum_deposits - sum_withdrawals + sum_purchase - sum_sales + sum_fee
238
+ entry.balance_END = current_balance + diff_day
239
+ entry.fees = sum_fee
240
+ entry.day_difference = diff_day
239
241
  @history << entry
240
- current_day -= 1
242
+ current_day += 1
241
243
  # balance for previous day
242
- current_balance = entry.current_balance - entry.day_difference
244
+ current_balance = entry.balance_END
243
245
  end
244
246
  next unless @history.size > 0
245
247
  CSV.open(out_name,'w+',
@@ -256,6 +258,7 @@ module RAPFLAG
256
258
  end
257
259
  private
258
260
  def check_config
261
+ @output_prefix = 'output/poloniex'
259
262
  @spec_data = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'spec', 'data'))
260
263
  ['poloniex_api_key',
261
264
  'poloniex_secret',
@@ -269,24 +272,57 @@ module RAPFLAG
269
272
  nil
270
273
  end
271
274
  private
275
+
276
+ def load_lending_history
277
+ # we must load this history in pieces, as we cannot return all items at once
278
+ end_time = Time.now.to_i
279
+ limit = 1000
280
+ full_history = []
281
+ while true
282
+ @lending_history = []
283
+ puts "After #{full_history.size} items. Loading upto #{limit} lending_history items before #{Time.at(end_time)}"
284
+ lendings = load_or_save_json(:lending_history, {:start => 0, :end_time => end_time, :limit => limit})
285
+ break if lendings.size == 0
286
+ lendings.each_with_index {|item| full_history.push(OpenStruct.new(item.clone)) };
287
+ min_time = lendings.collect{|x| x['close']}.min
288
+ min_time_i = Time.parse(min_time).to_i
289
+ end_time = min_time_i-1
290
+ break if defined?(RSpec) # We don't simulate loading more than 1 json file
291
+ end
292
+ @lending_history = full_history
293
+ puts "Loaded #{@lending_history.size} lending_history items"
294
+ end
295
+
272
296
  def load_or_save_json(name, param = nil)
297
+ load_json = nil
273
298
  json_file = File.join(@spec_data, name.to_s + '.json')
274
299
  parse_body = "@#{name} = JSON.parse(body)"
275
- load_json = param ? "::Poloniex.#{name.to_s}('#{param}').body" : "::Poloniex.#{name.to_s}.body"
276
300
  body = nil
277
301
  if File.directory?(@spec_data) && File.exist?(json_file) && defined?(RSpec)
278
302
  body = IO.read(json_file)
279
303
  else
304
+ if param
305
+ if param.is_a?(String)
306
+ load_json = "::Poloniex.#{name.to_s}('#{param}').body"
307
+ else
308
+ load_json = "::Poloniex.#{name.to_s}(#{param.values.join(',')}).body"
309
+ end
310
+ else
311
+ load_json = "::Poloniex.#{name.to_s}.body"
312
+ end
313
+ # puts "Poloniex version #{::Poloniex::VERSION}: Will call '#{load_json}' for #{name}"
280
314
  body = eval(load_json)
281
- File.open(json_file, 'w+') { |f| f.write(body)} if defined?(RSpec) && body
315
+ FileUtils.makedirs(File.dirname(json_file))
316
+ File.open(json_file, 'w+') { |f| f.write(body)} if body && defined?(RSpec)
282
317
  end
283
318
  eval(parse_body) if body
284
319
  rescue => error
285
- puts "Calling '#{load_json}' for #{name} failed with error: #{error}"
320
+ puts "Calling version #{::Poloniex::VERSION} '#{load_json}' for #{name} failed with error: #{error}"
286
321
  # puts "Backtrace #{error.backtrace.join("\n")}"
287
322
  exit(1)
288
323
  end
289
324
  def load_history_info
325
+ return if @balances && @balances.size > 0
290
326
  check_config
291
327
  begin
292
328
  @balances = load_or_save_json(:balances)
@@ -297,6 +333,7 @@ module RAPFLAG
297
333
  puts "Backtrace #{error.backtrace.join("\n")}"
298
334
  exit 1
299
335
  end
336
+ load_lending_history
300
337
  @active_loans = load_or_save_json(:active_loans)
301
338
  @available_account_balances = load_or_save_json(:available_account_balances)
302
339
  all = load_or_save_json(:complete_balances)
@@ -309,10 +346,6 @@ module RAPFLAG
309
346
  @deposits_withdrawals['deposits'].each {|x| @deposits << OpenStruct.new(x) };
310
347
  @withdrawals =[]
311
348
  @deposits_withdrawals['withdrawals'].each {|x| @withdrawals << OpenStruct.new(x) };
312
- info = load_or_save_json(:lending_history)
313
- @lending_history = []
314
- info.each {|x| @lending_history << OpenStruct.new(x) };
315
-
316
349
  @open_orders = load_or_save_json(:open_orders, 'all')
317
350
  info = load_or_save_json(:trade_history, 'all')
318
351
  @trade_history = {}
@@ -326,6 +359,7 @@ module RAPFLAG
326
359
  @active_loans # key
327
360
  @provided_loans = []; @active_loans['provided'].each {|x| @provided_loans << OpenStruct.new(x) };
328
361
  @used_loans = []; @active_loans['used'].each {|x| @used_loans << OpenStruct.new(x) };
362
+
329
363
  end
330
364
  end
331
365
  end
@@ -1,4 +1,4 @@
1
1
  module RAPFLAG
2
2
  Wallets = ['trading', 'exchange', 'deposit']
3
- VERSION='0.0.5'
3
+ VERSION='0.0.6'
4
4
  end
data/rapflag.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency 'poloniex'
20
+ spec.add_dependency 'ypoloniex', '>= 1.0.2'
21
21
  spec.add_dependency 'bitfinex-rb'
22
22
  spec.add_dependency 'trollop'
23
23
 
@@ -20,13 +20,23 @@ describe RAPFLAG::Poloniex do
20
20
  expect(@rap.currency).to eql('BTC')
21
21
  expect(File.exist?(Poloniex_CSV_Test_Lending_File)).to eql(true)
22
22
  lines = IO.readlines(Poloniex_CSV_Test_Lending_File)
23
- expect(lines.first.chomp).to eql('current_day;current_balance;deposits;withdrawals;earned;fees;sales;purchases;day_difference')
23
+ expect(lines.first.chomp).to eql('current_day;balance_BEG;deposits;income;withdraw;sales;purchases;balance_END;fees;day_difference')
24
+
24
25
  first_trade = lines.find{|line| /2017-03-25/.match(line)}.chomp
25
26
  day_difference = first_trade.split(';')[-1]
26
- expect(day_difference.to_f).to eql(-1.0018463600000007)
27
+ expect(day_difference.to_f).to eql(-0.9895374700000007)
28
+
27
29
  second_trade = lines.find{|line| /2017-03-24/.match(line)}.chomp
28
30
  day_difference = second_trade.split(';')[-1]
29
- expect(day_difference.to_f).to eql(-3.6816801927881175)
31
+ expect(day_difference.to_f).to eql(-3.6381863327881176)
32
+
33
+ third_trade = lines.find{|line| /2016-06-17/.match(line)}.chomp
34
+ day_difference = third_trade.split(';')[-1]
35
+ expect(day_difference.to_f).to eql(7.177347194443261)
36
+ income1 = first_trade.split(';')[3]
37
+ expect(income1.to_f).to eql(0.01046259)
38
+ income2 = second_trade.split(';')[3]
39
+ expect(income2.to_f).to eql(0.03696987000000001)
30
40
  end
31
41
  it 'should have correct size' do
32
42
  expect(@rap.history.size).to eql(368)
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rapflag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zeno R.R. Davatz, Niklaus Giger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-10 00:00:00.000000000 Z
11
+ date: 2017-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: poloniex
14
+ name: ypoloniex
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.0.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.0.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bitfinex-rb
29
29
  requirement: !ruby/object:Gem::Requirement