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.
- data/{README → README.rdoc} +3 -1
- data/lib/rmarket/beliefs.rb +3 -0
- data/lib/rmarket/beliefs/news.rb +47 -0
- data/lib/rmarket/version.rb +1 -1
- data/rmarket.gemspec +1 -1
- data/spec/rmarket/news_spec.rb +22 -0
- metadata +27 -11
data/{README → README.rdoc}
RENAMED
@@ -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,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
|
data/lib/rmarket/version.rb
CHANGED
data/rmarket.gemspec
CHANGED
@@ -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.
|
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *70269586796800
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: growl
|
27
|
-
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: *
|
35
|
+
version_requirements: *70269586796340
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: guard-rspec
|
38
|
-
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: *
|
46
|
+
version_requirements: *70269586795620
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rb-fsevent
|
49
|
-
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: *
|
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:
|