Difference between revisions of "Programming performance/JasonWoof Ruby"

From HaskellWiki
Jump to navigation Jump to search
(Oops, didn't notice until now that the data file is backwards)
 
(One intermediate revision by the same user not shown)
Line 8: Line 8:
   
   
<nowiki><pre>
+
<pre>
   
 
#!/usr/bin/ruby
 
#!/usr/bin/ruby
Line 19: Line 19:
   
 
file = File.new('gspc.txt')
 
file = File.new('gspc.txt')
 
 
file.readline
 
file.readline
$last_close = file.readline.split(/[ \n]/)[6].to_f
 
   
  +
data = file.readlines
file.each_line do |line|
 
 
$last_close = data.pop.split(/[ \n]/)[6].to_f
  +
data = data.reverse
  +
 
data.each do |line|
 
words = line.split(/[ \n]/)
 
words = line.split(/[ \n]/)
 
$close = words[6].to_f
 
$close = words[6].to_f
Line 69: Line 71:
   
 
</pre>
 
</pre>
</nowiki>
 

Latest revision as of 03:47, 8 March 2007

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;