# frozen_string_literal: true module Cryptum # Cryptum::Event Namespace module Event # Class to Keep Track of Event History class History attr_accessor :bullish_trend, :event, :event_notes, :event_type, :first_event, :market_trend_event, :open_sell_orders, :open_sell_orders_max, :open_sell_orders_merge, :order_book, :order_canceled, :order_execute_win_active, :order_execute_details_win_active, :order_execute_index_offset, :order_execute_max_rows_to_display, :order_execute_max_records_available_to_display, :order_execute_row_to_select, :order_execute_selected_data, :order_plan_win_active, :order_plan_details_win_active, :order_plan_index_offset, :order_plan_max_rows_to_display, :order_plan_max_records_available_to_display, :order_plan_row_to_select, :order_plan_selected_data, :order_ready, :order_submitted, :plan_no, :reconnected, :red_pill, :start_time, :ticker_event, :time_between_orders, :time_between_orders_max, :time_between_orders_min, :time_between_orders_reset, :recalculate_order_plan def initialize(opts = {}) option_choice = opts[:option_choice] order_book = opts[:order_book] self.bullish_trend = true self.first_event = true self.open_sell_orders = 0 self.open_sell_orders_max = 500 self.open_sell_orders_merge = false self.order_book = order_book self.order_canceled = false self.order_execute_win_active = false self.order_execute_details_win_active = false self.order_execute_index_offset = 0 self.order_execute_max_rows_to_display = 6 self.order_execute_max_records_available_to_display = 6 self.order_execute_row_to_select = order_execute_index_offset self.order_execute_selected_data = { color: :white } self.order_plan_win_active = true self.order_plan_details_win_active = false self.order_plan_index_offset = 0 self.order_plan_max_rows_to_display = 6 self.order_plan_max_records_available_to_display = 6 self.order_plan_row_to_select = order_plan_index_offset self.order_plan_selected_data = { color: :white } self.order_ready = false self.order_submitted = false self.plan_no = 1 self.reconnected = false self.red_pill = false self.recalculate_order_plan = false self.start_time = Time.now.strftime('%Y-%m-%d %H:%M:%S%z') # -------------------------------------------------- # # SAUCE 3 (SAUCE 4 RELATES TO SAUCE 3) # TODO: Divide current values by 6 and rely # upon the last order value to mitigate # portfolio exhaustion. case option_choice.market_trend_reset_label when '1W' # SLOW BUY = 4 hours self.time_between_orders_max = 14_400 # FAST BUY = 40 minutes self.time_between_orders = 2_400 self.time_between_orders_reset = time_between_orders # 10 minutes self.time_between_orders_min = 600 when '1D' # SLOW BUY = 40 minutes self.time_between_orders_max = 2_400 # FAST BUY = 30 minutes self.time_between_orders = 1_800 self.time_between_orders_reset = time_between_orders # 7.5 minutes self.time_between_orders_min = 450 when '4h' # SLOW BUY = 30 minutes self.time_between_orders_max = 1_800 # FAST BUY = 20 minutes self.time_between_orders = 1_200 self.time_between_orders_reset = time_between_orders # 10 minutes self.time_between_orders_min = 300 when '3h' # SLOW BUY = 20 minutes self.time_between_orders_max = 1_200 # FAST BUY = 10 minutes self.time_between_orders = 600 self.time_between_orders_reset = time_between_orders # 2.5 minutes self.time_between_orders_min = 150 when '2h' # SLOW BUY = 10 minutes self.time_between_orders_max = 600 # FAST BUY = 7.5 minutes self.time_between_orders = 450 self.time_between_orders_reset = time_between_orders # 50 seconds self.time_between_orders_min = 50 when '1h' # SLOW BUY = 7.5 minutes self.time_between_orders_max = 450 # FAST BUY = 5 minutes self.time_between_orders = 300 self.time_between_orders_reset = time_between_orders # 30 seconds self.time_between_orders_min = 30 when '45m' # SLOW BUY = 5 minutes self.time_between_orders_max = 300 # FAST BUY = 2.5 minutes self.time_between_orders = 150 self.time_between_orders_reset = time_between_orders # 1 minute self.time_between_orders_min = 10 when '30m' # SLOW BUY = 15 minutes self.time_between_orders_max = 150 # FAST BUY = 50 seconds self.time_between_orders = 50 self.time_between_orders_reset = time_between_orders # 10 seconds self.time_between_orders_min = 10 when '15m' # SLOW BUY = 50 seconds self.time_between_orders_max = 50 # FAST BUY = 30 seconds self.time_between_orders = 30 self.time_between_orders_reset = time_between_orders # 10 seconds self.time_between_orders_min = 10 when '5m' # SLOW BUY = 30 seconds self.time_between_orders_max = 30 # FAST BUY = 10 seconds self.time_between_orders = 10 self.time_between_orders_reset = time_between_orders # 1 minute self.time_between_orders_min = 10 when '3m', '1m' # SLOW BUY = 10 seconds self.time_between_orders_max = 10 # FAST BUY = 10 seconds self.time_between_orders = 10 self.time_between_orders_reset = time_between_orders # 10 seconds self.time_between_orders_min = 10 end # -------------------------------------------------- # end rescue Interrupt, StandardError => e # Produce a Stacktrace for anything else Cryptum::Log.append(level: :error, msg: e, which_self: self) end end end