Sha256: ec9cfc07bc4cd4a3e2191e94e54694109e900d6277493b4c186a7e77d5444f80

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

require "ruby-trade"

TradeAmount = 10_000
InitialPrice = 10.0
Distance = 2.0
UpdateInterval = 3

class Marketmaker
  include RubyTrade::Client

  def self.on_connect *args
    puts "Connected."

    update_orders

    this = self
    EM.add_periodic_timer UpdateInterval do
      this.update_orders
    end
  end

  def self.on_tick level1
    @level1 = level1
  end

  def self.update_orders
    @buy_order.cancel! if @buy_order
    @sell_order.cancel! if @sell_order

    last = @level1 ? @level1["last"] : InitialPrice
    last = InitialPrice if last.nil? or last == 0.0
    puts @level1
    puts last

    # buy and sell a certain percentage from the last
    buy_price = last * (1.0 - Distance / 100)
    sell_price = last * (1.0 + Distance / 100)

    puts "Buy: #{buy_price}"
    puts "Sell: #{sell_price}"

    # randomize sending order - sometimes don't send an order just to mess with
    # folks
    should_send_buy = rand > 0.1
    should_send_sell = rand > 0.1

    if should_send_buy
      @buy_order = buy TradeAmount, at: buy_price
    else
      puts "Disabling buy"
      @buy_order = nil
    end

    if should_send_sell
      @sell_order = sell TradeAmount, at: sell_price
    else
      puts "Disabling sell"
      @sell_order = nil
    end
  end

end

Marketmaker.connect_to "127.0.0.1", as: "MarketMaker", ai: true

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ruby-trade-0.4 examples/market_maker.rb
ruby-trade-0.3 examples/market_maker.rb
ruby-trade-0.2 examples/market_maker.rb