rmarket 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: