deferring creating market open times.

This commit is contained in:
Will Charczuk 2017-02-12 09:10:21 -08:00
parent b9f2a35a5d
commit 1584e50483
5 changed files with 36 additions and 38 deletions

14
date.go
View file

@ -50,25 +50,23 @@ var (
_eastern *time.Location
)
var (
// NYSEOpen is when the NYSE opens.
NYSEOpen = Date.Time(9, 30, 0, 0, Date.Eastern())
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())
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())
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())
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())
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())
)
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

View file

@ -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) {

View file

@ -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
}

View file

@ -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,
}

View file

@ -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())