cryptum 0.0.355 → 0.0.357

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. metadata +13 -116
  3. data/.github/workflows/main.yml +0 -16
  4. data/.gitignore +0 -30
  5. data/.rspec +0 -3
  6. data/.rspec_status +0 -0
  7. data/.rubocop.yml +0 -31
  8. data/.rubocop_todo.yml +0 -32
  9. data/.ruby-gemset +0 -1
  10. data/.ruby-version +0 -1
  11. data/CODE_OF_CONDUCT.md +0 -84
  12. data/Gemfile +0 -38
  13. data/LICENSE +0 -674
  14. data/README.md +0 -87
  15. data/Rakefile +0 -19
  16. data/bin/cryptum +0 -73
  17. data/bin/cryptum-forecast +0 -200
  18. data/bin/cryptum-repl +0 -73
  19. data/bin/cryptum_autoinc_version +0 -38
  20. data/build_cryptum_gem.sh +0 -58
  21. data/cryptum.gemspec +0 -52
  22. data/cryptum_container.sh +0 -1
  23. data/docker/cryptum.json +0 -60
  24. data/docker/cryptum_container.sh +0 -59
  25. data/docker/packer_secrets.json.EXAMPLE +0 -7
  26. data/docker/provisioners/cryptum.sh +0 -11
  27. data/docker/provisioners/docker_bashrc.sh +0 -2
  28. data/docker/provisioners/docker_rvm.sh +0 -22
  29. data/docker/provisioners/init_image.sh +0 -28
  30. data/docker/provisioners/post_install.sh +0 -6
  31. data/docker/provisioners/ruby.sh +0 -16
  32. data/docker/provisioners/upload_globals.sh +0 -49
  33. data/etc/bot_confs/.gitkeep +0 -0
  34. data/etc/bot_confs/BOT_CONF.TEMPLATE +0 -10
  35. data/etc/coinbase_pro.yaml.EXAMPLE +0 -8
  36. data/etc/open_ai.yaml.EXAMPLE +0 -1
  37. data/git_commit.sh +0 -22
  38. data/lib/cryptum/api.rb +0 -688
  39. data/lib/cryptum/bot_conf.rb +0 -197
  40. data/lib/cryptum/event/bot_conf.rb +0 -34
  41. data/lib/cryptum/event/buy.rb +0 -145
  42. data/lib/cryptum/event/cancel.rb +0 -35
  43. data/lib/cryptum/event/exit.rb +0 -35
  44. data/lib/cryptum/event/gtfo.rb +0 -36
  45. data/lib/cryptum/event/history.rb +0 -105
  46. data/lib/cryptum/event/key_press.rb +0 -64
  47. data/lib/cryptum/event/order_book.rb +0 -34
  48. data/lib/cryptum/event/pane.rb +0 -65
  49. data/lib/cryptum/event/parse.rb +0 -181
  50. data/lib/cryptum/event/scroll.rb +0 -200
  51. data/lib/cryptum/event/sell.rb +0 -124
  52. data/lib/cryptum/event.rb +0 -27
  53. data/lib/cryptum/log.rb +0 -34
  54. data/lib/cryptum/matrix.rb +0 -181
  55. data/lib/cryptum/open_ai.rb +0 -156
  56. data/lib/cryptum/option/choice.rb +0 -28
  57. data/lib/cryptum/option.rb +0 -206
  58. data/lib/cryptum/order_book/generate.rb +0 -114
  59. data/lib/cryptum/order_book/indicator.rb +0 -15
  60. data/lib/cryptum/order_book/market_trend.rb +0 -137
  61. data/lib/cryptum/order_book/profit_margin.rb +0 -55
  62. data/lib/cryptum/order_book.rb +0 -19
  63. data/lib/cryptum/portfolio/balance.rb +0 -123
  64. data/lib/cryptum/portfolio.rb +0 -15
  65. data/lib/cryptum/ui/command.rb +0 -314
  66. data/lib/cryptum/ui/key_press_event.rb +0 -33
  67. data/lib/cryptum/ui/market_trend.rb +0 -74
  68. data/lib/cryptum/ui/order_execute_details.rb +0 -297
  69. data/lib/cryptum/ui/order_execution.rb +0 -573
  70. data/lib/cryptum/ui/order_plan.rb +0 -503
  71. data/lib/cryptum/ui/order_plan_details.rb +0 -240
  72. data/lib/cryptum/ui/order_timer.rb +0 -121
  73. data/lib/cryptum/ui/portfolio.rb +0 -221
  74. data/lib/cryptum/ui/signal_engine.rb +0 -109
  75. data/lib/cryptum/ui/terminal_window.rb +0 -111
  76. data/lib/cryptum/ui/ticker.rb +0 -319
  77. data/lib/cryptum/ui.rb +0 -343
  78. data/lib/cryptum/version.rb +0 -5
  79. data/lib/cryptum/web_sock/coinbase.rb +0 -102
  80. data/lib/cryptum/web_sock/event_machine.rb +0 -274
  81. data/lib/cryptum/web_sock.rb +0 -16
  82. data/lib/cryptum.rb +0 -120
  83. data/order_books/.gitkeep +0 -0
  84. data/reinstall_cryptum_gemset.sh +0 -29
  85. data/spec/lib/cryptum/api_spec.rb +0 -10
  86. data/spec/lib/cryptum/event_spec.rb +0 -10
  87. data/spec/lib/cryptum/log_spec.rb +0 -10
  88. data/spec/lib/cryptum/option_spec.rb +0 -10
  89. data/spec/lib/cryptum/order_book/generate_spec.rb +0 -10
  90. data/spec/lib/cryptum/order_book/market_trend_spec.rb +0 -10
  91. data/spec/lib/cryptum/order_book_spec.rb +0 -10
  92. data/spec/lib/cryptum/ui/command_spec.rb +0 -10
  93. data/spec/lib/cryptum/ui/ticker_spec.rb +0 -10
  94. data/spec/lib/cryptum/ui_spec.rb +0 -10
  95. data/spec/lib/cryptum/web_sock_spec.rb +0 -10
  96. data/spec/lib/cryptum_spec.rb +0 -10
  97. data/spec/spec_helper.rb +0 -3
  98. data/upgrade_Gemfile_gems.sh +0 -20
  99. data/upgrade_cryptum.sh +0 -13
  100. data/upgrade_gem.sh +0 -4
  101. data/upgrade_ruby.sh +0 -45
