finexclub 0.5.1 → 0.5.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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.1
1
+ 0.5.2
data/finexclub.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{finexclub}
8
- s.version = "0.5.1"
8
+ s.version = "0.5.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Alex Levin"]
@@ -27,12 +27,19 @@ module Finexclub
27
27
  def self.build_new(core, symbol, tf, time)
28
28
  time = time.is_a?(Time) ? time : Time.at(time).utc
29
29
 
30
+ delta = self.timeframe_delta(tf)
31
+ starts = Time.utc(time.year, time.month, time.day, (time.hour/delta)*delta, 0)
32
+ expires = Chronic.parse("#{delta} hours from now", :now => starts)
33
+
34
+ #c.starts = Time.utc(time.year, time.month, time.day, time.hour, 0).to_i
35
+ #c.expires = c.starts + 1*60*60
36
+
30
37
  c = Chart.new(core)
31
38
  c.updated= time.to_i
32
39
  c.symbol= symbol
33
40
  c.timeframe = tf
34
- c.starts = Time.utc(time.year, time.month, time.day, time.hour, 0).to_i
35
- c.expires = c.starts + 1*60*60
41
+ c.starts = starts.to_i
42
+ c.expires = expires.to_i
36
43
  c
37
44
  end
38
45
 
@@ -66,5 +73,14 @@ module Finexclub
66
73
  indicator_handler :zeta, Finexclub::Signals::Zeta
67
74
  indicator_handler :octopus, Finexclub::Signals::Octopus
68
75
  indicator_handler :prognosis, Finexclub::Signals::Prognosis
76
+
77
+ def self.timeframe_delta(tf)
78
+ case tf
79
+ when 'h1', :h1 then 1
80
+ when 'h4', :h4 then 4
81
+ when 'd1', :d1 then 24
82
+ end
83
+ end
84
+
69
85
  end
70
86
  end
@@ -88,22 +88,59 @@ describe 'Finexclub::Chart' do
88
88
  end
89
89
 
90
90
  describe 'Chart.build_new(symbol, tf, time)' do
91
- before do
92
- @chart = Finexclub::Chart.build_new(@core, 'eurusd', 'h1', Time.utc(2010, 12, 27, 11, 30).to_i)
93
- end
91
+ describe 'h1 timeframe' do
92
+ it 'should return valid new (unsaved) chart instance' do
93
+ chart = Finexclub::Chart.build_new(@core, 'eurusd', 'h1', Time.utc(2010, 12, 27, 11, 30).to_i)
94
+ chart._id.should == nil
95
+ chart.symbol.should == 'eurusd'
96
+ chart.timeframe.should == 'h1'
97
+ chart.starts.should == Time.utc(2010, 12, 27, 11, 0).to_i
98
+ chart.expires.should == Time.utc(2010, 12, 27, 12, 0).to_i
99
+ chart.updated.should == Time.utc(2010, 12, 27, 11, 30).to_i
100
+ chart.indicators.should == {}
101
+ end
94
102
 
95
- it 'should return valid new (unsaved) chart instance' do
96
- @chart._id.should == nil
97
- @chart.symbol.should == 'eurusd'
98
- @chart.timeframe.should == 'h1'
99
- @chart.starts.should == Time.utc(2010, 12, 27, 11, 0).to_i
100
- @chart.expires.should == Time.utc(2010, 12, 27, 12, 0).to_i
101
- @chart.updated.should == Time.utc(2010, 12, 27, 11, 30).to_i
102
- @chart.indicators.should == {}
103
+ it 'should build valid chart given time as Time object' do
104
+ Finexclub::Chart.build_new(@core, 'eurusd', 'h1', Time.utc(2010, 12, 27, 11, 30)).starts.should == Time.utc(2010, 12, 27, 11, 0).to_i
105
+ end
103
106
  end
104
107
 
105
- it 'should build valid chart given time as Time object' do
106
- Finexclub::Chart.build_new(@core, 'eurusd', 'h1', Time.utc(2010, 12, 27, 11, 30)).starts.should == Time.utc(2010, 12, 27, 11, 0).to_i
108
+ {
109
+ :h1 => {
110
+ [2010, 12, 27, 00, 00] => [[2010, 12, 27, 00, 00], [2010, 12, 27, 01, 00]],
111
+ [2010, 12, 27, 03, 07] => [[2010, 12, 27, 03, 00], [2010, 12, 27, 04, 00]],
112
+ [2010, 12, 27, 16, 37] => [[2010, 12, 27, 16, 00], [2010, 12, 27, 17, 00]],
113
+ [2010, 12, 27, 23, 59] => [[2010, 12, 27, 23, 00], [2010, 12, 28, 00, 00]]
114
+ },
115
+ :h4 => {
116
+ [2010, 12, 27, 00, 00] => [[2010, 12, 27, 00, 00], [2010, 12, 27, 04, 00]],
117
+ [2010, 12, 27, 03, 07] => [[2010, 12, 27, 00, 00], [2010, 12, 27, 04, 00]],
118
+ [2010, 12, 27, 16, 37] => [[2010, 12, 27, 16, 00], [2010, 12, 27, 20, 00]],
119
+ [2010, 12, 27, 23, 59] => [[2010, 12, 27, 20, 00], [2010, 12, 28, 00, 00]]
120
+ },
121
+ :d1 => {
122
+ [2010, 12, 27, 00, 00] => [[2010, 12, 27, 00, 00], [2010, 12, 28, 00, 00]],
123
+ [2010, 12, 27, 03, 07] => [[2010, 12, 27, 00, 00], [2010, 12, 28, 00, 00]],
124
+ [2010, 12, 27, 16, 37] => [[2010, 12, 27, 00, 00], [2010, 12, 28, 00, 00]],
125
+ [2010, 12, 27, 23, 59] => [[2010, 12, 27, 00, 00], [2010, 12, 28, 00, 00]]
126
+ }
127
+ }.each do |tf, time_table|
128
+ describe "#{tf} timeframe" do
129
+ time_table.each do |initial_time, tf_boundary|
130
+ time = Time.utc(*initial_time)
131
+ starts = Time.utc(*tf_boundary.first)
132
+ expires = Time.utc(*tf_boundary.last)
133
+
134
+ describe "chart at #{time}" do
135
+ it "should start at #{starts}, expire at #{expires}" do
136
+ chart = Finexclub::Chart.build_new(@core, 'eurusd', tf, time)
137
+ chart.starts.should == starts.to_i
138
+ chart.expires.should == expires.to_i
139
+ end
140
+ end
141
+ end
142
+
143
+ end
107
144
  end
108
145
 
109
146
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 5
8
- - 1
9
- version: 0.5.1
8
+ - 2
9
+ version: 0.5.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Alex Levin