From 1584e50483778ec115b8930e7dc8205931e61214 Mon Sep 17 00:00:00 2001 From: Will Charczuk Date: Sun, 12 Feb 2017 09:10:21 -0800 Subject: [PATCH] deferring creating market open times. --- date.go | 26 ++++++++++++-------------- date_test.go | 24 ++++++++++++------------ market_hours_range.go | 4 ++-- market_hours_range_test.go | 16 ++++++++-------- sequence_test.go | 4 ++-- 5 files changed, 36 insertions(+), 38 deletions(-) diff --git a/date.go b/date.go index 49e7c9e..097ec58 100644 --- a/date.go +++ b/date.go @@ -50,25 +50,23 @@ var ( _eastern *time.Location ) -var ( - // NYSEOpen is when the NYSE opens. - NYSEOpen = Date.Time(9, 30, 0, 0, Date.Eastern()) +// NYSEOpen is when the NYSE opens. +func NYSEOpen() time.Time { return Date.Time(9, 30, 0, 0, Date.Eastern()) } - // NYSEClose is when the NYSE closes. - NYSEClose = Date.Time(16, 0, 0, 0, Date.Eastern()) +// NYSEClose is when the NYSE closes. +func NYSEClose() time.Time { return Date.Time(16, 0, 0, 0, Date.Eastern()) } - // NASDAQOpen is when NASDAQ opens. - NASDAQOpen = Date.Time(9, 30, 0, 0, Date.Eastern()) +// NASDAQOpen is when NASDAQ opens. +func NASDAQOpen() time.Time { return Date.Time(9, 30, 0, 0, Date.Eastern()) } - // NASDAQClose is when NASDAQ closes. - NASDAQClose = Date.Time(16, 0, 0, 0, Date.Eastern()) +// NASDAQClose is when NASDAQ closes. +func NASDAQClose() time.Time { return Date.Time(16, 0, 0, 0, Date.Eastern()) } - // NYSEArcaOpen is when NYSEARCA opens. - NYSEArcaOpen = Date.Time(4, 0, 0, 0, Date.Eastern()) +// NYSEArcaOpen is when NYSEARCA opens. +func NYSEArcaOpen() time.Time { return Date.Time(4, 0, 0, 0, Date.Eastern()) } - // NYSEArcaClose is when NYSEARCA closes. - NYSEArcaClose = Date.Time(20, 0, 0, 0, Date.Eastern()) -) +// NYSEArcaClose is when NYSEARCA closes. +func NYSEArcaClose() time.Time { return Date.Time(20, 0, 0, 0, Date.Eastern()) } // HolidayProvider is a function that returns if a given time falls on a holiday. type HolidayProvider func(time.Time) bool diff --git a/date_test.go b/date_test.go index 70194f7..63164bb 100644 --- a/date_test.go +++ b/date_test.go @@ -97,10 +97,10 @@ func TestNextMarketOpen(t *testing.T) { weekend := time.Date(2016, 07, 23, 9, 31, 0, 0, Date.Eastern()) - assert.True(todayOpen.Equal(Date.NextMarketOpen(beforeOpen, NYSEOpen, Date.IsNYSEHoliday))) - assert.True(tomorrowOpen.Equal(Date.NextMarketOpen(afterOpen, NYSEOpen, Date.IsNYSEHoliday))) - assert.True(mondayOpen.Equal(Date.NextMarketOpen(afterFriday, NYSEOpen, Date.IsNYSEHoliday))) - assert.True(mondayOpen.Equal(Date.NextMarketOpen(weekend, NYSEOpen, Date.IsNYSEHoliday))) + assert.True(todayOpen.Equal(Date.NextMarketOpen(beforeOpen, NYSEOpen(), Date.IsNYSEHoliday))) + assert.True(tomorrowOpen.Equal(Date.NextMarketOpen(afterOpen, NYSEOpen(), Date.IsNYSEHoliday))) + assert.True(mondayOpen.Equal(Date.NextMarketOpen(afterFriday, NYSEOpen(), Date.IsNYSEHoliday))) + assert.True(mondayOpen.Equal(Date.NextMarketOpen(weekend, NYSEOpen(), Date.IsNYSEHoliday))) assert.Equal(Date.Eastern(), todayOpen.Location()) assert.Equal(Date.Eastern(), tomorrowOpen.Location()) @@ -109,7 +109,7 @@ func TestNextMarketOpen(t *testing.T) { testRegression := time.Date(2016, 07, 18, 16, 0, 0, 0, Date.Eastern()) shouldbe := time.Date(2016, 07, 19, 9, 30, 0, 0, Date.Eastern()) - assert.True(shouldbe.Equal(Date.NextMarketOpen(testRegression, NYSEOpen, Date.IsNYSEHoliday))) + assert.True(shouldbe.Equal(Date.NextMarketOpen(testRegression, NYSEOpen(), Date.IsNYSEHoliday))) } func TestNextMarketClose(t *testing.T) { @@ -126,10 +126,10 @@ func TestNextMarketClose(t *testing.T) { weekend := time.Date(2016, 07, 23, 9, 31, 0, 0, Date.Eastern()) - assert.True(todayClose.Equal(Date.NextMarketClose(beforeClose, NYSEClose, Date.IsNYSEHoliday))) - assert.True(tomorrowClose.Equal(Date.NextMarketClose(afterClose, NYSEClose, Date.IsNYSEHoliday))) - assert.True(mondayClose.Equal(Date.NextMarketClose(afterFriday, NYSEClose, Date.IsNYSEHoliday))) - assert.True(mondayClose.Equal(Date.NextMarketClose(weekend, NYSEClose, Date.IsNYSEHoliday))) + assert.True(todayClose.Equal(Date.NextMarketClose(beforeClose, NYSEClose(), Date.IsNYSEHoliday))) + assert.True(tomorrowClose.Equal(Date.NextMarketClose(afterClose, NYSEClose(), Date.IsNYSEHoliday))) + assert.True(mondayClose.Equal(Date.NextMarketClose(afterFriday, NYSEClose(), Date.IsNYSEHoliday))) + assert.True(mondayClose.Equal(Date.NextMarketClose(weekend, NYSEClose(), Date.IsNYSEHoliday))) assert.Equal(Date.Eastern(), todayClose.Location()) assert.Equal(Date.Eastern(), tomorrowClose.Location()) @@ -144,7 +144,7 @@ func TestCalculateMarketSecondsBetween(t *testing.T) { shouldbe := 5 * 6.5 * 60 * 60 - assert.Equal(shouldbe, Date.CalculateMarketSecondsBetween(start, end, NYSEOpen, NYSEClose, Date.IsNYSEHoliday)) + assert.Equal(shouldbe, Date.CalculateMarketSecondsBetween(start, end, NYSEOpen(), NYSEClose(), Date.IsNYSEHoliday)) } func TestCalculateMarketSecondsBetween1D(t *testing.T) { @@ -155,7 +155,7 @@ func TestCalculateMarketSecondsBetween1D(t *testing.T) { shouldbe := 6 * 60 * 60 - assert.Equal(shouldbe, Date.CalculateMarketSecondsBetween(start, end, NYSEOpen, NYSEClose, Date.IsNYSEHoliday)) + assert.Equal(shouldbe, Date.CalculateMarketSecondsBetween(start, end, NYSEOpen(), NYSEClose(), Date.IsNYSEHoliday)) } func TestCalculateMarketSecondsBetweenLTM(t *testing.T) { @@ -165,7 +165,7 @@ func TestCalculateMarketSecondsBetweenLTM(t *testing.T) { end := time.Date(2016, 07, 01, 9, 30, 0, 0, Date.Eastern()) shouldbe := 253 * 6.5 * 60 * 60 //253 full market days since this date last year. - assert.Equal(shouldbe, Date.CalculateMarketSecondsBetween(start, end, NYSEOpen, NYSEClose, Date.IsNYSEHoliday)) + assert.Equal(shouldbe, Date.CalculateMarketSecondsBetween(start, end, NYSEOpen(), NYSEClose(), Date.IsNYSEHoliday)) } func TestDateNextHour(t *testing.T) { diff --git a/market_hours_range.go b/market_hours_range.go index 31af566..875094a 100644 --- a/market_hours_range.go +++ b/market_hours_range.go @@ -96,7 +96,7 @@ func (mhr MarketHoursRange) GetHolidayProvider() HolidayProvider { // GetMarketOpen returns the market open time. func (mhr MarketHoursRange) GetMarketOpen() time.Time { if mhr.MarketOpen.IsZero() { - return NYSEOpen + return NYSEOpen() } return mhr.MarketOpen } @@ -104,7 +104,7 @@ func (mhr MarketHoursRange) GetMarketOpen() time.Time { // GetMarketClose returns the market close time. func (mhr MarketHoursRange) GetMarketClose() time.Time { if mhr.MarketClose.IsZero() { - return NYSEClose + return NYSEClose() } return mhr.MarketClose } diff --git a/market_hours_range_test.go b/market_hours_range_test.go index 45458c4..1cdf8cc 100644 --- a/market_hours_range_test.go +++ b/market_hours_range_test.go @@ -13,8 +13,8 @@ func TestMarketHoursRangeGetDelta(t *testing.T) { r := &MarketHoursRange{ Min: time.Date(2016, 07, 19, 9, 30, 0, 0, Date.Eastern()), Max: time.Date(2016, 07, 22, 16, 00, 0, 0, Date.Eastern()), - MarketOpen: NYSEOpen, - MarketClose: NYSEClose, + MarketOpen: NYSEOpen(), + MarketClose: NYSEClose(), HolidayProvider: Date.IsNYSEHoliday, } @@ -27,8 +27,8 @@ func TestMarketHoursRangeTranslate(t *testing.T) { r := &MarketHoursRange{ Min: time.Date(2016, 07, 18, 9, 30, 0, 0, Date.Eastern()), Max: time.Date(2016, 07, 22, 16, 00, 0, 0, Date.Eastern()), - MarketOpen: NYSEOpen, - MarketClose: NYSEClose, + MarketOpen: NYSEOpen(), + MarketClose: NYSEClose(), HolidayProvider: Date.IsNYSEHoliday, Domain: 1000, } @@ -56,10 +56,10 @@ func TestMarketHoursRangeGetTicks(t *testing.T) { } ra := &MarketHoursRange{ - Min: Date.On(NYSEOpen, Date.Date(2016, 07, 18, Date.Eastern())), - Max: Date.On(NYSEClose, Date.Date(2016, 07, 22, Date.Eastern())), - MarketOpen: NYSEOpen, - MarketClose: NYSEClose, + Min: Date.On(NYSEOpen(), Date.Date(2016, 07, 18, Date.Eastern())), + Max: Date.On(NYSEClose(), Date.Date(2016, 07, 22, Date.Eastern())), + MarketOpen: NYSEOpen(), + MarketClose: NYSEClose(), HolidayProvider: Date.IsNYSEHoliday, Domain: 1024, } diff --git a/sequence_test.go b/sequence_test.go index 71f9cfb..32f733e 100644 --- a/sequence_test.go +++ b/sequence_test.go @@ -21,7 +21,7 @@ func TestSequenceMarketHours(t *testing.T) { assert := assert.New(t) today := time.Date(2016, 07, 01, 12, 0, 0, 0, Date.Eastern()) - mh := Sequence.MarketHours(today, today, NYSEOpen, NYSEClose, Date.IsNYSEHoliday) + mh := Sequence.MarketHours(today, today, NYSEOpen(), NYSEClose(), Date.IsNYSEHoliday) assert.Len(mh, 8) assert.Equal(Date.Eastern(), mh[0].Location()) } @@ -29,7 +29,7 @@ func TestSequenceMarketHours(t *testing.T) { func TestSequenceMarketQuarters(t *testing.T) { assert := assert.New(t) today := time.Date(2016, 07, 01, 12, 0, 0, 0, Date.Eastern()) - mh := Sequence.MarketHourQuarters(today, today, NYSEOpen, NYSEClose, Date.IsNYSEHoliday) + mh := Sequence.MarketHourQuarters(today, today, NYSEOpen(), NYSEClose(), Date.IsNYSEHoliday) assert.Len(mh, 4) assert.Equal(9, mh[0].Hour()) assert.Equal(30, mh[0].Minute())