cryptum 0.0.325 → 0.0.327

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10328af02cf519e0d0909c39eebeef68636167861ce9c29f853cf3226aa3fe5f
4
- data.tar.gz: 8acc998468938e4b9b368ebb23dcfdbe50e1f2365095be73ba2b4f3b552e8ef9
3
+ metadata.gz: a71bdfaffa2d0d506321a5eb061b6e813b1191b8dd27b9a9e4acf874b9d296e9
4
+ data.tar.gz: cb2165ea3267e05058a242187b049ea3b68ed3bfb013688b2f044ea4683b93fa
5
5
  SHA512:
6
- metadata.gz: 033467601d7fbfabb46747e51093f14c28320ad5cdb3fed2b35a5d75d0b576d7bb4d44de9b0239cba3a292b61fda8f99a1c1976e00225c46bae7cacfd677333f
7
- data.tar.gz: bcaf51a3743fcabab91e43c539d558d9d281fbfc3e79bc1d7ff35b4ca46b44f754106e82f392ab27839f43915bdff1076c32ec0d2bdd18adb2db18c1acae93f4
6
+ metadata.gz: 5a67eec57d1eb1725424b01b34d4f2d6edee802a8d101e99c0cddece8f9c485472294b8c0b0464d492218db7c22d34f00b59f60ca4a451833d38c7b09f7a1b24
7
+ data.tar.gz: c606e40f2643f2fe06d2a887c0b3a0471d791b12841ec2815ed2a7ade3b4a0d8ddb46b44fa6f79e4673e0bc4c5649f7690e17b787fd4b0c499f8ac00821addfe
data/bin/cryptum CHANGED
@@ -35,6 +35,7 @@ begin
35
35
  option_choice: option_choice,
36
36
  env: env
37
37
  )
38
+ terminal_win.key_press_event.key_w = true if option_choice.reset_session_countdown
38
39
 
39
40
  # Automatically Create Bot Confs if they don't
40
41
  # Exist and Initialize Automated Trading Parameters
data/lib/cryptum/event.rb CHANGED
@@ -17,179 +17,6 @@ module Cryptum
17
17
  autoload :Scroll, 'cryptum/event/scroll'
18
18
  autoload :Sell, 'cryptum/event/sell'
19
19
 
