rmarket 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,7 +6,9 @@ RMarket is a ruby gem for making stock market simulations.
6
6
  * OrderLedger - one side of a CDA order book; enforces transactions to occur at the current bid/ask price depending on its assigned type
7
7
  * OrderBook - a model of a CDA order book; manages a buy and sell ledger and enforces orders to match a specific label
8
8
  * Trader - tracks a portfolio or stocks and cash; passes off the real work to the user defined objects: TradingStrategy, ValueFunction, and Beliefs
9
-
9
+ * News - container class for distributing information to traders
10
+ * NewsGenerator - generates News by adding noise from a given distribution to dividend shock information
11
+ * DividendGenerator - generates dividends from a given distribution according to a mean reverting process
10
12
  == Contributing
11
13
 
12
14
  If you are interested in making a contribution, first propose the change or added feature on the issues page. Once this project is a little more hammered down, we'll move to the fork-pull request model.
@@ -0,0 +1,3 @@
1
+ Dir[File.dirname(__FILE__) + '/beliefs/*.rb'].each do |file|
2
+ require "rmarket/beliefs/#{File.basename(file, File.extname(file))}"
3
+ end
@@ -0,0 +1,47 @@
1
+ module RMarket
2
+ module Beliefs
3
+ # Piece of news patterned after Epstein-Schneider 2008
4
+ class News
5
+ attr_reader :signal, :previous_dividend
6
+
7
+ def initialize(signal, previous_dividend=nil)
8
+ @signal = signal
9
+ @previous_dividend = previous_dividend
10
+ end
11
+ end
12
+
13
+ # noise in news perturbs the next period dividend shock
14
+ class NewsGenerator
15
+
16
+ def noise_mean; @noise_distribution.mu; end
17
+ def noise_std; @noise_distribution.sigma; end
18
+
19
+ def initialize(noise_distribution)
20
+ @noise_distribution = noise_distribution
21
+ end
22
+
23
+ def generate_news(next_shock, last_dividend)
24
+ News.new(@noise_distribution.sample+next_shock, last_dividend)
25
+ end
26
+ end
27
+
28
+ # Mean reverting dividend generation
29
+ class DividendGenerator
30
+
31
+ attr_reader :kappa, :last_period_dividend
32
+ def dividend_mean; @dividend_distribution.mu; end
33
+ def dividend_std; @dividend_distribution.sigma; end
34
+
35
+ def initialize(dividend_distribution, kappa=0)
36
+ @dividend_distribution, @kappa = dividend_distribution, kappa
37
+ @next_period_dividend = dividend_mean
38
+ end
39
+
40
+ def generate_next_dividend
41
+ @next_shock = @dividend_distribution.sample
42
+ @last_period_dividend = @next_period_dividend
43
+ @next_period_dividend = (dividend_mean*@kappa)+((1-@kappa)*@next_period_dividend)+next_shock
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,3 +1,3 @@
1
1
  module RMarket
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -23,5 +23,5 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency "growl"
24
24
  s.add_development_dependency "guard-rspec"
25
25
  s.add_development_dependency "rb-fsevent"
26
- # s.add_runtime_dependency "rest-client"
26
+ s.add_development_dependency "ruby-gsl-ng"
27
27
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'gslng'
3
+
4
+ module RMarket
5
+ module Beliefs
6
+ describe NewsGenerator do
7
+ describe "#generate_news" do
8
+ before(:each) { @news_g = NewsGenerator.new(GSLng::RNG::Gaussian.new(1, 1)); @news = @news_g.generate_news(0.2, 4) }
9
+ it { @news_g.noise_mean.should == 1}
10
+ it { @news_g.noise_std.should == 1}
11
+ it { @news.is_a?(News).should == true }
12
+ it { @news.signal.should_not == 0.2 }
13
+ it { @news.previous_dividend.should == 4}
14
+ end
15
+ end
16
+ describe DividendGenerator do
17
+ let!(:div_g){DividendGenerator.new(GSLng::RNG::Gaussian.new(1, 1))}
18
+ it {div_g.dividend_mean.should == 1}
19
+ it {div_g.dividend_std.should == 1}
20
+ end
21
+ end
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rmarket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-01 00:00:00.000000000 Z
12
+ date: 2011-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70175638857640 !ruby/object:Gem::Requirement
16
+ requirement: &70269586796800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70175638857640
24
+ version_requirements: *70269586796800
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: growl
27
- requirement: &70175638857140 !ruby/object:Gem::Requirement
27
+ requirement: &70269586796340 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70175638857140
35
+ version_requirements: *70269586796340
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: guard-rspec
38
- requirement: &70175638856680 !ruby/object:Gem::Requirement
38
+ requirement: &70269586795620 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70175638856680
46
+ version_requirements: *70269586795620
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rb-fsevent
49
- requirement: &70175638856220 !ruby/object:Gem::Requirement
49
+ requirement: &70269586794780 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,18 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70175638856220
57
+ version_requirements: *70269586794780
58
+ - !ruby/object:Gem::Dependency
59
+ name: ruby-gsl-ng
60
+ requirement: &70269586794140 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70269586794140
58
69
  description: rmarket provides classes for modeling market interactions in ruby, such
59
70
  as an order book that operates as a CDA.
60
71
  email:
@@ -66,15 +77,18 @@ files:
66
77
  - .gitignore
67
78
  - Gemfile
68
79
  - Guardfile
69
- - README
80
+ - README.rdoc
70
81
  - Rakefile
71
82
  - lib/rmarket.rb
83
+ - lib/rmarket/beliefs.rb
84
+ - lib/rmarket/beliefs/news.rb
72
85
  - lib/rmarket/order.rb
73
86
  - lib/rmarket/order_book.rb
74
87
  - lib/rmarket/order_ledger.rb
75
88
  - lib/rmarket/trader.rb
76
89
  - lib/rmarket/version.rb
77
90
  - rmarket.gemspec
91
+ - spec/rmarket/news_spec.rb
78
92
  - spec/rmarket/order_book_spec.rb
79
93
  - spec/rmarket/order_ledger_spec.rb
80
94
  - spec/rmarket/trader_spec.rb
@@ -104,7 +118,9 @@ signing_key:
104
118
  specification_version: 3
105
119
  summary: Classes for modeling market interactions in ruby
106
120
  test_files:
121
+ - spec/rmarket/news_spec.rb
107
122
  - spec/rmarket/order_book_spec.rb
108
123
  - spec/rmarket/order_ledger_spec.rb
109
124
  - spec/rmarket/trader_spec.rb
110
125
  - spec/spec_helper.rb
126
+ has_rdoc: