Programming performance/JasonWoof Ruby

From HaskellWiki
< Programming performance
Revision as of 03:47, 8 March 2007 by JasonWoof (talk | contribs) (Oops, didn't notice until now that the data file is backwards)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Language: ruby

Experience level with ruby: beginner

Time taken: 50 minutes

Notes: The code is crappy for two reasons: 1) I don't know ruby very well, 2) I was racing. I spent a bunch of time looking up how to do basic things like read a line. A skilled ruby programmer could probably do this in 15 minutes.



#!/usr/bin/ruby

$verbose = false

$bank = 10000.00
$stocks = []


file = File.new('gspc.txt')
file.readline

data = file.readlines
$last_close = data.pop.split(/[ \n]/)[6].to_f
data = data.reverse

data.each do |line|
    words = line.split(/[ \n]/)
    $close = words[6].to_f
    if $verbose
        print "bank: #{$bank.to_s}\n"
        print "close: #{$close.to_s}\n";
        print 'change: ' + ((($close - $last_close) / $last_close) * 100.0).to_s + "%\n"
    end
    if ($close - $last_close) / $last_close < -0.03
        $stocks.push([$close, ($bank / 10) / $close])
        if $verbose
            print 'bought ' + (($bank / 10) / $close).to_s + " shares at #{$close}\n"
            print 'bank: ' + $bank.to_s + "\n"
        end
        $bank *= 0.9;
    end
    thresh = $close / 1.06
    new_stocks = [];
    $stocks.each do |row|
        held_close = row[0]
        held_count = row[1]
        if(held_close <= thresh)
            $bank += held_count * $close;
            if $verbose
                print "sold #{held_count} shares that were bought at #{held_close.to_s}\n"
                print "bank: #{$bank}\n"
            end
        else
            new_stocks.push [held_close, held_count]
        end
    end
    $stocks = new_stocks
    $last_close = $close
end

$stocks.each do |row|
    held_close = row[0]
    held_count = row[1] 
    $bank += held_count * $close;
end

print 'bank: ' + $bank.to_s + "\n"

exit;