20
- # Supported Method Parameters::
21
- # Cryptum::Event.parse(
22
- # )
23
-
24
- public_class_method def self.parse(opts = {})
25
- option_choice = opts[:option_choice]
26
- env = opts[:env]
27
- terminal_win = opts[:terminal_win]
28
- event_history = opts[:event_history]
29
- indicator_status = opts[:indicator_status]
30
- # indicator_history = opts[:indicator_history]
31
- bot_conf = opts[:bot_conf]
32
- # ai_enabled = opts[:ai_enabled]
33
-
34
- # candles = event_history.order_book[:candles]
35
- # order_history = event_history.order_book[:order_history]
36
- this_product = event_history.order_book[:this_product]
37
- fiat = this_product[:quote_currency]
38
- fiat_portfolio_file = "#{option_choice.session_root}/order_books/#{fiat}_PORTFOLIO.json"
39
-
40
- # Determine if Summary UI needs updated data
41
- event_history = Cryptum::Portfolio::Balance.refresh(
42
- env: env,
43
- option_choice: option_choice,
44
- terminal_win: terminal_win,
45
- event_history: event_history,
46
- fiat_portfolio_file: fiat_portfolio_file
47
- )
48
-
49
- # If the Terminal Window has been Resized, Resize the UI
50
- if Curses.cols != terminal_win.cols
51
- terminal_win.cols = Curses.cols
52
- terminal_win.ticker_ui_resize = true
53
- terminal_win.market_trend_ui_resize = true
54
- end
55
-
56
- event_history = Cryptum::UI::Portfolio.refresh(
57
- option_choice: option_choice,
58
- portfolio_win: terminal_win.portfolio_section,
59
- event_history: event_history,
60
- key_press_event: terminal_win.key_press_event,
61
- indicator_status: indicator_status,
62
- bot_conf: bot_conf,
63
- fiat_portfolio_file: fiat_portfolio_file
64
- )
65
-
66
- if event_history.event_type == :ticker ||
67
- terminal_win.ticker_ui_resize
68
-
69
- ticker_event = event_history.ticker_event = event_history.event if event_history.event_type == :ticker
70
- ticker_event = event_history.ticker_event if terminal_win.ticker_ui_resize
71
- Cryptum::UI::Ticker.refresh(
72
- option_choice: option_choice,
73
- start_time: event_history.start_time,
74
- ticker_win: terminal_win.ticker_section,
75
- key_press_event: terminal_win.key_press_event,
76
- order_book: event_history.order_book,
77
- event: ticker_event
78
- )
79
- end
80
-
81
- Cryptum::UI::OrderTimer.refresh(
82
- option_choice: option_choice,
83
- event_history: event_history,
84
- order_timer_win: terminal_win.order_timer_section,
85
- indicator_status: indicator_status,
86
- key_press_event: terminal_win.key_press_event
87
- )
88
-
89
- if event_history.event_type == :l2update ||
90
- terminal_win.market_trend_ui_resize
91
-
92
- market_trend_event = event_history.market_trend_event = event_history.event if event_history.event_type == :l2update
93
- market_trend_event = event_history.market_trend_event if terminal_win.market_trend_ui_resize
94
- event_history = Cryptum::UI::MarketTrend.refresh(
95
- option_choice: option_choice,
96
- market_trend_win: terminal_win.market_trend_section,
97
- event_history: event_history,
98
- key_press_event: terminal_win.key_press_event,
99
- event: market_trend_event,
100
- indicator_status: indicator_status,
101
- bot_conf: bot_conf
102
- )
103
- end
104
-
105
- indicator_status = Cryptum::UI::SignalEngine.refresh(
106
- option_choice: option_choice,
107
- signal_engine_win: terminal_win.signal_engine_section,
108
- event_history: event_history,
109
- key_press_event: terminal_win.key_press_event,
110
- indicator_status: indicator_status,
111
- bot_conf: bot_conf,
112
- fiat_portfolio_file: fiat_portfolio_file
113
- )
114
-
115
- unless event_history.order_plan_details_win_active
116
- event_history = Cryptum::UI::OrderPlan.refresh(
117
- option_choice: option_choice,
118
- order_plan_win: terminal_win.order_plan_section,
119
- env: env,
120
- event_history: event_history,
121
- key_press_event: terminal_win.key_press_event,
122
- indicator_status: indicator_status,
123
- bot_conf: bot_conf,
124
- fiat_portfolio_file: fiat_portfolio_file
125
- )
126
- recalc_op = event_history.recalculate_order_plan
127
- order_plan = event_history.order_book[:order_plan]
128
- terminal_win.key_press_event.key_w = true if (recalc_op || order_plan.empty?) &&
129
- !event_history.red_pill
130
- event_history.recalculate_order_plan = false
131
- end
132
-
133
- if event_history.order_plan_details_win_active
134
- event_history = Cryptum::UI::OrderPlanDetails.refresh(
135
- option_choice: option_choice,
136
- order_plan_details_win: terminal_win.order_plan_details_section,
137
- event_history: event_history,
138
- key_press_event: terminal_win.key_press_event
139
- )
140
- end
141
-
142
- unless event_history.order_execute_details_win_active
143
- event_history = Cryptum::UI::OrderExecution.refresh(
144
- option_choice: option_choice,
145
- order_execute_win: terminal_win.order_execute_section,
146
- env: env,
147
- event_history: event_history,
148
- key_press_event: terminal_win.key_press_event,
149
- indicator_status: indicator_status,
150
- bot_conf: bot_conf,
151
- fiat_portfolio_file: fiat_portfolio_file
152
- )
153
- end
154
-
155
- if event_history.order_execute_details_win_active
156
- event_history = Cryptum::UI::OrderExecuteDetails.refresh(
157
- option_choice: option_choice,
158
- order_execute_details_win: terminal_win.order_execute_details_section,
159
- event_history: event_history,
160
- key_press_event: terminal_win.key_press_event
161
- )
162
- end
163
-
164
- # Refresh Command Section for Cryptum Session Usage
165
- Cryptum::UI::Command.refresh(
166
- command_win: terminal_win.command_section,
167
- key_press_event: terminal_win.key_press_event
168
- )
169
-
170
- # last_ticker_price = event_history.order_book[:ticker_price].to_f
171
- # second_to_last_ticker_price = event_history.order_book[:ticker_price_second_to_last].to_f
172
- # third_to_last_ticker_price = event_history.order_book[:ticker_price_third_to_last].to_f
173
-
174
- event_history
175
- rescue LoadError => e
176
- # This happens when autoloading modules fail.
177
- File.open('/tmp/cryptum-errors.txt', 'a') do |f|
178
- f.puts Time.now.strftime('%Y-%m-%d %H:%M:%S.%N %z')
179
- f.puts "Module: #{self}"
180
- f.puts "#{e}\n\n\n"
181
- end
182
-
183
- retry
184
- rescue Interrupt
185
- # Exit Gracefully if CTRL+C is Pressed During Session
186
- Cryptum.exit_gracefully(which_self: self)
187
- rescue StandardError => e
188
- raise e
189
- ensure
190
- $stdout.flush
191
- end
192
-
193
20
  # Display Usage for this Module
