cryptum 0.0.320 → 0.0.321
Sign up to get free protection for your applications and to get access to all the features.
- 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
|