cryptum 0.0.355 → 0.0.356

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.
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,181 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
-
5
- module Cryptum
6
- # This plugin is used for my own entertainment
7
- module Matrix
8
- # Supported Method Parameters::
9
- # Cryptum::Matrix.generate(
10
- # cols: cols
11
- # )
12
-
13
- public_class_method def self.generate(opts = {})
14
- # Need to divide by two for wide characters
15
- cols = opts[:cols].to_i
16
-
17
- matrix_arr = [
18
- 0x30a0.chr('UTF-8'),
19
- 0x30a1.chr('UTF-8'),
20
- 0x30a2.chr('UTF-8'),
21
- 0x30a3.chr('UTF-8'),
22
- 0x30a4.chr('UTF-8'),
23
- 0x30a5.chr('UTF-8'),
24
- 0x30a6.chr('UTF-8'),
25
- 0x30a7.chr('UTF-8'),
26
- 0x30a8.chr('UTF-8'),
27
- 0x30a9.chr('UTF-8'),
28
- 0x30aa.chr('UTF-8'),
29
- 0x30ab.chr('UTF-8'),
30
- 0x30ac.chr('UTF-8'),
31
- 0x30ad.chr('UTF-8'),
32
- 0x30ae.chr('UTF-8'),
33
- 0x30af.chr('UTF-8'),
34
- 0x30b0.chr('UTF-8'),
35
- 0x30b1.chr('UTF-8'),
36
- 0x30b2.chr('UTF-8'),
37
- 0x30b3.chr('UTF-8'),
38
- 0x30b4.chr('UTF-8'),
39
- 0x30b5.chr('UTF-8'),
40
- 0x30b6.chr('UTF-8'),
41
- 0x30b7.chr('UTF-8'),
42
- 0x30b8.chr('UTF-8'),
43
- 0x30b9.chr('UTF-8'),
44
- 0x30ba.chr('UTF-8'),
45
- 0x30bb.chr('UTF-8'),
46
- 0x30bc.chr('UTF-8'),
47
- 0x30bd.chr('UTF-8'),
48
- 0x30be.chr('UTF-8'),
49
- 0x30bf.chr('UTF-8'),
50
- 0x30c0.chr('UTF-8'),
51
- 0x30c1.chr('UTF-8'),
52
- 0x30c2.chr('UTF-8'),
53
- 0x30c3.chr('UTF-8'),
54
- 0x30c4.chr('UTF-8'),
55
- 0x30c5.chr('UTF-8'),
56
- 0x30c6.chr('UTF-8'),
57
- 0x30c7.chr('UTF-8'),
58
- 0x30c8.chr('UTF-8'),
59
- 0x30c9.chr('UTF-8'),
60
- 0x30ca.chr('UTF-8'),
61
- 0x30cb.chr('UTF-8'),
62
- 0x30cc.chr('UTF-8'),
63
- 0x30cd.chr('UTF-8'),
64
- 0x30ce.chr('UTF-8'),
65
- 0x30cf.chr('UTF-8'),
66
- 0x30d0.chr('UTF-8'),
67
- 0x30d1.chr('UTF-8'),
68
- 0x30d2.chr('UTF-8'),
69
- 0x30d3.chr('UTF-8'),
70
- 0x30d4.chr('UTF-8'),
71
- 0x30d5.chr('UTF-8'),
72
- 0x30d6.chr('UTF-8'),
73
- 0x30d7.chr('UTF-8'),
74
- 0x30d8.chr('UTF-8'),
75
- 0x30d9.chr('UTF-8'),
76
- 0x30da.chr('UTF-8'),
77
- 0x30db.chr('UTF-8'),
78
- 0x30dc.chr('UTF-8'),
79
- 0x30dd.chr('UTF-8'),
80
- 0x30de.chr('UTF-8'),
81
- 0x30df.chr('UTF-8'),
82
- 0x30e0.chr('UTF-8'),
83
- 0x30e1.chr('UTF-8'),
84
- 0x30e2.chr('UTF-8'),
85
- 0x30e3.chr('UTF-8'),
86
- 0x30e4.chr('UTF-8'),
87
- 0x30e5.chr('UTF-8'),
88
- 0x30e6.chr('UTF-8'),
89
- 0x30e7.chr('UTF-8'),
90
- 0x30e8.chr('UTF-8'),
91
- 0x30e9.chr('UTF-8'),
92
- 0x30ea.chr('UTF-8'),
93
- 0x30eb.chr('UTF-8'),
94
- 0x30ec.chr('UTF-8'),
95
- 0x30ed.chr('UTF-8'),
96
- 0x30ee.chr('UTF-8'),
97
- 0x30ef.chr('UTF-8'),
98
- 0x30f0.chr('UTF-8'),
99
- 0x30f1.chr('UTF-8'),
100
- 0x30f2.chr('UTF-8'),
101
- 0x30f3.chr('UTF-8'),
102
- 0x30f4.chr('UTF-8'),
103
- 0x30f5.chr('UTF-8'),
104
- 0x30f6.chr('UTF-8'),
105
- 0x30f7.chr('UTF-8'),
106
- 0x30f8.chr('UTF-8'),
107
- 0x30f9.chr('UTF-8'),
108
- 0x30fa.chr('UTF-8'),
109
- 0x30fb.chr('UTF-8'),
110
- 0x30fc.chr('UTF-8'),
111
- 0x30fd.chr('UTF-8'),
112
- 0x30fe.chr('UTF-8'),
113
- '0 ',
114
- '1 ',
115
- '2 ',
116
- '3 ',
117
- '4 ',
118
- '5 ',
119
- '6 ',
120
- '7 ',
121
- '8 ',
122
- '9 ',
123
- 'A ',
124
- 'c ',
125
- 'R ',
126
- 'y ',
127
- 'P ',
128
- 't ',
129
- 'U ',
130
- 'm ',
131
- 'x ',
132
- 'Z ',
133
- ': ',
134
- '{ ',
135
- '[ ',
136
- '} ',
137
- '] ',
138
- '| ',
139
- '` ',
140
- '~ ',
141
- '! ',
142
- '@ ',
143
- '# ',
144
- '$ ',
145
- '% ',
146
- '^ ',
147
- '& ',
148
- '* ',
149
- '( ',
150
- ') ',
151
- '_ ',
152
- '- ',
153
- '= ',
154
- '+ ',
155
- '> ',
156
- '< ',
157
- '. ',
158
- ', '
159
- ]
160
-
161
- last_index = matrix_arr.length - 1
162
-
163
- matrix_row = ''
164
- most_cols = cols - 1
165
- most_cols.times.each do
166
- matrix_row += "#{matrix_arr[Random.rand(0..last_index)]} "
167
- end
168
- matrix_row += matrix_arr[Random.rand(0..last_index)]
169
- rescue StandardError => e
170
- raise e
171
- end
172
-
173
- # Display Usage for this Module
174
-
175
- public_class_method def self.help
176
- puts "USAGE:
177
- logger = #{self}.create()
178
- "
179
- end
180
- end
181
- end
@@ -1,156 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
- require 'rest-client'
5
-
6
- module Cryptum
7
- # This plugin is used for interacting w/ OpenAI's REST API
8
- # This is based on the following OpenAI API Specification:
9
- # https://api.openai.com/v1
10
- module OpenAI
11
- # Supported Method Parameters::
12
- # open_ai_rest_call(
13
- # env: 'required - env object containing OpenAI Bearer token',
14
- # option_choice = 'required - option_choice object in case proxy is configured',
15
- # http_method: 'optional HTTP method (defaults to GET)
16
- # rest_call: 'required rest call to make per the schema',
17
- # params: 'optional params passed in the URI or HTTP Headers',
18
- # http_body: 'optional HTTP body sent in HTTP methods that support it e.g. POST'
19
- # )
20
-
21
- private_class_method def self.open_ai_rest_call(opts = {})
22
- env = opts[:env]
23
- option_choice = opts[:option_choice]
24
- http_method = if opts[:http_method].nil?
25
- :GET
26
- else
27
- opts[:http_method].to_s.upcase.scrub.strip.chomp.to_sym
28
- end
29
- rest_call = opts[:rest_call].to_s.scrub
30
- params = opts[:params]
31
- http_body = opts[:http_body].to_s.scrub
32
- base_open_ai_api_uri = 'https://api.openai.com/v1'
33
- bearer_token = env[:open_ai_bearer_token]
34
-
35
- if option_choice.proxy
36
- rest_client = RestClient
37
- rest_client.proxy = option_choice.proxy
38
- rest_client_request = rest_client::Request
39
- else
40
- rest_client_request = RestClient::Request
41
- end
42
-
43
- case http_method
44
- when :GET
45
- response = rest_client_request.execute(
46
- method: :GET,
47
- url: "#{base_open_ai_api_uri}/#{rest_call}",
48
- headers: {
49
- content_type: 'application/json; charset=UTF-8',
50
- authorization: "Bearer #{bearer_token}",
51
- params: params
52
- },
53
- verify_ssl: false
54
- )
55
-
56
- when :POST
57
- response = rest_client_request.execute(
58
- method: :POST,
59
- url: "#{base_open_ai_api_uri}/#{rest_call}",
60
- headers: {
61
- content_type: 'application/json; charset=UTF-8',
62
- authorization: "Bearer #{bearer_token}"
63
- },
64
- payload: http_body,
65
- verify_ssl: false
66
- )
67
-
68
- else
69
- raise @@logger.error("Unsupported HTTP Method #{http_method} for #{self} Plugin")
70
- end
71
- response
72
- rescue RestClient::ExceptionWithResponse => e
73
- File.open('/tmp/cryptum-errors.txt', 'a') do |f|
74
- f.puts Time.now.strftime('%Y-%m-%d %H:%M:%S.%N %z')
75
- f.puts "Module: #{self}"
76
- f.puts "URL: #{api_endpoint}#{api_call}"
77
- f.puts "PARAMS: #{params.inspect}"
78
- f.puts "HTTP POST BODY: #{http_body.inspect}" if http_body != ''
79
- f.puts "#{e}\n#{e.response}\n\n\n"
80
- end
81
- rescue StandardError => e
82
- raise e
83
- end
84
-
85
- # Supported Method Parameters::
86
- # models = PWN::Plugins::OpenAI.get_models(
87
- # env: 'required - env object containing OpenAI Bearer token',
88
- # option_choice = 'required - option_choice object in case proxy is configured',
89
- # )
90
-
91
- public_class_method def self.get_models(opts = {})
92
- env = opts[:env]
93
- option_choice = opts[:option_choice]
94
-
95
- response = open_ai_rest_call(
96
- env: env,
97
- option_choice: option_choice,
98
- http_method: :post,
99
- rest_call: 'models'
100
- )
101
-
102
- JSON.parse(response, symbolize_names: true)
103
- rescue StandardError => e
104
- raise e
105
- end
106
-
107
- # Supported Method Parameters::
108
- # response = PWN::Plugins::OpenAI.chat_gpt(
109
- # env: 'required - env object containing OpenAI Bearer token',
110
- # option_choice = 'required - option_choice object in case proxy is configured',
111
- # request: 'required - message to ChatGPT'
112
- # )
113
-
114
- public_class_method def self.chat_gpt(opts = {})
115
- env = opts[:env]
116
- option_choice = opts[:option_choice]
117
- request = opts[:request]
118
-
119
- http_body = {
120
- model: 'text-davinci-003',
121
- prompt: request,
122
- temperature: 0,
123
- max_tokens: 1024
124
- }
125
-
126
- response = open_ai_rest_call(
127
- env: env,
128
- option_choice: option_choice,
129
- http_method: :post,
130
- rest_call: 'completions',
131
- http_body: http_body.to_json
132
- )
133
-
134
- JSON.parse(response, symbolize_names: true)
135
- rescue StandardError => e
136
- raise e
137
- end
138
-
139
- # Display Usage for this Module
140
-
141
- public_class_method def self.help
142
- puts "USAGE:
143
- models = PWN::Plugins::OpenAI.get_models(
144
- env: 'required - env object containing OpenAI Bearer token',
145
- option_choice = 'required - option_choice object in case proxy is configured',
146
- )
147
-
148
- response = #{self}.chat_gpt(
149
- env: 'required - env object containing OpenAI Bearer token',
150
- option_choice = 'required - option_choice object in case proxy is configured',
151
- request: 'required - message to ChatGPT'
152
- )
153
- "
154
- end
155
- end
156
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cryptum
4
- # This plugin is used to Cancel Open Limit Orders
5
- module Option
6
- # Keep Last Event History When Terminal Resize Occuers
7
- class Choice
8
- attr_accessor :autotrade,
9
- :driver_name,
10
- :list_products,
11
- :proxy,
12
- :reset_session_countdown,
13
- :session_root,
14
- :sandbox,
15
- :symbol,
16
- :market_trend_reset,
17
- :market_trend_reset_label
18
-
19
- rescue Interrupt
20
- # Exit Gracefully if CTRL+C is Pressed During Session
21
- Cryptum.exit_gracefully(which_self: self)
22
- rescue StandardError => e
23
- # Produce a Stacktrace for anything else
24
- Curses.close_screen
25
- raise e
26
- end
27
- end
28
- end
@@ -1,206 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'optparse'
4
- require 'yaml'
5
-
6
- module Cryptum
7
- # Cryptum::UI Module used for Presenting the
8
- # Cryptum Curses Interface
9
- module Option
10
- require 'cryptum/option/choice'
11
-
12
- # Options for cryptum Driver
13
- public_class_method def self.parser(opts = {})
14
- option_choice = Option::Choice.new
15
- option_choice.driver_name = opts[:driver_name]
16
-
17
- OptionParser.new do |options|
18
- options.banner = "USAGE: #{option_choice.driver_name} [opts]"
19
-
20
- options.on(
21
- '-sSYMBOL',
22
- '--symbol=SYMBOL',
23
- '<Required - Crypto Symbol.(e.g. btc-usd, eth-usd, etc.)'
24
- ) { |s| option_choice.symbol = s.to_s.gsub('-', '_').downcase.to_sym }
25
-
26
- options.on(
27
- '-A',
28
- '--[no-]autotrade',
29
- '<Optional - Automatically Buy and Sell Crypto>'
30
- ) { |a| option_choice.autotrade = a }
31
-
32
- options.on(
33
- '-l',
34
- '--[no-]list-products',
35
- '<Optional - List Supported Crypto Currency Products and Exit>'
36
- ) { |l| option_choice.list_products = l }
37
-
38
- options.on(
39
- '-pPROXY',
40
- '--proxy=PROXY',
41
- '<Optional - HTTP Proxy e.g. "http://127.0.0.1:8080">'
42
- ) { |p| option_choice.proxy = p }
43
-
44
- options.on(
45
- '-R',
46
- '--[no-]reset-session-countdown',
47
- '<Optional - Reset Timers / Market Trend Stats at Session Init (Defaults to false)>'
48
- ) { |t| option_choice.reset_session_countdown = t }
49
-
50
- options.on(
51
- '-rPATH',
52
- '--session-root=PATH',
53
- '<Optional - Directory with etc && order_books (Defaults to ~/cryptum)>'
54
- ) { |r| option_choice.session_root = r }
55
-
56
- options.on(
57
- '-S',
58
- '--[no-]sandbox',
59
- '<Optional - Use Coinbase Sandbox Environment for Testing Ideas>'
60
- ) { |n| option_choice.sandbox = n }
61
-
62
- options.on(
63
- '-tSECONDS',
64
- '--time-between-market-trend-reset=SECONDS',
65
- '<Optional - Seconds Between Market Trend Reset (Default 60 i.e. 1 hour)>'
66
- ) { |t| option_choice.market_trend_reset = t.to_i }
67
- end.parse!
68
-
69
- input_validation(option_choice: option_choice)
70
-
71
- option_choice
72
- rescue OptionParser::InvalidOption => e
73
- # Print Usage if unsupported flags are passed
74
- puts "ERROR: #{e.message}\n\n"
75
- puts `#{option_choice.driver_name} --help`
76
- exit 1
77
- rescue StandardError => e
78
- raise e
79
- end
80
-
81
- # Validate Options for cryptum Driver
82
- public_class_method def self.input_validation(opts = {})
83
- option_choice = opts[:option_choice]
84
-
85
- # Conditions to display cryptum usage
86
- if option_choice.symbol.nil? && option_choice.list_products.nil?
87
- usage = true
88
- reason = :symbol
89
- end
90
-
91
- option_choice.session_root = "#{Dir.home}/cryptum" if option_choice.session_root.nil?
92
-
93
- unless Dir.exist?(option_choice.session_root)
94
- usage = true
95
- reason = :session_root
96
- end
97
-
98
- option_choice.market_trend_reset = 86_400 if option_choice.market_trend_reset.to_i.zero?
99
- unless option_choice.market_trend_reset.to_i >= 60 &&
100
- option_choice.market_trend_reset <= 604_800
101
- usage = true
102
- reason = :market_trend_reset
103
- end
104
-
105
- case option_choice.market_trend_reset
106
- when 604_800
107
- option_choice.market_trend_reset_label = '1W'
108
- when 86_400
109
- option_choice.market_trend_reset_label = '1D'
110
- when 14_400
111
- option_choice.market_trend_reset_label = '4h'
112
- when 10_800
113
- option_choice.market_trend_reset_label = '3h'
114
- when 7_200
115
- option_choice.market_trend_reset_label = '2h'
116
- when 3_600
117
- option_choice.market_trend_reset_label = '1h'
118
- when 2_700
119
- option_choice.market_trend_reset_label = '45m'
120
- when 1_800
121
- option_choice.market_trend_reset_label = '30m'
122
- when 900
123
- option_choice.market_trend_reset_label = '15m'
124
- when 300
125
- option_choice.market_trend_reset_label = '5m'
126
- when 180
127
- option_choice.market_trend_reset_label = '3m'
128
- when 60
129
- option_choice.market_trend_reset_label = '1m'
130
- else
131
- usage = true
132
- reason = :market_trend_reset
133
- end
134
-
135
- if usage
136
- case reason
137
- when :symbol
138
- puts "ERROR: --symbol Flag is Required.\n\n"
139
- when :session_root
140
- puts "ERROR: #{option_choice.session_root} does not exist.\n\n"
141
- when :market_trend_reset
142
- 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"
143
- end
144
-
145
- puts `#{option_choice.driver_name} --help`
146
- exit 1
147
- end
148
- rescue StandardError => e
149
- raise e
150
- end
151
-
152
- # List Supported Cryptum Products and Exit
153
- public_class_method def self.list_products_and_exit(opts = {})
154
- option_choice = opts[:option_choice]
155
- env = opts[:env]
156
-
157
- puts "\n#{option_choice.driver_name} Supports the Following Products:"
158
- products = Cryptum::API.get_products(
159
- option_choice: option_choice,
160
- env: env
161
- )
162
-
163
- products.map do |product|
164
- puts product[:id].downcase
165
- end
166
-
167
- exit 0
168
- rescue StandardError => e
169
- raise e
170
- end
171
-
172
- # Initialize Cryptum Session Environment
173
- public_class_method def self.get_env(opts = {})
174
- option_choice = opts[:option_choice]
175
-
176
- yaml_conf_file = "#{option_choice.session_root}/etc/coinbase_pro.yaml"
177
- yaml_conf = YAML.load_file(
178
- yaml_conf_file,
179
- symbolize_names: true
180
- )
181
-
182
- env = yaml_conf[:prod]
183
- env[:env] = :prod
184
- env = yaml_conf[:sandbox] if option_choice.sandbox
185
- env[:env] = :sandbox if option_choice.sandbox
186
-
187
- open_ai_yaml_conf_file = "#{option_choice.session_root}/etc/open_ai.yaml"
188
- if File.exist?(open_ai_yaml_conf_file)
189
- open_ai_yaml_conf = YAML.load_file(
190
- open_ai_yaml_conf_file,
191
- symbolize_names: true
192
- )
193
- env[:open_ai_bearer_token] = open_ai_yaml_conf[:bearer_token]
194
- end
195
-
196
- env
197
- rescue StandardError => e
198
- raise e
199
- end
200
-
201
- # Display a List of Every UI Module
202
- public_class_method def self.help
203
- constants.sort
204
- end
205
- end
206
- end
@@ -1,114 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'io/console'
4
- require 'json'
5
- require 'logger'
6
- require 'tty-spinner'
7
-
8
- module Cryptum
9
- # This module is used to define the Order Book Data Structure
10
- module OrderBook
11
- module Generate
12
- # Supported Method Parameters::
13
- # Cryptum::OrderBook.generate(
14
- # symbol: 'required - target symbol (e.g. btc-usd)',
15
- # this_product: 'required - this_product',
16
- # )
17
-
18
- public_class_method def self.new_order_book(opts = {})
19
- start_time = opts[:start_time]
20
- option_choice = opts[:option_choice]
21
- env = opts[:env]
22
-
23
- session_root = option_choice.session_root
24
- symbol = option_choice.symbol
25
- order_book_file = "#{session_root}/order_books/#{symbol}.ORDER_BOOK.json"
26
-
27
- # Only need to retrieve a product list once / session.
28
- products = Cryptum::API.get_products(
29
- option_choice: option_choice,
30
- env: env
31
- )
32
- this_product_arr = products.select do |product|
33
- product if product[:id] == option_choice.symbol.to_s.gsub('_', '-').upcase
34
- end
35
- this_product = this_product_arr.last
36
-
37
- order_book = {
38
- path: order_book_file,
39
- symbol: symbol,
40
- open_24h: 0.00,
41
- high_24h: 0.00,
42
- low_24h: 0.00,
43
- volume_24h: 0.00,
44
- ticker_price: 0.00,
45
- ticker_price_second_to_last: 0.00,
46
- ticker_price_third_to_last: 0.00,
47
- sequence: -1,
48
- this_product: this_product,
49
- portfolio: [],
50
- fiat_portfolio: [],
51
- fees: [],
52
- order_plan: [],
53
- last_trend_reset: Time.now.strftime('%Y-%m-%d %H:%M:%S.%N%z'),
54
- last_order_exec: Time.now.strftime('%Y-%m-%d %H:%M:%S.%N%z'),
55
- market_trend: {
56
- buy: 0,
57
- buy_start: '--',
58
- buy_end: '--',
59
- sell: 0,
60
- sell_start: '--',
61
- sell_end: '--'
62
- },
63
- order_history: [],
64
- order_history_meta: []
65
- }
66
-
67
- # Order History Retention ---------------------------------------#
68
- # Instantiate Event History attr_accessible
69
- # Object to Keep Track of Everything as Events
70
- # are Parsed.
71
- event_history = Cryptum::Event::History.new(
72
- option_choice: option_choice,
73
- start_time: start_time,
74
- order_book: order_book
75
- )
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
-
84
- event_history.order_book = order_book
85
- if option_choice.reset_session_countdown
86
- event_history.order_book[:order_plan] = []
87
- event_history.order_book[:market_trend][:buy] = 0
88
- event_history.order_book[:market_trend][:sell] = 0
89
- event_history.order_book[:last_trend_reset] = Time.now.strftime(
90
- '%Y-%m-%d %H:%M:%S.%N%z'
91
- )
92
- event_history.order_book[:last_order_exec] = Time.now.strftime(
93
- '%Y-%m-%d %H:%M:%S.%N%z'
94
- )
95
- end
96
-
97
- event_history
98
- rescue StandardError => e
99
- raise e
100
- end
101
-
102
- # Display Usage for this Module
103
-
104
- public_class_method def self.help
105
- puts "USAGE:
106
- order_book = #{self}.new_order_book(
107
- symbol: 'required - target symbol (e.g. btc-usd)',
108
- this_product: 'required - this_product'
109
- )
110
- "
111
- end
112
- end
113
- end
114
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cryptum
4
- # This plugin is used to calculate Exponential Moving Average
5
- # Price of a Symbol over time.
6
-
7
- module OrderBook
8
- class Indicator
9
- attr_accessor :market_trend,
10
- :profit_margin,
11
- :action_signal,
12
- :last_action_signal
13
- end
14
- end
15
- end