194
21
 
195
22
  public_class_method def self.help
@@ -9,6 +9,7 @@ module Cryptum
9
9
  :driver_name,
10
10
  :list_products,
11
11
  :proxy,
12
+ :reset_session_countdown,
12
13
  :session_root,
13
14
  :sandbox,
14
15
  :symbol,
@@ -41,6 +41,12 @@ module Cryptum
41
41
  '<Optional - HTTP Proxy e.g. "http://127.0.0.1:8080">'
42
42
  ) { |p| option_choice.proxy = p }
43
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
+
44
50
  options.on(
45
51
  '-rPATH',
46
52
  '--session-root=PATH',
@@ -82,6 +82,16 @@ module Cryptum
82
82
  end
83
83
 
84
84
  event_history.order_book = order_book
85
+ if option_choice.reset_session_countdown
86
+ event_history.order_book[:market_trend][:buy] = 0
87
+ event_history.order_book[:market_trend][:sell] = 0
88
+ event_history.order_book[:last_trend_reset] = Time.now.strftime(
89
+ '%Y-%m-%d %H:%M:%S.%N%z'
90
+ )
91
+ event_history.order_book[:last_order_exec] = Time.now.strftime(
92
+ '%Y-%m-%d %H:%M:%S.%N%z'
93
+ )
94
+ end
85
95
 
86
96
  event_history
87
97
  rescue StandardError => e
@@ -8,7 +8,6 @@ module Cryptum
8
8
  class Indicator
9
9
  attr_accessor :market_trend,
10
10
  :profit_margin,
11
- :weighted_avg,
12
11
  :action_signal,
13
12
  :last_action_signal
14
13
  end
@@ -7,13 +7,12 @@ module Cryptum
7
7
  module UI
8
8
  module Ticker
9
9
  public_class_method def self.refresh(opts = {})
10
- # option_choice = opts[:option_choice]
11
10
  start_time = opts[:start_time]
12
11
  ticker_win = opts[:ticker_win]
13
- # key_press_event = opts[:key_press_event]
14
- order_book = opts[:order_book]
12
+ event_history = opts[:event_history]
15
13
  event = opts[:event]
16
14
 
15
+ order_book = event_history.order_book
17
16
  this_product = order_book[:this_product]
18
17
  quote_increment = this_product[:quote_increment]
19
18
  fiat_smallest_decimal = quote_increment.to_s.split('.')[-1].length
@@ -139,6 +138,8 @@ module Cryptum
139
138
  highest_selling_price
140
139
  )
141
140
  )
141
+
142
+ event_history.order_book = order_book
142
143
  # TODO: Everything Above this Line Needs to be Indicators ^
143
144
 
144
145
  # UI
@@ -283,6 +284,8 @@ module Cryptum
283
284
  )
284
285
 
285
286
  ticker_win.refresh
287
+
288
+ event_history
286
289
  rescue Interrupt
287
290
  # Exit Gracefully if CTRL+C is Pressed During Session
288
291
  Cryptum.exit_gracefully(which_self: self)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cryptum
4
- VERSION = '0.0.325'
4
+ VERSION = '0.0.327'
5
5
  end
@@ -55,23 +55,157 @@ module Cryptum
55
55
  # Explore another way to decouple required events
56
56
  # (such as keypresses) from only being triggered
57
57
  # when messages come through.
58
- ai_enabled = bot_conf[:artifical_intelligence]
59
58
 
60
59
  event_history.event = JSON.parse(
61
60
  event.data,
62
61
  symbolize_names: true
63
62
  )
64
63
  event_history.event_type = event_history.event[:type].to_s.to_sym
