Sha256: 75b3a40ec1c78e1211e6ff0a89f0a416dd4163fd06b1fbdf4e422ede1dd3640b

Contents?: true

Size: 1.45 KB

Versions: 1

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

module CossBot
  class BuyLowSellHigh < Basic
    private

    def tick
      logger.info('=== Start of trading cycle ===')
      balances = exchange.account_balances
      currency_to_sell = pair.split('_').last
      current_balance = balances.detect { |c| c['currency_code'] == currency_to_sell }['available'].to_f
      pair_depth = exchange.pair_depth(pair)
      current_price = pair_depth['asks'].first.first.to_f

      if current_balance <= trade_limit.to_f
        yield(nil, nil, { status: 0, message: 'Current balance <= trade limit' })
      elsif current_balance <= current_price * lot_size
        yield(nil, nil, { status: 0, message: 'Current balance <= current_price * lot_size' })
      else
        price_with_profit = (current_price + (current_price / 100 * profit.to_f)).round(6)
        logger.info("Placing BUY order for #{current_price}. Lot size: #{lot_size}")
        buy_response = exchange.place_limit_order(pair, current_price, 'BUY', lot_size)
        logger.info("Placing SELL order for #{price_with_profit}. Lot size: #{lot_size}")
        sell_response = exchange.place_limit_order(pair, price_with_profit, 'SELL', lot_size)
        logger.info('=== End of trading cycle ===')

        error = {}
        error[:buy] = buy_response if buy_response[:status].present?
        error[:sell] = sell_response if sell_response[:status].present?

        yield(buy_response, sell_response, error)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
coss_bot-0.1.3 lib/coss_bot/buy_low_sell_high.rb