cryptum 0.0.320 → 0.0.321
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/Gemfile +1 -1
- data/lib/cryptum/bot_conf.rb +3 -1
- data/lib/cryptum/event/history.rb +37 -32
- data/lib/cryptum/ui/order_execution.rb +10 -2
- data/lib/cryptum/ui/order_plan.rb +35 -33
- data/lib/cryptum/ui/order_plan_details.rb +10 -2
- data/lib/cryptum/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 618890a4abd0cf25d2ed57e8c159e24809f002d00bf1f80477ee527e9c10af80
|
4
|
+
data.tar.gz: f440a2343fc364c1889b0808101fbd86a6d543bd193ab226255c386740abea78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc9cb05b462c3e2384249c6e6465793cbdfee40d0ac1d89fb86ece35e9e47e72294730b758f284fb88a6ae38cb22b17a672dbed94a4adc5322ba1996b796eb15
|
7
|
+
data.tar.gz: eeeee4adb494120eb55fe8301cdbbc00d1176e3a83494a0293d12cea3bbd2c4ba697ec7891bcd431275accc4074a72bd0198676e79ce9f8d6acaea65503db67e
|
data/Gemfile
CHANGED
data/lib/cryptum/bot_conf.rb
CHANGED
@@ -50,7 +50,9 @@ module Cryptum
|
|
50
50
|
raise e
|
51
51
|
end
|
52
52
|
|
53
|
-
#
|
53
|
+
# SAUCE 1
|
54
|
+
# Calculate Target Profit Margin Percent Based Upon
|
55
|
+
# Observed Margins of Change in the Past 24hrs.
|
54
56
|
public_class_method def self.recalculate_tpm(opts = {})
|
55
57
|
option_choice = opts[:option_choice]
|
56
58
|
event_history = opts[:event_history]
|
@@ -11,10 +11,27 @@ module Cryptum
|
|
11
11
|
:event_type,
|
12
12
|
:first_event,
|
13
13
|
:market_trend_event,
|
14
|
+
:open_sell_orders,
|
15
|
+
:open_sell_orders_max,
|
16
|
+
:open_sell_orders_merge,
|
14
17
|
:order_book,
|
15
18
|
:order_canceled,
|
16
|
-
:
|
19
|
+
:order_execute_win_active,
|
20
|
+
:order_execute_details_win_active,
|
21
|
+
:order_execute_index_offset,
|
22
|
+
:order_execute_max_rows_to_display,
|
23
|
+
:order_execute_max_records_available_to_display,
|
24
|
+
:order_execute_row_to_select,
|
25
|
+
:order_execute_selected_data,
|
26
|
+
:order_plan_win_active,
|
27
|
+
:order_plan_details_win_active,
|
28
|
+
:order_plan_index_offset,
|
29
|
+
:order_plan_max_rows_to_display,
|
30
|
+
:order_plan_max_records_available_to_display,
|
31
|
+
:order_plan_row_to_select,
|
32
|
+
:order_plan_selected_data,
|
17
33
|
:order_ready,
|
34
|
+
:order_submitted,
|
18
35
|
:plan_no,
|
19
36
|
:reconnected,
|
20
37
|
:red_pill,
|
@@ -24,20 +41,6 @@ module Cryptum
|
|
24
41
|
:time_between_orders_max,
|
25
42
|
:time_between_orders_min,
|
26
43
|
:time_between_orders_reset,
|
27
|
-
:order_plan_win_active,
|
28
|
-
:order_plan_details_win_active,
|
29
|
-
:order_plan_index_offset,
|
30
|
-
:order_plan_max_rows_to_display,
|
31
|
-
:order_plan_max_records_available_to_display,
|
32
|
-
:order_plan_row_to_select,
|
33
|
-
:order_plan_selected_data,
|
34
|
-
:order_execute_win_active,
|
35
|
-
:order_execute_details_win_active,
|
36
|
-
:order_execute_index_offset,
|
37
|
-
:order_execute_max_rows_to_display,
|
38
|
-
:order_execute_max_records_available_to_display,
|
39
|
-
:order_execute_row_to_select,
|
40
|
-
:order_execute_selected_data,
|
41
44
|
:recalculate_order_plan
|
42
45
|
|
43
46
|
def initialize(opts = {})
|
@@ -47,21 +50,11 @@ module Cryptum
|
|
47
50
|
|
48
51
|
self.bullish_trend = true
|
49
52
|
self.first_event = true
|
50
|
-
self.
|
51
|
-
self.
|
52
|
-
self.
|
53
|
+
self.open_sell_orders = 0
|
54
|
+
self.open_sell_orders_max = 500
|
55
|
+
self.open_sell_orders_merge = false
|
53
56
|
self.order_book = order_book
|
54
|
-
self.
|
55
|
-
self.start_time = start_time
|
56
|
-
self.reconnected = false
|
57
|
-
self.red_pill = false
|
58
|
-
self.order_plan_win_active = true
|
59
|
-
self.order_plan_details_win_active = false
|
60
|
-
self.order_plan_index_offset = 0
|
61
|
-
self.order_plan_max_rows_to_display = 6
|
62
|
-
self.order_plan_max_records_available_to_display = 6
|
63
|
-
self.order_plan_row_to_select = order_plan_index_offset
|
64
|
-
self.order_plan_selected_data = { color: :white }
|
57
|
+
self.order_canceled = false
|
65
58
|
self.order_execute_win_active = false
|
66
59
|
self.order_execute_details_win_active = false
|
67
60
|
self.order_execute_index_offset = 0
|
@@ -69,14 +62,26 @@ module Cryptum
|
|
69
62
|
self.order_execute_max_records_available_to_display = 6
|
70
63
|
self.order_execute_row_to_select = order_execute_index_offset
|
71
64
|
self.order_execute_selected_data = { color: :white }
|
65
|
+
self.order_plan_win_active = true
|
66
|
+
self.order_plan_details_win_active = false
|
67
|
+
self.order_plan_index_offset = 0
|
68
|
+
self.order_plan_max_rows_to_display = 6
|
69
|
+
self.order_plan_max_records_available_to_display = 6
|
70
|
+
self.order_plan_row_to_select = order_plan_index_offset
|
71
|
+
self.order_plan_selected_data = { color: :white }
|
72
|
+
self.order_ready = false
|
73
|
+
self.order_submitted = false
|
74
|
+
self.plan_no = 1
|
75
|
+
self.reconnected = false
|
76
|
+
self.red_pill = false
|
72
77
|
self.recalculate_order_plan = false
|
78
|
+
self.start_time = start_time
|
73
79
|
|
74
|
-
#
|
75
|
-
# Default = 10 minutes
|
80
|
+
# FAST BUY = 10 minutes
|
76
81
|
self.time_between_orders = 600
|
77
82
|
self.time_between_orders_reset = time_between_orders
|
78
83
|
|
79
|
-
# 1 hour
|
84
|
+
# SLOW BUY = 1 hour
|
80
85
|
self.time_between_orders_max = 3_600
|
81
86
|
|
82
87
|
# 5 seconds
|
@@ -157,6 +157,9 @@ module Cryptum
|
|
157
157
|
this_order[:color] = :cyan
|
158
158
|
order_history_meta.push(this_order)
|
159
159
|
end
|
160
|
+
|
161
|
+
# SAUCE 3
|
162
|
+
# Time between orders
|
160
163
|
# Increment n Seconds between buys to
|
161
164
|
# account for bearish and bullish trends
|
162
165
|
dynamic_time_increment = cast_margin_to_sec * -1
|
@@ -361,7 +364,11 @@ module Cryptum
|
|
361
364
|
total_to_sell = order_history.select do |oh|
|
362
365
|
oh[:status].to_sym == :open && oh[:side].to_sym == :sell
|
363
366
|
end.length
|
364
|
-
|
367
|
+
event_history.open_sell_orders = total_to_sell
|
368
|
+
# TODO: when event_history.open_sell_orders > event_history.open_sell_orders_max
|
369
|
+
# Capture highest amount to sell, cancel all orders, and create _one_ limit sell
|
370
|
+
# order set to a price of the previously captured highest amount to sell.
|
371
|
+
event_history.open_sell_orders_merge = true if total_to_sell > event_history.open_sell_orders_max
|
365
372
|
|
366
373
|
# TODO: Everything Above this Line Needs to be Indicators ^
|
367
374
|
|
@@ -566,8 +573,9 @@ module Cryptum
|
|
566
573
|
|
567
574
|
order_execute_win.refresh
|
568
575
|
|
569
|
-
# Reset Order Ready
|
576
|
+
# Reset Order Ready && Open Sell Orders Merge (If Applicable) Booleans
|
570
577
|
event_history.order_ready = false
|
578
|
+
event_history.open_sell_orders_merge = false
|
571
579
|
|
572
580
|
event_history
|
573
581
|
rescue Interrupt
|
@@ -16,10 +16,8 @@ module Cryptum
|
|
16
16
|
option_choice = opts[:option_choice]
|
17
17
|
order_plan_win = opts[:order_plan_win]
|
18
18
|
event_history = opts[:event_history]
|
19
|
-
# key_press_event = opts[:key_press_event]
|
20
19
|
indicator_status = opts[:indicator_status]
|
21
20
|
bot_conf = opts[:bot_conf]
|
22
|
-
# fiat_portfolio_file = opts[:fiat_portfolio_file]
|
23
21
|
|
24
22
|
ticker_price = event_history.order_book[:ticker_price].to_f
|
25
23
|
return event_history unless ticker_price.positive?
|
@@ -27,13 +25,9 @@ module Cryptum
|
|
27
25
|
market_trend_color = plan_color = :white
|
28
26
|
|
29
27
|
this_product = event_history.order_book[:this_product]
|
30
|
-
# symbol_out = this_product[:id]
|
31
|
-
# quote_increment = this_product[:quote_increment]
|
32
28
|
base_increment = this_product[:base_increment]
|
33
|
-
# base_min_size = this_product[:base_min_size].to_f
|
34
29
|
min_market_funds = this_product[:min_market_funds]
|
35
30
|
|
36
|
-
# fiat_smallest_decimal = quote_increment.to_s.split('.')[-1].length
|
37
31
|
crypto_smallest_decimal = base_increment.to_s.split('.')[-1].length
|
38
32
|
|
39
33
|
autotrade_percent = bot_conf[:autotrade_portfolio_percent].to_f
|
@@ -50,23 +44,11 @@ module Cryptum
|
|
50
44
|
raise "ID for Crypto Currency, #{crypto_currency} Not Found" if this_account.empty?
|
51
45
|
|
52
46
|
balance = format("%0.#{crypto_smallest_decimal}f", this_account.first[:balance])
|
53
|
-
# avail_for_trade = format("%0.#{crypto_smallest_decimal}f", this_account.first[:available])
|
54
|
-
|
55
47
|
fiat_portfolio = event_history.order_book[:fiat_portfolio]
|
56
48
|
total_holdings = format('%0.2f', fiat_portfolio.first[:total_holdings])
|
57
|
-
# fiat_balance = format('%0.2f', fiat_portfolio.first[:balance])
|
58
49
|
fiat_avail_for_trade = format('%0.2f', fiat_portfolio.first[:available])
|
59
50
|
|
60
51
|
fiat_budget = fiat_avail_for_trade.to_f
|
61
|
-
# current_fiat_invested_percent = (
|
62
|
-
# 1 - (fiat_budget / total_holdings.to_f)
|
63
|
-
# ) * 100
|
64
|
-
|
65
|
-
# order_history = event_history.order_book[:order_history]
|
66
|
-
# open_orders = order_history.select do |order|
|
67
|
-
# order[:status] == 'open'
|
68
|
-
# end
|
69
|
-
# total_open_orders = open_orders.length
|
70
52
|
|
71
53
|
order_plan = event_history.order_book[:order_plan]
|
72
54
|
|
@@ -75,10 +57,6 @@ module Cryptum
|
|
75
57
|
balance.to_f * ticker_price
|
76
58
|
)
|
77
59
|
|
78
|
-
# crypto_invested_percent = format(
|
79
|
-
# '%0.2f',
|
80
|
-
# (current_crypto_fiat_value.to_f / total_holdings.to_f) * 100
|
81
|
-
# )
|
82
60
|
crypto_invested_percent = format(
|
83
61
|
'%0.2f',
|
84
62
|
current_crypto_fiat_value.to_f.fdiv(total_holdings.to_f) * 100
|
@@ -86,6 +64,8 @@ module Cryptum
|
|
86
64
|
|
87
65
|
event_history.red_pill = true if crypto_invested_percent.to_f > autotrade_percent
|
88
66
|
|
67
|
+
# SAUCE 2
|
68
|
+
# Generating and/or recalculating order plan
|
89
69
|
if event_history.recalculate_order_plan || (
|
90
70
|
crypto_invested_percent.to_f <= autotrade_percent &&
|
91
71
|
autotrade_percent.positive? && (
|
@@ -114,6 +94,9 @@ module Cryptum
|
|
114
94
|
risk_target = fiat_budget * autotrade_cast_as_decimal
|
115
95
|
risk_alloc = risk_target
|
116
96
|
|
97
|
+
# TODO: Order Plan <= event_history.max_open_sell_orders
|
98
|
+
previous_slice_fiat_investing = 0.00
|
99
|
+
last_slice_detected = false
|
117
100
|
loop do
|
118
101
|
# Calculate min order size
|
119
102
|
allocation_decimal += 0.0001
|
@@ -121,21 +104,30 @@ module Cryptum
|
|
121
104
|
|
122
105
|
next unless fiat_investing > min_market_funds.to_f
|
123
106
|
|
107
|
+
# Increase amount invested in each slice as we increment
|
108
|
+
# plan numbers (i.e. slices) in the order plan cycle
|
109
|
+
slice_alloc = fiat_budget * allocation_decimal
|
110
|
+
fiat_investing = slice_alloc + previous_slice_fiat_investing
|
111
|
+
|
124
112
|
risk_alloc = fiat_budget * autotrade_cast_as_decimal
|
125
113
|
allocation_percent = allocation_decimal * 100
|
126
|
-
fiat_returning = fiat_investing + (
|
127
|
-
fiat_investing * tpm_cast_as_decimal
|
128
|
-
)
|
129
|
-
profit = fiat_returning - fiat_investing
|
130
114
|
|
131
115
|
break if order_plan.map { |op| op[:invest].to_f }.sum > risk_target ||
|
132
|
-
allocation_percent > 100
|
116
|
+
allocation_percent > 100 ||
|
117
|
+
last_slice_detected
|
133
118
|
|
134
|
-
# Avoid a bogus single order at the end when tradeable balances are low.
|
135
|
-
# TODO: Add remaining amount to last order
|
136
119
|
next unless fiat_budget >= min_market_funds.to_f
|
137
120
|
|
138
|
-
|
121
|
+
if fiat_investing > fiat_budget
|
122
|
+
last_slice_detected = true
|
123
|
+
fiat_investing = fiat_budget
|
124
|
+
end
|
125
|
+
|
126
|
+
fiat_returning = fiat_investing + (
|
127
|
+
fiat_investing * tpm_cast_as_decimal
|
128
|
+
)
|
129
|
+
profit = fiat_returning - fiat_investing
|
130
|
+
|
139
131
|
this_plan_no = "#{plan_no}.#{plan_no_slice}"
|
140
132
|
if event_history.recalculate_order_plan
|
141
133
|
order_slice = order_plan.find do |order|
|
@@ -156,19 +148,24 @@ module Cryptum
|
|
156
148
|
)
|
157
149
|
order_slice[:slice_alloc] = format('%0.2f', slice_alloc)
|
158
150
|
order_slice[:risk_target] = format('%0.2f', risk_target)
|
151
|
+
order_slice[:previous_slice_invest] = format(
|
152
|
+
'%0.2f',
|
153
|
+
previous_slice_fiat_investing
|
154
|
+
)
|
159
155
|
order_slice[:invest] = format('%0.2f', fiat_investing)
|
160
156
|
order_slice[:return] = format('%0.2f', fiat_returning)
|
161
157
|
order_slice[:profit] = format('%0.2f', profit)
|
162
158
|
order_slice[:tpm] = tpm
|
163
159
|
order_slice[:autotrade_percent] = autotrade_percent
|
164
160
|
order_slice[:color] = plan_color
|
161
|
+
order_slice[:last_slice] = last_slice_detected
|
165
162
|
|
166
163
|
order_plan.push(order_slice) unless event_history.recalculate_order_plan
|
167
164
|
fiat_budget -= fiat_investing
|
165
|
+
previous_slice_fiat_investing = fiat_investing
|
168
166
|
plan_no_slice += 1
|
169
167
|
end
|
170
168
|
event_history.order_book[:order_plan] = order_plan
|
171
|
-
# event_history.recalculate_order_plan = false
|
172
169
|
end
|
173
170
|
|
174
171
|
red_pill_alert = '| RED PILL ALERT |'
|
@@ -213,7 +210,6 @@ module Cryptum
|
|
213
210
|
|
214
211
|
# UI
|
215
212
|
col_just1 = (Curses.cols - Cryptum::UI.col_first) - 1
|
216
|
-
# col_just3 = (Curses.cols - Cryptum::UI.col_third) - 1
|
217
213
|
col_just4 = Curses.cols - Cryptum::UI.col_fourth
|
218
214
|
|
219
215
|
# ROW 1
|
@@ -294,6 +290,7 @@ module Cryptum
|
|
294
290
|
string: red_pill_alert
|
295
291
|
)
|
296
292
|
|
293
|
+
order_plan_win.setpos(out_line_no, Cryptum::UI.col_fourth)
|
297
294
|
Cryptum::UI.colorize(
|
298
295
|
ui_win: order_plan_win,
|
299
296
|
color: :red,
|
@@ -380,6 +377,9 @@ module Cryptum
|
|
380
377
|
slice_alloc_out = Cryptum.beautify_large_number(
|
381
378
|
value: order[:slice_alloc]
|
382
379
|
)
|
380
|
+
previous_slice_invest_out = Cryptum.beautify_large_number(
|
381
|
+
value: order[:previous_slice_invest]
|
382
|
+
)
|
383
383
|
invest_out = Cryptum.beautify_large_number(
|
384
384
|
value: order[:invest]
|
385
385
|
)
|
@@ -393,7 +393,9 @@ module Cryptum
|
|
393
393
|
plan_no = "#{order[:plan_no]}|"
|
394
394
|
fiat = "#{autotrade_percent}% of $#{fiat_avail_out} = "
|
395
395
|
alloc = "$#{risk_alloc_out} @ #{order[:allocation_percent]}% = "
|
396
|
-
|
396
|
+
alloc = "$#{risk_alloc_out}" if order[:last_slice]
|
397
|
+
invest = "$#{slice_alloc_out} + $#{previous_slice_invest_out} = $#{invest_out} + #{tpm_out}% = "
|
398
|
+
invest = " + #{tpm_out}% = " if order[:last_slice]
|
397
399
|
|
398
400
|
returns = "$#{return_out}|"
|
399
401
|
profit = "Profit: $#{profit_out}"
|
@@ -32,6 +32,9 @@ module Cryptum
|
|
32
32
|
slice_alloc_out = Cryptum.beautify_large_number(
|
33
33
|
value: order[:slice_alloc]
|
34
34
|
)
|
35
|
+
previous_slice_invest_out = Cryptum.beautify_large_number(
|
36
|
+
value: order[:previous_slice_invest]
|
37
|
+
)
|
35
38
|
invest_out = Cryptum.beautify_large_number(
|
36
39
|
value: order[:invest]
|
37
40
|
)
|
@@ -44,8 +47,13 @@ module Cryptum
|
|
44
47
|
)
|
45
48
|
autotrade_ln1_details = "1. Autotrade is set to #{autotrade_percent}% of $#{fiat_avail_out}, making $#{risk_alloc_out} available for this slice in"
|
46
49
|
autotrade_ln2_details = ' the order plan.'
|
47
|
-
|
48
|
-
|
50
|
+
if order[:last_slice]
|
51
|
+
slice_alloc_ln1_details = "2. Since $#{risk_alloc_out} is the remaining amount within the criteria defined in the Autotrade % above,"
|
52
|
+
slice_alloc_ln2_details = " $#{invest_out} will be allocated for this slice."
|
53
|
+
else
|
54
|
+
slice_alloc_ln1_details = "2. With $#{risk_alloc_out} available and a slice allocation of #{order[:allocation_percent]}%, $#{slice_alloc_out} plus the previous"
|
55
|
+
slice_alloc_ln2_details = " slice of $#{previous_slice_invest_out} results in $#{invest_out} being allocated for this slice."
|
56
|
+
end
|
49
57
|
profit_ln1_details = "3. With a slice allocation of $#{invest_out}, plus a TPM equal to #{tpm_out}%, $#{return_out} will be returned"
|
50
58
|
profit_ln2_details = " once sold. With $#{invest_out} invested, the gross profit equals $#{profit_out}, minus any Maker &"
|
51
59
|
profit_ln3_details = ' Taker (transaction) fees.'
|
data/lib/cryptum/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cryptum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.321
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 0day Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-12-
|
11
|
+
date: 2022-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -240,14 +240,14 @@ dependencies:
|
|
240
240
|
requirements:
|
241
241
|
- - '='
|
242
242
|
- !ruby/object:Gem::Version
|
243
|
-
version: 2.
|
243
|
+
version: 2.16.0
|
244
244
|
type: :runtime
|
245
245
|
prerelease: false
|
246
246
|
version_requirements: !ruby/object:Gem::Requirement
|
247
247
|
requirements:
|
248
248
|
- - '='
|
249
249
|
- !ruby/object:Gem::Version
|
250
|
-
version: 2.
|
250
|
+
version: 2.16.0
|
251
251
|
- !ruby/object:Gem::Dependency
|
252
252
|
name: ruby-prof
|
253
253
|
requirement: !ruby/object:Gem::Requirement
|