65
- event_history = Cryptum::Event.parse(
64
+
65
+ this_product = event_history.order_book[:this_product]
66
+ fiat = this_product[:quote_currency]
67
+ fiat_portfolio_file = "#{option_choice.session_root}/order_books/#{fiat}_PORTFOLIO.json"
68
+
69
+ # Determine if Summary UI needs updated data
70
+ event_history = Cryptum::Portfolio::Balance.refresh(
66
71
  env: env,
72
+ option_choice: option_choice,
67
73
  terminal_win: terminal_win,
74
+ event_history: event_history,
75
+ fiat_portfolio_file: fiat_portfolio_file
76
+ )
77
+
78
+ # If the Terminal Window has been Resized, Resize the UI
79
+ if Curses.cols != terminal_win.cols
80
+ terminal_win.cols = Curses.cols
81
+ terminal_win.ticker_ui_resize = true
82
+ terminal_win.market_trend_ui_resize = true
83
+ end
84
+
85
+ event_history = Cryptum::UI::Portfolio.refresh(
86
+ option_choice: option_choice,
87
+ portfolio_win: terminal_win.portfolio_section,
88
+ event_history: event_history,
89
+ key_press_event: terminal_win.key_press_event,
90
+ indicator_status: indicator_status,
91
+ bot_conf: bot_conf,
92
+ fiat_portfolio_file: fiat_portfolio_file
93
+ )
94
+
95
+ if event_history.event_type == :ticker ||
96
+ terminal_win.ticker_ui_resize
97
+
98
+ ticker_event = event_history.ticker_event = event_history.event if event_history.event_type == :ticker
99
+ ticker_event = event_history.ticker_event if terminal_win.ticker_ui_resize
100
+ event_history = Cryptum::UI::Ticker.refresh(
101
+ option_choice: option_choice,
102
+ start_time: event_history.start_time,
103
+ ticker_win: terminal_win.ticker_section,
104
+ key_press_event: terminal_win.key_press_event,
105
+ event_history: event_history,
106
+ event: ticker_event
107
+ )
108
+ end
109
+
110
+ Cryptum::UI::OrderTimer.refresh(
111
+ option_choice: option_choice,
112
+ event_history: event_history,
113
+ order_timer_win: terminal_win.order_timer_section,
114
+ indicator_status: indicator_status,
115
+ key_press_event: terminal_win.key_press_event
116
+ )
117
+
118
+ if event_history.event_type == :l2update ||
119
+ terminal_win.market_trend_ui_resize
120
+
121
+ market_trend_event = event_history.market_trend_event = event_history.event if event_history.event_type == :l2update
122
+ market_trend_event = event_history.market_trend_event if terminal_win.market_trend_ui_resize
123
+ event_history = Cryptum::UI::MarketTrend.refresh(
124
+ option_choice: option_choice,
125
+ market_trend_win: terminal_win.market_trend_section,
126
+ event_history: event_history,
127
+ key_press_event: terminal_win.key_press_event,
128
+ event: market_trend_event,
129
+ indicator_status: indicator_status,
130
+ bot_conf: bot_conf
131
+ )
132
+ end
133
+
134
+ indicator_status = Cryptum::UI::SignalEngine.refresh(
68
135
  option_choice: option_choice,
136
+ signal_engine_win: terminal_win.signal_engine_section,
69
137
  event_history: event_history,
138
+ key_press_event: terminal_win.key_press_event,
70
139
  indicator_status: indicator_status,
71
140
  bot_conf: bot_conf,
72
- ai_enabled: ai_enabled
141
+ fiat_portfolio_file: fiat_portfolio_file
142
+ )
143
+
144
+ unless event_history.order_plan_details_win_active
145
+ event_history = Cryptum::UI::OrderPlan.refresh(
146
+ option_choice: option_choice,
147
+ order_plan_win: terminal_win.order_plan_section,
148
+ env: env,
149
+ event_history: event_history,
150
+ key_press_event: terminal_win.key_press_event,
151
+ indicator_status: indicator_status,
152
+ bot_conf: bot_conf,
153
+ fiat_portfolio_file: fiat_portfolio_file
154
+ )
155
+ recalc_op = event_history.recalculate_order_plan
156
+ order_plan = event_history.order_book[:order_plan]
157
+ terminal_win.key_press_event.key_w = true if (recalc_op || order_plan.empty?) &&
158
+ !event_history.red_pill
159
+ event_history.recalculate_order_plan = false
160
+ end
161
+
162
+ if event_history.order_plan_details_win_active
163
+ event_history = Cryptum::UI::OrderPlanDetails.refresh(
164
+ option_choice: option_choice,
165
+ order_plan_details_win: terminal_win.order_plan_details_section,
166
+ event_history: event_history,
167
+ key_press_event: terminal_win.key_press_event
168
+ )
169
+ end
170
+
171
+ unless event_history.order_execute_details_win_active
172
+ event_history = Cryptum::UI::OrderExecution.refresh(
173
+ option_choice: option_choice,
174
+ order_execute_win: terminal_win.order_execute_section,
175
+ env: env,
176
+ event_history: event_history,
177
+ key_press_event: terminal_win.key_press_event,
178
+ indicator_status: indicator_status,
179
+ bot_conf: bot_conf,
180
+ fiat_portfolio_file: fiat_portfolio_file
181
+ )
182
+ end
183
+
184
+ if event_history.order_execute_details_win_active
185
+ event_history = Cryptum::UI::OrderExecuteDetails.refresh(
186
+ option_choice: option_choice,
187
+ order_execute_details_win: terminal_win.order_execute_details_section,
188
+ event_history: event_history,
189
+ key_press_event: terminal_win.key_press_event
190
+ )
191
+ end
192
+
193
+ # Refresh Command Section for Cryptum Session Usage
194
+ Cryptum::UI::Command.refresh(
195
+ command_win: terminal_win.command_section,
196
+ key_press_event: terminal_win.key_press_event
73
197
  )
74
198
 
199
+ # event_history = Cryptum::Event.parse(
200
+ # env: env,
201
+ # terminal_win: terminal_win,
202
+ # option_choice: option_choice,
203
+ # event_history: event_history,
204
+ # indicator_status: indicator_status,
205
+ # bot_conf: bot_conf,
206
+ # ai_enabled: ai_enabled
207
+ # )
208
+
75
209
  # Detect Key Press Events
76
210
  Cryptum::Event::KeyPress.detect(terminal_win: terminal_win)
77
211
 
@@ -249,6 +383,8 @@ module Cryptum
249
383
 
250
384
  sleep 1
251
385
  retry
386
+ ensure
387
+ $stdout.flush
252
388
  end
253
389
  rescue Interrupt
254
390
  # Exit Gracefully if CTRL+C is Pressed During Session
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.325
4
+ version: 0.0.327
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-14 00:00:00.000000000 Z
11
+ date: 2022-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -401,7 +401,6 @@ files:
401
401
  - lib/cryptum/order_book/indicator.rb
402
402
  - lib/cryptum/order_book/market_trend.rb
403
403
  - lib/cryptum/order_book/profit_margin.rb
404
- - lib/cryptum/order_book/weighted_avg.rb
405
404
  - lib/cryptum/portfolio.rb
406
405
  - lib/cryptum/portfolio/balance.rb
407
406
  - lib/cryptum/ui.rb
@@ -1,157 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cryptum
4
- # This plugin is used to indicate if the Weighted Executed Buy Orders are less than the Weighted Excuted Sell Orders
5
-
6
- module OrderBook
7
- module WeightedAvg
8
- # Supported Method Parameters::
9
- # Cryptum::OrderBook::WeightedAvg.status(
10
- # order_book: 'required - order_book data structure'
11
- # )
12
-
13
- public_class_method def self.status(opts = {})
14
- order_book = opts[:order_book]
15
- order_history = order_book[:order_history]
16
- indicator_status = opts[:indicator_status]
17
- invested = opts[:invested]
18
-
19
- indicator_hash = {}
20
- indicator_hash[:invested] = invested
21
-
22
- buy_orders_done = order_history.select do |orders|
23
- orders[:side] == 'buy' &&
24
- orders[:status] == 'done' &&
25
- orders[:done_reason] == 'filled'
26
- end
27
-
28
- total_buy_orders_done = buy_orders_done.length
29
- avg_buy_exec = format('%0.7f', 0.00).to_f
30
- # total_buy_executed = 0.00
31
- # total_invested = 0.00
32
- # buy_fees = 0.00
33
- if total_buy_orders_done.positive?
34
- # Calculate Weighted Avg. of Completed Buy Orders
35
- weighted_buy_prices_arr = []
36
- buy_orders_done.each do |order|
37
- weighted_hash = {}
38
- executed_value = order[:executed_value].to_f
39
- filled_size = order[:filled_size].to_f
40
- weighted_hash[:price] = (executed_value / filled_size).to_f
41
- weighted_hash[:filled_size] = filled_size
42
- weighted_hash[:price_times_filled_size] = weighted_hash[:price] * filled_size
43
- weighted_buy_prices_arr.push(weighted_hash)
44
- end
45
-
46
- price_times_filled_size = weighted_buy_prices_arr.sum do |orders|
47
- orders[:price_times_filled_size].to_f
48
- end
49
-
50
- this_filled_size = weighted_buy_prices_arr.sum do |orders|
51
- orders[:filled_size]
52
- end
53
-
54
- calc_avg_buy_exec = price_times_filled_size / this_filled_size
55
- avg_buy_exec = format('%0.7f', calc_avg_buy_exec).to_f
56
-
57
- executed_value = buy_orders_done.sum do |orders|
58
- orders[:executed_value].to_f
59
- end
60
-
61
- # total_buy_executed = format('%0.7f', executed_value).to_f
62
-
63
- # fill_fees = buy_orders_done.sum do |orders|
64
- # orders[:fill_fees].to_f
65
- # end
66
-
67
- # buy_fees = format('%0.7f', fill_fees).to_f
68
-
69
- # calc_total_invested = total_buy_executed.to_f - buy_fees.to_f
70
- # total_invested = format('%0.7f', calc_total_invested).to_f
71
- end
72
- order_book[:avg_buy_exec] = avg_buy_exec
73
-
74
- sell_orders_done = order_history.select do |orders|
75
- orders[:side] == 'sell' &&
76
- orders[:status] == 'done' &&
77
- orders[:done_reason] == 'filled'
78
- end
79
-
80
- total_sell_orders_done = sell_orders_done.length
81
- avg_sell_exec = format('%0.7f', 0.00).to_f
82
- # total_sell_executed = format('%0.7f', 0.00).to_f
83
- # total_return = format('%0.7f', 0.00).to_f
84
- # sell_fees = format('%0.7f', 0.00).to_f
85
- if total_sell_orders_done.positive?
86
- # Calculate Weighted Avg. of Completed Sell Orders
87
- weighted_sell_prices_arr = []
88
- sell_orders_done.each do |order|
89
- weighted_hash = {}
90
- executed_value = order[:executed_value].to_f
91
- filled_size = order[:filled_size].to_f
92
- weighted_hash[:price] = (executed_value / filled_size).to_f
93
- weighted_hash[:filled_size] = filled_size
94
- weighted_hash[:price_times_filled_size] = weighted_hash[:price] * filled_size
95
- weighted_sell_prices_arr.push(weighted_hash)
96
- end
97
-
98
- price_times_filled_size = weighted_sell_prices_arr.sum do |orders|
99
- orders[:price_times_filled_size].to_f
100
- end
101
-
102
- this_filled_size = weighted_sell_prices_arr.sum do |orders|
103
- orders[:filled_size]
104
- end
105
-
106
- calc_avg_sell_exec = price_times_filled_size / this_filled_size
107
- avg_sell_exec = format('%0.7f', calc_avg_sell_exec).to_f
108
-
109
- executed_value = sell_orders_done.sum do |orders|
110
- orders[:executed_value].to_f
111
- end
112
-
113
- # total_sell_executed = format('%0.7f', executed_value).to_f
114
-
115
- # fill_fees = sell_orders_done.sum do |orders|
116
- # orders[:fill_fees].to_f
117
- # end
118
-
119
- # sell_fees = format('%0.7f', fill_fees).to_f
120
- # calc_total_made = total_sell_executed.to_f - sell_fees.to_f
121
- # total_return = format('%0.7f', calc_total_made).to_f
122
- end
123
- order_book[:avg_sell_exec] = avg_sell_exec
124
-
125
- if avg_buy_exec < avg_sell_exec
126
- indicator_hash[:color] = :green
127
- weight_op = '<'
128
- elsif avg_buy_exec > avg_sell_exec
129
- indicator_hash[:color] = :red
130
- weight_op = '>'
131
- else
132
- indicator_hash[:color] = :yellow
133
- weight_op = '=='
134
- end
135
- weighted_avg_status_out = "VWAPB #{weight_op} VWAPS"
136
- order_book[:candles].last[:weighted_avg_status] = weighted_avg_status_out
137
- indicator_hash[:status] = weighted_avg_status_out
138
- # indicator_hash[:order_book] = order_book
139
-
140
- indicator_status.weighted_avg = indicator_hash
141
- # indicator_hash
142
- rescue StandardError => e
143
- raise e
144
- end
145
-
146
- # Display Usage for this Module
147
-
148
- public_class_method def self.help
149
- puts "USAGE:
150
- weighted_avg_indicator_hash = #{self}.status(
151
- order_book: 'required - order_book data structure'
152
- )
153
- "
154
- end
155
- end
156
- end
157
- end