Sha256: e7d1966fc4837d4d2f9c5bc924040467bb0bdca103adb87e08a6cdca2effd776

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

module Deamons
  # Simple process to add wash trades to a market in order to simulate trade matching for QA and dev
  class WashTrade
    require 'utils'

    def initialize(api, market, freq)
      @g_count = 1
      @range = 1.015
      @api = api
      @market = market
      @freq = freq
      Process.fork do
        Process.daemon(true)
        pid = Process.pid
        redirect("#{pid}.outfile", "#{pid}.errfile")
        write_pid_file(pid, "#{pid}.pid")
        start
      end
      puts "SimBot started on #{market} @ freq #{freq}"
    end

    def start
      count = 0
      puts "--------#{@market} -------"
      loop do
        vol = rand(0.2...3)
        price = aug_price
        @api.post_order(@market, price, vol, 'sell')
        delay = (1.00 / @freq)
        sleep(delay)
        @api.post_order(@market, price, vol, 'buy')
        puts "order ##{count} placed"
        count += 1
      rescue ::StandardError => e
        STDERR.puts e
        next
      end
    end

    def aug_price
      if @g_count > 60
        @range = rand(1.003...1.010)
        @g_count = 0
      end
      @g_count += 1
      Utils.quote(@market) * rand(1.002...@range)
    end

    # Attempts to write the pid of the forked process to the pid file.
    def write_pid_file(pid, pidfile)
      File.open pidfile, "w" do |f|
        f.write pid
      end
    rescue ::Exception => e
      $stderr.puts "While writing the PID to file, unexpected #{e.class}: #{e}"
      Process.kill "HUP", pid
    end

    # Send stdout and stderr to log files for the child process
    def redirect(outfile, errfile)
      $stdin.reopen '/dev/null'
      out = File.new outfile, "a"
      err = File.new errfile, "a"
      $stdout.reopen out
      $stderr.reopen err
      $stdout.sync = $stderr.sync = true
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
SimBot-0.1.14 lib/wash_trade.rb