@@ -1,503 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
-
5
- module Cryptum
6
- # This plugin is used to Refresh the Cryptum console UI
7
- module UI
8
- module OrderPlan
9
- # Supported Method Parameters::
10
- # Cryptum::UI::Candle.refresh(
11
- # order_book: 'required - Order Book Data Structure',
12
- # event: 'required - Event from Coinbase Web Socket'
13
- # )
14
-
15
- public_class_method def self.refresh(opts = {})
16
- option_choice = opts[:option_choice]
17
- order_plan_win = opts[:order_plan_win]
18
- event_history = opts[:event_history]
19
- indicator_status = opts[:indicator_status]
20
- bot_conf = opts[:bot_conf]
21
-
22
- ticker_price = event_history.order_book[:ticker_price].to_f
23
- return event_history unless ticker_price.positive?
24
-
25
- market_trend_color = plan_color = :white
26
-
27
- this_product = event_history.order_book[:this_product]
28
- base_increment = this_product[:base_increment]
29
- min_market_funds = this_product[:min_market_funds]
30
-
31
- crypto_smallest_decimal = base_increment.to_s.split('.')[-1].length
32
-
33
- autotrade_percent = bot_conf[:autotrade_portfolio_percent].to_f
34
- autotrade_cast_as_decimal = autotrade_percent / 100
35
-
36
- tpm = bot_conf[:target_profit_margin_percent].to_f
37
- tpm_cast_as_decimal = tpm / 100
38
-
39
- crypto_currency = option_choice.symbol.to_s.upcase.split('_').first.to_sym
40
- portfolio = event_history.order_book[:portfolio]
41
- this_account = portfolio.select do |account|
42
- account[:currency] == crypto_currency.to_s
43
- end
44
- raise "ID for Crypto Currency, #{crypto_currency} Not Found" if this_account.empty?
45
-
46
- balance = format("%0.#{crypto_smallest_decimal}f", this_account.first[:balance])
47
- fiat_portfolio = event_history.order_book[:fiat_portfolio]
48
- total_holdings = format('%0.2f', fiat_portfolio.first[:total_holdings])
49
- fiat_avail_for_trade = format('%0.2f', fiat_portfolio.first[:available])
50
-
51
- fiat_budget = fiat_avail_for_trade.to_f
52
-
53
- order_plan = event_history.order_book[:order_plan]
54
-
55
- current_crypto_fiat_value = format(
56
- '%0.2f',
57
- balance.to_f * ticker_price
58
- )
59
-
60
- crypto_invested_percent = format(
61
- '%0.2f',
62
- current_crypto_fiat_value.to_f.fdiv(total_holdings.to_f) * 100
63
- )
64
-
65
- event_history.red_pill = true if crypto_invested_percent.to_f > autotrade_percent
66
-
67
- # SAUCE 2
68
- # Generating and/or recalculating order plan
69
- if event_history.recalculate_order_plan || (
70
- crypto_invested_percent.to_f <= autotrade_percent &&
71
- autotrade_percent.positive? && (
72
- order_plan.empty? || (
73
- indicator_status.action_signal == :buy &&
74
- indicator_status.last_action_signal == :sell
75
- )
76
- )
77
- )
78
-
79
- event_history.red_pill = false
80
- if indicator_status.action_signal == :buy &&
81
- indicator_status.last_action_signal == :sell
82
-
83
- order_plan = []
84
- # Reset time between orders
85
- event_history.time_between_orders = event_history.time_between_orders_reset
86
- event_history.plan_no += 1
87
- end
88
-
89
- plan_no_slice = 1
90
- plan_no = event_history.plan_no
91
- # Sum up currently invested amount so we don't
92
- # exceed autotrade % for next order plan generation
93
- allocation_decimal = 0.0
94
- risk_target = fiat_budget * autotrade_cast_as_decimal
95
- risk_alloc = risk_target
96
-
97
- # TODO: Order Plan <= event_history.max_open_sell_orders
98
- previous_slice_fiat_investing = 0.00
99
- last_slice_detected = false
100
- loop do
101
- # Calculate min order size
102
- allocation_decimal += 0.0001
103
- fiat_investing = risk_alloc * allocation_decimal
104
-
105
- next unless fiat_investing > min_market_funds.to_f
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
-
112
- risk_alloc = fiat_budget * autotrade_cast_as_decimal
113
- allocation_percent = allocation_decimal * 100
114
-
115
- break if order_plan.map { |op| op[:invest].to_f }.sum > risk_target ||
116
- allocation_percent > 100 ||
117
- last_slice_detected
118
-
119
- next unless fiat_budget >= min_market_funds.to_f
120
-
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
-
131
- this_plan_no = "#{plan_no}.#{plan_no_slice}"
132
- if event_history.recalculate_order_plan
133
- order_slice = order_plan.find do |order|
134
- order[:plan_no] == this_plan_no
135
- end
136
- end
137
- order_slice ||= {}
138
- order_slice[:plan_no] = this_plan_no
139
- order_slice[:fiat_available] = format('%0.2f', fiat_budget)
140
- order_slice[:risk_alloc] = format('%0.2f', risk_alloc)
141
- order_slice[:allocation_decimal] = format(
142
- '%0.8f',
143
- allocation_decimal
144
- )
145
- order_slice[:allocation_percent] = format(
146
- '%0.2f',
147
- allocation_percent
148
- )
149
- order_slice[:slice_alloc] = format('%0.2f', slice_alloc)
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
- )
155
- order_slice[:invest] = format('%0.2f', fiat_investing)
156
- order_slice[:return] = format('%0.2f', fiat_returning)
157
- order_slice[:profit] = format('%0.2f', profit)
158
- order_slice[:tpm] = tpm
159
- order_slice[:autotrade_percent] = autotrade_percent
160
- order_slice[:color] = plan_color
161
- order_slice[:last_slice] = false
162
-
163
- order_plan.push(order_slice) unless event_history.recalculate_order_plan
164
- fiat_budget -= fiat_investing
165
- previous_slice_fiat_investing = fiat_investing
166
- plan_no_slice += 1
167
- end
168
- order_plan.last[:last_slice] = true if order_plan.any?
169
- op_last_slice_invest = order_plan.last[:invest].to_f if order_plan.any?
170
- order_plan.last[:invest] = fiat_budget if order_plan.any? &&
171
- op_last_slice_invest > fiat_budget &&
172
- fiat_budget > min_market_funds.to_f
173
-
174
- event_history.order_book[:order_plan] = order_plan
175
- end
176
-
177
- red_pill_alert = '| RED PILL ALERT |'
178
- red_pill_msg = '- Autotrade % Exhausted -'
179
- event_history.red_pill = true if order_plan.empty?
180
-
181
- if event_history.red_pill
182
- order_plan_prefix = '--'
183
- # max_order_plan_slices = '0'
184
- order_plan_volume_out = '0.00'
185
- order_plan_profit_sum_out = '0.00'
186
- order_plan_exec_percent = '0.00'
187
- else
188
- order_plan_len = order_plan.length
189
- order_plan_prefix = order_plan.last[:plan_no].split('.').first
190
- max_order_plan_slices = order_plan.last[:plan_no].split('.').last.to_i
191
- calc_order_plan_exec = (
192
- 1 - (order_plan_len / max_order_plan_slices.to_f)
193
- ) * 100
194
- order_plan_volume = order_plan.map do |op|
195
- op[:invest].to_f
196
- end.sum
197
- order_plan_volume_out = Cryptum.beautify_large_number(
198
- value: format(
199
- '%0.2f',
200
- order_plan_volume
201
- )
202
- )
203
- order_plan_profit_sum = order_plan.map do |op|
204
- op[:profit].to_f
205
- end.sum
206
- order_plan_profit_sum_out = Cryptum.beautify_large_number(
207
- value: format(
208
- '%0.2f',
209
- order_plan_profit_sum
210
- )
211
- )
212
- order_plan_exec_percent = format('%0.2f', calc_order_plan_exec)
213
- end
214
-
215
- # TODO: Everything Above this Line Needs to be Indicators ^
216
-
217
- # UI
218
- col_just1 = (Curses.cols - Cryptum::UI.col_first) - 1
219
- col_just4 = Curses.cols - Cryptum::UI.col_fourth
220
-
221
- # ROW 1
222
- out_line_no = 0
223
- line_color = :white
224
- header_color = :white
225
- header_style = :bold
226
- style = :bold
227
- if event_history.order_plan_win_active
228
- line_color = :blue
229
- header_color = :blue
230
- header_style = :reverse
231
- end
232
-
233
- Cryptum::UI.line(
234
- ui_win: order_plan_win,
235
- out_line_no: out_line_no,
236
- color: line_color
237
- )
238
-
239
- # ROW 2
240
- out_line_no += 1
241
- order_plan_win.setpos(out_line_no, Cryptum::UI.col_first)
242
- order_plan_win.clrtoeol
243
- Cryptum::UI.colorize(
244
- ui_win: order_plan_win,
245
- color: header_color,
246
- style: header_style,
247
- string: ''.ljust(col_just1, ' ')
248
- )
249
-
250
- header_str = "- ORDER PLAN | CYCLE ##{order_plan_prefix} -"
251
- header_str = '- ORDER PLAN | UNAVAILABLE -' if event_history.red_pill
252
- order_plan_win.setpos(
253
- out_line_no,
254
- Cryptum::UI.col_center(str: header_str)
255
- )
256
-
257
- Cryptum::UI.colorize(
258
- ui_win: order_plan_win,
259
- color: header_color,
260
- style: header_style,
261
- string: header_str
262
- )
263
-
264
- order_plan_win.setpos(out_line_no, Cryptum::UI.col_fourth)
265
- Cryptum::UI.colorize(
266
- ui_win: order_plan_win,
267
- color: header_color,
268
- style: header_style,
269
- string: ''.ljust(col_just4, ' ')
270
- )
271
-
272
- # ROWS 3-10
273
- remaining_blank_rows = 0
274
- max_rows_to_display = event_history.order_plan_max_rows_to_display
275
- remaining_blank_rows = max_rows_to_display if order_plan.empty?
276
- if event_history.red_pill
277
- out_line_no += 1
278
- order_plan_win.setpos(out_line_no, Cryptum::UI.col_first)
279
- order_plan_win.clrtoeol
280
-
281
- Cryptum::UI.colorize(
282
- ui_win: order_plan_win,
283
- color: :red,
284
- style: :highlight,
285
- string: ''.ljust(col_just1, ' ')
286
- )
287
-
288
- order_plan_win.setpos(
289
- out_line_no,
290
- Cryptum::UI.col_center(str: red_pill_alert)
291
- )
292
- Cryptum::UI.colorize(
293
- ui_win: order_plan_win,
294
- color: :red,
295
- style: :highlight,
296
- string: red_pill_alert
297
- )
298
-
299
- order_plan_win.setpos(out_line_no, Cryptum::UI.col_fourth)
300
- Cryptum::UI.colorize(
301
- ui_win: order_plan_win,
302
- color: :red,
303
- style: :highlight,
304
- string: ''.ljust(col_just4, ' ')
305
- )
306
-
307
- out_line_no += 1
308
- order_plan_win.setpos(out_line_no, Cryptum::UI.col_first)
309
- order_plan_win.clrtoeol
310
-
311
- Cryptum::UI.colorize(
312
- ui_win: order_plan_win,
313
- color: :yellow,
314
- string: ''.ljust(col_just1, ' ')
315
- )
316
-
317
- order_plan_win.setpos(
318
- out_line_no,
319
- Cryptum::UI.col_center(str: red_pill_msg)
320
- )
321
- Cryptum::UI.colorize(
322
- ui_win: order_plan_win,
323
- color: :yellow,
324
- style: :bold,
325
- string: red_pill_msg
326
- )
327
-
328
- order_plan_win.setpos(out_line_no, Cryptum::UI.col_fourth)
329
- Cryptum::UI.colorize(
330
- ui_win: order_plan_win,
331
- color: :yellow,
332
- string: ''.ljust(col_just4, ' ')
333
- )
334
-
335
- max_rows_to_display.times.each do
336
- out_line_no += 1
337
- this_matrix_row = Cryptum::Matrix.generate(cols: Curses.cols)
338
- order_plan_win.setpos(out_line_no, Cryptum::UI.col_first)
339
- order_plan_win.clrtoeol
340
- Cryptum::UI.colorize(
341
- ui_win: order_plan_win,
342
- color: :red,
343
- style: :bold,
344
- string: this_matrix_row
345
- )
346
- end
347
- else
348
- market_trend_color = indicator_status.market_trend[:color] if indicator_status.market_trend
349
- plan_color = :cyan if market_trend_color == :red
350
- plan_color = :green if market_trend_color == :green
351
-
352
- # ROWS 3-10
353
- max_rows_to_display = event_history.order_plan_max_rows_to_display
354
- first_row = event_history.order_plan_index_offset
355
- last_row = first_row + max_rows_to_display
356
- if last_row >= order_plan.length
357
- last_row = order_plan.length - 1
358
- event_history.order_plan_max_records_available_to_display = last_row if last_row < max_rows_to_display
359
- first_row = last_row - event_history.order_plan_max_records_available_to_display
360
- event_history.order_plan_index_offset = first_row
361
- remaining_blank_rows = max_rows_to_display - last_row
362
- end
363
-
364
- selected_order = event_history.order_plan_selected_data
365
- order_plan[first_row..last_row].each do |order|
366
- out_line_no += 1
367
- current_line = out_line_no - 2
368
-
369
- style = :normal
370
- if event_history.order_plan_row_to_select == current_line
371
- style = :highlight
372
- selected_order = order
373
- selected_order[:color] = plan_color
374
- end
375
-
376
- fiat_avail_out = Cryptum.beautify_large_number(
377
- value: order[:fiat_available]
378
- )
379
- risk_alloc_out = Cryptum.beautify_large_number(
380
- value: order[:risk_alloc]
381
- )
382
- slice_alloc_out = Cryptum.beautify_large_number(
383
- value: order[:slice_alloc]
384
- )
385
- previous_slice_invest_out = Cryptum.beautify_large_number(
386
- value: order[:previous_slice_invest]
387
- )
388
- invest_out = Cryptum.beautify_large_number(
389
- value: order[:invest]
390
- )
391
- profit_out = Cryptum.beautify_large_number(
392
- value: order[:profit]
393
- )
394
- tpm_out = format('%0.2f', tpm)
395
- return_out = Cryptum.beautify_large_number(
396
- value: order[:return]
397
- )
398
- plan_no = "#{order[:plan_no]}|"
399
- fiat = "#{autotrade_percent}% of $#{fiat_avail_out} = "
400
- alloc = "$#{risk_alloc_out} @ #{order[:allocation_percent]}% = "
401
- alloc = "$#{risk_alloc_out}" if order[:last_slice]
402
- invest = "$#{slice_alloc_out} + $#{previous_slice_invest_out} = $#{invest_out} + #{tpm_out}% = "
403
- invest = " + #{tpm_out}% = " if order[:last_slice]
404
-
405
- returns = "$#{return_out}|"
406
- profit = "Profit: $#{profit_out}"
407
-
408
- order_plan_invest = "#{plan_no}#{fiat}#{alloc}#{invest}"
409
- order_plan_return = "#{returns}#{profit}"
410
-
411
- order_plan_win.setpos(out_line_no, Cryptum::UI.col_first)
412
- order_plan_win.clrtoeol
413
- Cryptum::UI.colorize(
414
- ui_win: order_plan_win,
415
- color: plan_color,
416
- style: style,
417
- string: "#{order_plan_invest}#{order_plan_return}".ljust(col_just1, '.')
418
- )
419
-
420
- Cryptum::UI.colorize(
421
- ui_win: order_plan_win,
422
- color: plan_color,
423
- style: style,
424
- string: ''.ljust(col_just4, ' ')
425
- )
426
- end
427
- event_history.order_plan_selected_data = selected_order
428
-
429
- # Clear to SUMMARY
430
- # (Only Applicable if order_book[:order_plan] < max_rows_to_display)
431
- # out_line_no += 1
432
- if remaining_blank_rows.positive?
433
- rows_to_blank = (out_line_no + remaining_blank_rows)
434
- out_line_no += 1
435
- (out_line_no..rows_to_blank).each do |clr_line|
436
- out_line_no = clr_line
437
- order_plan_win.setpos(clr_line, Cryptum::UI.col_first)
438
- order_plan_win.clrtoeol
439
- Cryptum::UI.colorize(
440
- ui_win: order_plan_win,
441
- color: :white,
442
- style: :normal,
443
- string: ''.ljust(col_just1, ' ')
444
- )
445
- end
446
- end
447
-
448
- # ROW 10
449
- out_line_no += 1
450
- order_plan_win.setpos(out_line_no, Cryptum::UI.col_first)
451
- order_plan_win.clrtoeol
452
- Cryptum::UI.colorize(
453
- ui_win: order_plan_win,
454
- color: header_color,
455
- style: header_style,
456
- string: ''.ljust(col_just1, ' ')
457
- )
458
-
459
- header_str = "CYCLE SUMMARY | Risk Allocated: $#{order_plan_volume_out} | Profit: $#{order_plan_profit_sum_out} | #{order_plan_exec_percent}% Done"
460
- order_plan_win.setpos(
461
- out_line_no,
462
- Cryptum::UI.col_center(str: header_str)
463
- )
464
-
465
- Cryptum::UI.colorize(
466
- ui_win: order_plan_win,
467
- color: header_color,
468
- style: header_style,
469
- string: header_str
470
- )
471
- end
472
-
473
- # ROW 11
474
- out_line_no += 1
475
- Cryptum::UI.line(
476
- ui_win: order_plan_win,
477
- out_line_no: out_line_no,
478
- color: line_color
479
- )
480
-
481
- order_plan_win.refresh
482
-
483
- event_history
484
- rescue Interrupt
485
- # Exit Gracefully if CTRL+C is Pressed During Session
486
- Cryptum.exit_gracefully(which_self: self)
487
- rescue StandardError => e
488
- raise e
489
- end
490
-
491
- # Display Usage for this Module
492
-
493
- public_class_method def self.help
494
- puts "USAGE:
495
- #{self}.refresh(
496
- order_book: 'required - Order Book Data Structure',
497
- event: 'required - Event from Coinbase Web Socket'
498
- )
499
- "
500
- end
501
- end
502
- end
503
- end