cryptum 0.0.321 → 0.0.323
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -5
- data/bin/cryptum-forecast +9 -9
- data/lib/cryptum/bot_conf.rb +7 -3
- data/lib/cryptum/event.rb +1 -1
- data/lib/cryptum/option/choice.rb +1 -1
- data/lib/cryptum/option.rb +9 -9
- data/lib/cryptum/order_book/generate.rb +12 -14
- data/lib/cryptum/order_book.rb +0 -137
- data/lib/cryptum/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e522f21a65cef1a50c40d23d8a8414bb497a0205e0bf146e74d9179c56a81ef0
|
4
|
+
data.tar.gz: 02a029b2056b507ce6d9aca8538a6697e7d12208b0f7d66fc35babdb9ea27cc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3973aa9521539f46d831cc0677dce3684b76c5012670c0ea68b0348f1fd4729a823883f275d6ce35a241584c2d2704169c97b3eb87737c47bf5393a0a842343
|
7
|
+
data.tar.gz: c82fc92fa7f30b95220d032ebf5c64f1b475711cd94d5d2341eec49636576ef4e187ed231cd9a30e93cdd1adf5b5ec30ff111839c07cba481d0f687ae7f111a1
|
data/README.md
CHANGED
@@ -9,7 +9,7 @@ The goal of cryptum is three-fold:
|
|
9
9
|
- Grow asset portfolios.
|
10
10
|
|
11
11
|
#### How ####
|
12
|
-
Leveraging
|
12
|
+
Leveraging multiple algorithms based upon portfolio balances, market trends / % margins of change, and a duration of time, cryptum determines order size amounts to trickle-buy crytpo. Once a given buy order is filled, a limit sell order is submitted at a specific, fixed profit margin which can be defined by the user.
|
13
13
|
|
14
14
|
### **Installation** ###
|
15
15
|
Tested on Linux, & OSX leveraging Ruby via RVM.
|
@@ -22,17 +22,17 @@ $ gem install --verbose cryptum
|
|
22
22
|
$ cryptum --help
|
23
23
|
```
|
24
24
|
|
25
|
-
- Create a Local Cryptum
|
25
|
+
- Create a Local Cryptum Session Folder
|
26
26
|
```
|
27
27
|
$ mkdir -p ~/cryptum/order_books
|
28
28
|
```
|
29
29
|
|
30
|
-
- Copy the Gem etc to the Local
|
30
|
+
- Copy the cryptum Gem's etc Folder to the Local Session Folder
|
31
31
|
```
|
32
32
|
$ cp -a $(ruby -r cryptum -e 'puts "#{Gem.path.first}/gems/cryptum-#{Cryptum::VERSION}/etc"') ~/cryptum
|
33
33
|
```
|
34
34
|
|
35
|
-
- Copy coinbase_pro.yaml.EXAMPLE to the Local
|
35
|
+
- Copy coinbase_pro.yaml.EXAMPLE to the Local Session Folder
|
36
36
|
```
|
37
37
|
$ cp ~/cryptum/etc/coinbase_pro.yaml.EXAMPLE \
|
38
38
|
~/cryptum/etc/coinbase_pro.yaml
|
@@ -51,7 +51,7 @@ $ rvm use ruby-<VERSION>@cryptum
|
|
51
51
|
$ cryptum --help
|
52
52
|
$ cryptum --symbol btc-usd \
|
53
53
|
--autotrade \
|
54
|
-
--
|
54
|
+
--session-root ~/cryptum
|
55
55
|
```
|
56
56
|
|
57
57
|
From an error monitoring perspective, they can be monitored via:
|
data/bin/cryptum-forecast
CHANGED
@@ -11,7 +11,7 @@ class Choice
|
|
11
11
|
:cycles_complete,
|
12
12
|
:driver_name,
|
13
13
|
:proxy,
|
14
|
-
:
|
14
|
+
:session_root,
|
15
15
|
:sandbox,
|
16
16
|
:symbol,
|
17
17
|
:tpm,
|
@@ -60,9 +60,9 @@ begin
|
|
60
60
|
|
61
61
|
options.on(
|
62
62
|
'-rPATH',
|
63
|
-
'--
|
63
|
+
'--session-root=PATH',
|
64
64
|
'<Optional - Directory of Cloned Repo (Defaults to Dir.pwd)">'
|
65
|
-
) { |r| option_choice.
|
65
|
+
) { |r| option_choice.session_root = r }
|
66
66
|
|
67
67
|
options.on(
|
68
68
|
'-tTPM',
|
@@ -83,16 +83,16 @@ begin
|
|
83
83
|
reason = :symbol
|
84
84
|
end
|
85
85
|
|
86
|
-
option_choice.
|
86
|
+
option_choice.session_root = Dir.pwd if option_choice.session_root.nil?
|
87
87
|
|
88
88
|
if option_choice.autotrade_percent.to_f > 100
|
89
89
|
usage = true
|
90
90
|
reason = :autotrade_percent
|
91
91
|
end
|
92
92
|
|
93
|
-
unless Dir.exist?(option_choice.
|
93
|
+
unless Dir.exist?(option_choice.session_root)
|
94
94
|
usage = true
|
95
|
-
reason = :
|
95
|
+
reason = :session_root
|
96
96
|
end
|
97
97
|
|
98
98
|
if usage
|
@@ -101,8 +101,8 @@ begin
|
|
101
101
|
puts 'ERROR: --autotrade PERCENT value cannot exceed 100'
|
102
102
|
when :symbol
|
103
103
|
puts "ERROR: --symbol Flag is Required.\n\n"
|
104
|
-
when :
|
105
|
-
puts "ERROR: #{option_choice.
|
104
|
+
when :session_root
|
105
|
+
puts "ERROR: #{option_choice.session_root} does not exist.\n\n"
|
106
106
|
end
|
107
107
|
|
108
108
|
puts `#{option_choice.driver_name} --help`
|
@@ -125,7 +125,7 @@ begin
|
|
125
125
|
|
126
126
|
# crypto = products.last[:base_currency]
|
127
127
|
fiat = products.last[:quote_currency]
|
128
|
-
fiat_portfolio_file = "#{option_choice.
|
128
|
+
fiat_portfolio_file = "#{option_choice.session_root}/order_books/#{fiat}_PORTFOLIO.json"
|
129
129
|
|
130
130
|
# portfolio = Cryptum::API.get_portfolio(
|
131
131
|
# option_choice: option_choice,
|
data/lib/cryptum/bot_conf.rb
CHANGED
@@ -10,10 +10,12 @@ module Cryptum
|
|
10
10
|
option_choice = opts[:option_choice]
|
11
11
|
event_history = opts[:event_history]
|
12
12
|
|
13
|
-
|
13
|
+
session_root = option_choice.session_root
|
14
|
+
symbol = option_choice.symbol
|
15
|
+
bot_conf_file = "#{session_root}/etc/bot_confs/#{symbol}_bot_conf.yaml"
|
14
16
|
unless File.exist?(bot_conf_file)
|
15
17
|
FileUtils.cp(
|
16
|
-
"#{
|
18
|
+
"#{session_root}/etc/bot_confs/BOT_CONF.TEMPLATE",
|
17
19
|
bot_conf_file
|
18
20
|
)
|
19
21
|
end
|
@@ -161,7 +163,9 @@ module Cryptum
|
|
161
163
|
key = opts[:key].to_s.to_sym
|
162
164
|
value = opts[:value]
|
163
165
|
|
164
|
-
|
166
|
+
session_root = option_choice.session_root
|
167
|
+
symbol = option_choice.symbol
|
168
|
+
bot_conf_file = "#{session_root}/etc/bot_confs/#{symbol}_bot_conf.yaml"
|
165
169
|
|
166
170
|
bot_conf[key] = value
|
167
171
|
File.write(bot_conf_file, bot_conf.to_yaml)
|
data/lib/cryptum/event.rb
CHANGED
@@ -35,7 +35,7 @@ module Cryptum
|
|
35
35
|
# order_history = event_history.order_book[:order_history]
|
36
36
|
this_product = event_history.order_book[:this_product]
|
37
37
|
fiat = this_product[:quote_currency]
|
38
|
-
fiat_portfolio_file = "#{option_choice.
|
38
|
+
fiat_portfolio_file = "#{option_choice.session_root}/order_books/#{fiat}_PORTFOLIO.json"
|
39
39
|
|
40
40
|
# Determine if Summary UI needs updated data
|
41
41
|
event_history = Cryptum::Portfolio::Balance.refresh(
|
data/lib/cryptum/option.rb
CHANGED
@@ -43,9 +43,9 @@ module Cryptum
|
|
43
43
|
|
44
44
|
options.on(
|
45
45
|
'-rPATH',
|
46
|
-
'--
|
47
|
-
'<Optional - Directory
|
48
|
-
) { |r| option_choice.
|
46
|
+
'--session-root=PATH',
|
47
|
+
'<Optional - Directory with etc && order_books (Defaults to ~/cryptum)>'
|
48
|
+
) { |r| option_choice.session_root = r }
|
49
49
|
|
50
50
|
options.on(
|
51
51
|
'-S',
|
@@ -82,11 +82,11 @@ module Cryptum
|
|
82
82
|
reason = :symbol
|
83
83
|
end
|
84
84
|
|
85
|
-
option_choice.
|
85
|
+
option_choice.session_root = "#{Dir.home}/cryptum" if option_choice.session_root.nil?
|
86
86
|
|
87
|
-
unless Dir.exist?(option_choice.
|
87
|
+
unless Dir.exist?(option_choice.session_root)
|
88
88
|
usage = true
|
89
|
-
reason = :
|
89
|
+
reason = :session_root
|
90
90
|
end
|
91
91
|
|
92
92
|
option_choice.market_trend_reset = 86_400 if option_choice.market_trend_reset.to_i.zero?
|
@@ -130,8 +130,8 @@ module Cryptum
|
|
130
130
|
case reason
|
131
131
|
when :symbol
|
132
132
|
puts "ERROR: --symbol Flag is Required.\n\n"
|
133
|
-
when :
|
134
|
-
puts "ERROR: #{option_choice.
|
133
|
+
when :session_root
|
134
|
+
puts "ERROR: #{option_choice.session_root} does not exist.\n\n"
|
135
135
|
when :market_trend_reset
|
136
136
|
puts "ERROR: #{option_choice.market_trend_reset} - Possible values are: 604_800 || 86_400 || 14_400 || 10_800 || 7_200 || 3_600 || 2_700 || 1_800 || 900 || 300 || 180 || 60\n\n"
|
137
137
|
end
|
@@ -168,7 +168,7 @@ module Cryptum
|
|
168
168
|
public_class_method def self.get_env(opts = {})
|
169
169
|
option_choice = opts[:option_choice]
|
170
170
|
|
171
|
-
yaml_conf_file = "#{option_choice.
|
171
|
+
yaml_conf_file = "#{option_choice.session_root}/etc/coinbase_pro.yaml"
|
172
172
|
yaml_conf = YAML.load_file(
|
173
173
|
yaml_conf_file,
|
174
174
|
symbolize_names: true
|
@@ -20,16 +20,9 @@ module Cryptum
|
|
20
20
|
option_choice = opts[:option_choice]
|
21
21
|
env = opts[:env]
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
if File.exist?(order_book_file)
|
27
|
-
last_order_book = Cryptum::OrderBook.analyze(
|
28
|
-
order_book_file: order_book_file,
|
29
|
-
option_choice: option_choice
|
30
|
-
)
|
31
|
-
order_history_meta = last_order_book[:order_history_meta] unless last_order_book[:order_history_meta].empty?
|
32
|
-
end
|
23
|
+
session_root = option_choice.session_root
|
24
|
+
symbol = option_choice.symbol
|
25
|
+
order_book_file = "#{session_root}/order_books/#{symbol}.ORDER_BOOK.json"
|
33
26
|
|
34
27
|
# Only need to retrieve a product list once / session.
|
35
28
|
products = Cryptum::API.get_products(
|
@@ -43,7 +36,7 @@ module Cryptum
|
|
43
36
|
|
44
37
|
order_book = {
|
45
38
|
path: order_book_file,
|
46
|
-
symbol:
|
39
|
+
symbol: symbol,
|
47
40
|
open_24h: 0.00,
|
48
41
|
high_24h: 0.00,
|
49
42
|
low_24h: 0.00,
|
@@ -51,8 +44,6 @@ module Cryptum
|
|
51
44
|
ticker_price: 0.00,
|
52
45
|
ticker_price_second_to_last: 0.00,
|
53
46
|
ticker_price_third_to_last: 0.00,
|
54
|
-
highest_pie_in_sky_buy_percent: 0.00,
|
55
|
-
highest_pie_in_sky_sell_percent: 0.00,
|
56
47
|
sequence: -1,
|
57
48
|
this_product: this_product,
|
58
49
|
portfolio: [],
|
@@ -70,7 +61,7 @@ module Cryptum
|
|
70
61
|
sell_end: '--'
|
71
62
|
},
|
72
63
|
order_history: [],
|
73
|
-
order_history_meta:
|
64
|
+
order_history_meta: []
|
74
65
|
}
|
75
66
|
|
76
67
|
# Order History Retention ---------------------------------------#
|
@@ -83,6 +74,13 @@ module Cryptum
|
|
83
74
|
order_book: order_book
|
84
75
|
)
|
85
76
|
|
77
|
+
if File.exist?(order_book_file)
|
78
|
+
order_book = JSON.parse(
|
79
|
+
File.read(order_book_file),
|
80
|
+
symbolize_names: true
|
81
|
+
)
|
82
|
+
end
|
83
|
+
|
86
84
|
event_history.order_book = order_book
|
87
85
|
|
88
86
|
event_history
|
data/lib/cryptum/order_book.rb
CHANGED
@@ -11,143 +11,6 @@ module Cryptum
|
|
11
11
|
autoload :MarketTrend, 'cryptum/order_book/market_trend'
|
12
12
|
autoload :ProfitMargin, 'cryptum/order_book/profit_margin'
|
13
13
|
|
14
|
-
# Supported Method Parameters::
|
15
|
-
# Cryptum::OrderBook.get_populated_indicators(
|
16
|
-
# indicator_status: 'required - indicator_status object instantiated via Cryptum::OrderBook::Indicators'
|
17
|
-
# )
|
18
|
-
public_class_method def self.get_populated_indicators(opts = {})
|
19
|
-
indicator_status = opts[:indicator_status]
|
20
|
-
|
21
|
-
indicator_type_hash = {}
|
22
|
-
indicator_type_hash[:trend_indicator_arr] = []
|
23
|
-
trend_indicator_arr = indicator_type_hash[:trend_indicator_arr]
|
24
|
-
|
25
|
-
indicator_type_hash[:health_indicator_arr] = []
|
26
|
-
health_indicator_arr = indicator_type_hash[:health_indicator_arr]
|
27
|
-
|
28
|
-
if indicator_status.order_trend
|
29
|
-
trend_indicator_arr.push(
|
30
|
-
indicator_status.order_trend
|
31
|
-
)
|
32
|
-
end
|
33
|
-
|
34
|
-
if indicator_status.weighted_avg
|
35
|
-
health_indicator_arr.push(
|
36
|
-
indicator_status.weighted_avg
|
37
|
-
)
|
38
|
-
end
|
39
|
-
|
40
|
-
if indicator_status.profit_margin
|
41
|
-
health_indicator_arr.push(
|
42
|
-
indicator_status.profit_margin
|
43
|
-
)
|
44
|
-
end
|
45
|
-
|
46
|
-
indicator_type_hash
|
47
|
-
rescue StandardError => e
|
48
|
-
raise e
|
49
|
-
end
|
50
|
-
|
51
|
-
# Supported Method Parameters::
|
52
|
-
# base_currency_overrides = Cryptum::OrderBook.base_currency_overrides
|
53
|
-
public_class_method def self.base_currency_overrides
|
54
|
-
%i[
|
55
|
-
1inch
|
56
|
-
aave
|
57
|
-
ada
|
58
|
-
amp
|
59
|
-
ankr
|
60
|
-
bal
|
61
|
-
band
|
62
|
-
bat
|
63
|
-
bnt
|
64
|
-
bond
|
65
|
-
cgld
|
66
|
-
chz
|
67
|
-
clv
|
68
|
-
comp
|
69
|
-
crv
|
70
|
-
ctsi
|
71
|
-
dot
|
72
|
-
enj
|
73
|
-
farm
|
74
|
-
fet
|
75
|
-
fil
|
76
|
-
forth
|
77
|
-
grt
|
78
|
-
gtc
|
79
|
-
icp
|
80
|
-
keep
|
81
|
-
lpt
|
82
|
-
lrc
|
83
|
-
mana
|
84
|
-
mask
|
85
|
-
matic
|
86
|
-
mir
|
87
|
-
mkr
|
88
|
-
mln
|
89
|
-
nkn
|
90
|
-
nmr
|
91
|
-
nu
|
92
|
-
ogn
|
93
|
-
poly
|
94
|
-
qnt
|
95
|
-
ren
|
96
|
-
rly
|
97
|
-
shib
|
98
|
-
skl
|
99
|
-
snx
|
100
|
-
sol
|
101
|
-
storj
|
102
|
-
sushi
|
103
|
-
trb
|
104
|
-
tribe
|
105
|
-
uma
|
106
|
-
uni
|
107
|
-
wbtc
|
108
|
-
yfi
|
109
|
-
zrx
|
110
|
-
]
|
111
|
-
rescue StandardError => e
|
112
|
-
raise e
|
113
|
-
end
|
114
|
-
|
115
|
-
# Supported Method Parameters::
|
116
|
-
# Cryptum::OrderBook.analyze(
|
117
|
-
# order_book_file: 'required - path to order book file'
|
118
|
-
# )
|
119
|
-
public_class_method def self.analyze(opts = {})
|
120
|
-
order_book_file = opts[:order_book_file]
|
121
|
-
option_choice = opts[:option_choice]
|
122
|
-
# TODO: Handle File that exists
|
123
|
-
# w/ Zero size...N number of
|
124
|
-
# attempts? Timeout may be better.
|
125
|
-
order_book = JSON.parse(
|
126
|
-
File.read(order_book_file),
|
127
|
-
symbolize_names: true
|
128
|
-
)
|
129
|
-
|
130
|
-
order_book[:option_choice] = option_choice
|
131
|
-
|
132
|
-
bot_conf = Cryptum::BotConf.read(option_choice: option_choice)
|
133
|
-
order_book[:bot_conf] = bot_conf
|
134
|
-
|
135
|
-
env = Cryptum::Option.get_env(option_choice: option_choice)
|
136
|
-
order_book[:env] = env
|
137
|
-
|
138
|
-
order_book
|
139
|
-
rescue JSON::ParserError => e
|
140
|
-
File.open('/tmp/cryptum-errors.txt', 'a') do |f|
|
141
|
-
f.puts Time.now.strftime('%Y-%m-%d %H:%M:%S.%N %z')
|
142
|
-
f.puts "Module: #{self}"
|
143
|
-
f.puts "#{e}\n\n\n"
|
144
|
-
end
|
145
|
-
|
146
|
-
retry
|
147
|
-
rescue StandardError => e
|
148
|
-
raise e
|
149
|
-
end
|
150
|
-
|
151
14
|
# Display Usage for this Module
|
152
15
|
public_class_method def self.help
|
153
16
|
constants.sort
|
data/lib/cryptum/version.rb
CHANGED