From 156b0ba80bc2e59f7c9bf3fb3fc828e01bee43a9 Mon Sep 17 00:00:00 2001 From: Onur Cinar Date: Sat, 18 Jan 2025 22:09:12 +0000 Subject: [PATCH] Added support for configurng the CSV file. --- asset/README.md | 22 +++--- asset/file_system_repository.go | 14 ++-- asset/file_system_repository_test.go | 2 +- asset/snapshot.go | 2 +- asset/snapshot_test.go | 2 +- helper/README.md | 72 ++++++++++++++----- helper/csv.go | 54 +++++++++++--- helper/csv_test.go | 68 ++++++++++++------ helper/report_test.go | 4 +- momentum/awesome_oscillator_test.go | 2 +- momentum/chaikin_oscillator_test.go | 2 +- momentum/ichimoku_cloud_test.go | 2 +- momentum/ppo_test.go | 2 +- momentum/pvo_test.go | 2 +- momentum/qstick_test.go | 2 +- momentum/rsi_test.go | 2 +- momentum/stochastic_oscillator_test.go | 2 +- momentum/stochastic_rsi_test.go | 2 +- momentum/williams_r_test.go | 2 +- strategy/and_strategy_test.go | 6 +- strategy/buy_and_hold_strategy_test.go | 6 +- strategy/compound/macd_rsi_strategy_test.go | 6 +- strategy/decorator/inverse_strategy_test.go | 6 +- strategy/decorator/no_loss_strategy_test.go | 6 +- strategy/decorator/stop_loss_strategy_test.go | 6 +- strategy/majority_strategy_test.go | 6 +- .../awesome_oscillator_strategy_test.go | 6 +- strategy/momentum/rsi_strategy_test.go | 6 +- .../momentum/stochastic_rsi_strategy_test.go | 6 +- strategy/momentum/triple_rsi_strategy_test.go | 6 +- strategy/or_strategy_test.go | 6 +- strategy/split_strategy_test.go | 6 +- strategy/trend/alligator_strategy_test.go | 6 +- strategy/trend/apo_strategy_test.go | 6 +- strategy/trend/aroon_strategy_test.go | 6 +- strategy/trend/bop_strategy_test.go | 6 +- strategy/trend/cci_strategy_test.go | 6 +- strategy/trend/dema_strategy_test.go | 6 +- strategy/trend/envelope_strategy_test.go | 6 +- strategy/trend/golden_cross_strategy_test.go | 6 +- strategy/trend/kama_strategy_test.go | 6 +- strategy/trend/kdj_strategy_test.go | 6 +- strategy/trend/macd_strategy_test.go | 6 +- strategy/trend/qstick_strategy_test.go | 6 +- strategy/trend/smma_strategy_test.go | 6 +- strategy/trend/trima_strategy_test.go | 6 +- ..._moving_average_crossover_strategy_test.go | 6 +- strategy/trend/trix_strategy_test.go | 6 +- strategy/trend/tsi_strategy_test.go | 6 +- strategy/trend/vwma_strategy_test.go | 6 +- .../trend/weighted_close_strategy_test.go | 6 +- .../bollinger_bands_strategy_test.go | 6 +- .../volatility/super_trend_strategy_test.go | 6 +- .../chaikin_money_flow_strategy_test.go | 6 +- .../volume/ease_of_movement_strategy_test.go | 6 +- strategy/volume/force_index_strategy_test.go | 6 +- .../volume/money_flow_index_strategy_test.go | 6 +- .../negative_volume_index_strategy_test.go | 6 +- .../weighted_average_price_strategy_test.go | 6 +- trend/apo_test.go | 2 +- trend/aroon_test.go | 2 +- trend/bop_test.go | 2 +- trend/cci_test.go | 2 +- trend/envelope_test.go | 4 +- trend/hma_test.go | 2 +- trend/kama_test.go | 2 +- trend/kdj_test.go | 2 +- trend/macd_test.go | 2 +- trend/mass_index_test.go | 2 +- trend/mlr_test.go | 2 +- trend/mls_test.go | 2 +- trend/rma_test.go | 2 +- trend/smma_test.go | 2 +- trend/tema_test.go | 2 +- trend/trima_test.go | 4 +- trend/trix_test.go | 2 +- trend/tsi_test.go | 2 +- trend/typical_price_test.go | 2 +- trend/vwma_test.go | 2 +- trend/weighted_close_test.go | 2 +- trend/wma_test.go | 2 +- volatility/acceleration_bands_test.go | 2 +- volatility/atr_test.go | 2 +- volatility/bollinger_band_width_test.go | 2 +- volatility/bollinger_bands_test.go | 2 +- volatility/chandelier_exit_test.go | 2 +- volatility/donchian_channel_test.go | 2 +- volatility/keltner_channel_test.go | 2 +- volatility/moving_std_test.go | 2 +- volatility/percent_b_test.go | 2 +- volatility/po_test.go | 2 +- volatility/super_trend_test.go | 2 +- volatility/ulcer_index_test.go | 2 +- volume/ad_test.go | 2 +- volume/cmf_test.go | 2 +- volume/emv_test.go | 2 +- volume/fi_test.go | 2 +- volume/mfi_test.go | 2 +- volume/mfm_test.go | 2 +- volume/mfv_test.go | 2 +- volume/nvi_test.go | 2 +- volume/obv_test.go | 2 +- volume/vpt_test.go | 2 +- volume/vwap_test.go | 2 +- 104 files changed, 348 insertions(+), 246 deletions(-) diff --git a/asset/README.md b/asset/README.md index 7f6025c..a423ca7 100644 --- a/asset/README.md +++ b/asset/README.md @@ -34,7 +34,7 @@ The information provided on this project is strictly for informational purposes - [func SnapshotsAsOpenings\(snapshots \<\-chan \*Snapshot\) \<\-chan float64](<#SnapshotsAsOpenings>) - [func SnapshotsAsVolumes\(snapshots \<\-chan \*Snapshot\) \<\-chan float64](<#SnapshotsAsVolumes>) - [type FileSystemRepository](<#FileSystemRepository>) - - [func NewFileSystemRepository\(base string\) \*FileSystemRepository](<#NewFileSystemRepository>) + - [func NewFileSystemRepository\(base string, csvOptions ...helper.CsvOption\[Snapshot\]\) \*FileSystemRepository](<#NewFileSystemRepository>) - [func \(r \*FileSystemRepository\) Append\(name string, snapshots \<\-chan \*Snapshot\) error](<#FileSystemRepository.Append>) - [func \(r \*FileSystemRepository\) Assets\(\) \(\[\]string, error\)](<#FileSystemRepository.Assets>) - [func \(r \*FileSystemRepository\) Get\(name string\) \(\<\-chan \*Snapshot, error\)](<#FileSystemRepository.Get>) @@ -183,7 +183,7 @@ func SnapshotsAsVolumes(snapshots <-chan *Snapshot) <-chan float64 SnapshotsAsVolumes extracts the volume field from each snapshot in the provided channel and returns a new channel containing only those volume values.The original snapshots channel can no longer be directly used afterward. -## type [FileSystemRepository]() +## type [FileSystemRepository]() FileSystemRepository stores and retrieves asset snapshots using the local file system. @@ -194,16 +194,16 @@ type FileSystemRepository struct { ``` -### func [NewFileSystemRepository]() +### func [NewFileSystemRepository]() ```go -func NewFileSystemRepository(base string) *FileSystemRepository +func NewFileSystemRepository(base string, csvOptions ...helper.CsvOption[Snapshot]) *FileSystemRepository ``` -NewFileSystemRepository initializes a file system repository with the given base directory. +NewFileSystemRepository initializes a file system repository with the given base directory and the CSV options. -### func \(\*FileSystemRepository\) [Append]() +### func \(\*FileSystemRepository\) [Append]() ```go func (r *FileSystemRepository) Append(name string, snapshots <-chan *Snapshot) error @@ -212,7 +212,7 @@ func (r *FileSystemRepository) Append(name string, snapshots <-chan *Snapshot) e Append adds the given snapshows to the asset with the given name. -### func \(\*FileSystemRepository\) [Assets]() +### func \(\*FileSystemRepository\) [Assets]() ```go func (r *FileSystemRepository) Assets() ([]string, error) @@ -221,7 +221,7 @@ func (r *FileSystemRepository) Assets() ([]string, error) Assets returns the names of all assets in the repository. -### func \(\*FileSystemRepository\) [Get]() +### func \(\*FileSystemRepository\) [Get]() ```go func (r *FileSystemRepository) Get(name string) (<-chan *Snapshot, error) @@ -230,7 +230,7 @@ func (r *FileSystemRepository) Get(name string) (<-chan *Snapshot, error) Get attempts to return a channel of snapshots for the asset with the given name. -### func \(\*FileSystemRepository\) [GetSince]() +### func \(\*FileSystemRepository\) [GetSince]() ```go func (r *FileSystemRepository) GetSince(name string, date time.Time) (<-chan *Snapshot, error) @@ -239,7 +239,7 @@ func (r *FileSystemRepository) GetSince(name string, date time.Time) (<-chan *Sn GetSince attempts to return a channel of snapshots for the asset with the given name since the given date. -### func \(\*FileSystemRepository\) [LastDate]() +### func \(\*FileSystemRepository\) [LastDate]() ```go func (r *FileSystemRepository) LastDate(name string) (time.Time, error) @@ -476,7 +476,7 @@ Snapshot captures a single observation of an asset's price at a specific moment. ```go type Snapshot struct { // Date represents the specific timestamp. - Date time.Time `format:"2006-01-02"` + Date time.Time // Open represents the opening price for the // snapshot period. diff --git a/asset/file_system_repository.go b/asset/file_system_repository.go index 2142541..5ff05a7 100644 --- a/asset/file_system_repository.go +++ b/asset/file_system_repository.go @@ -20,13 +20,17 @@ import ( type FileSystemRepository struct { // base is the root directory where asset snapshots are stored. base string + + // csvOptions are the CSV options used for reading and writing snapshots. + csvOptions []helper.CsvOption[Snapshot] } // NewFileSystemRepository initializes a file system repository with -// the given base directory. -func NewFileSystemRepository(base string) *FileSystemRepository { +// the given base directory and the CSV options. +func NewFileSystemRepository(base string, csvOptions ...helper.CsvOption[Snapshot]) *FileSystemRepository { return &FileSystemRepository{ - base: base, + base: base, + csvOptions: csvOptions, } } @@ -54,7 +58,7 @@ func (r *FileSystemRepository) Assets() ([]string, error) { // Get attempts to return a channel of snapshots for the asset with the given name. func (r *FileSystemRepository) Get(name string) (<-chan *Snapshot, error) { - return helper.ReadFromCsvFile[Snapshot](r.getCsvFileName(name), true) + return helper.ReadFromCsvFile[Snapshot](r.getCsvFileName(name), r.csvOptions...) } // GetSince attempts to return a channel of snapshots for the asset with the given name since the given date. @@ -90,7 +94,7 @@ func (r *FileSystemRepository) LastDate(name string) (time.Time, error) { // Append adds the given snapshows to the asset with the given name. func (r *FileSystemRepository) Append(name string, snapshots <-chan *Snapshot) error { - return helper.AppendOrWriteToCsvFile(r.getCsvFileName(name), true, snapshots) + return helper.AppendOrWriteToCsvFile(r.getCsvFileName(name), snapshots, r.csvOptions...) } // getCsvFileName gets the CSV file name for the given asset name. diff --git a/asset/file_system_repository_test.go b/asset/file_system_repository_test.go index a8f5f5a..b6eac86 100644 --- a/asset/file_system_repository_test.go +++ b/asset/file_system_repository_test.go @@ -69,7 +69,7 @@ func TestFileSystemRepositoryGetSince(t *testing.T) { t.Fatal(err) } - expected, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/since.csv", true) + expected, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/since.csv") if err != nil { t.Fatal(err) } diff --git a/asset/snapshot.go b/asset/snapshot.go index 30fa79e..5a11a56 100644 --- a/asset/snapshot.go +++ b/asset/snapshot.go @@ -14,7 +14,7 @@ import ( // at a specific moment. type Snapshot struct { // Date represents the specific timestamp. - Date time.Time `format:"2006-01-02"` + Date time.Time // Open represents the opening price for the // snapshot period. diff --git a/asset/snapshot_test.go b/asset/snapshot_test.go index afc9650..42a09d1 100644 --- a/asset/snapshot_test.go +++ b/asset/snapshot_test.go @@ -12,7 +12,7 @@ import ( ) func TestSnapshotsAs(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/helper/README.md b/helper/README.md index 0e6ff70..e426892 100644 --- a/helper/README.md +++ b/helper/README.md @@ -27,7 +27,7 @@ The information provided on this project is strictly for informational purposes - [Constants](<#constants>) - [func Abs\[T Number\]\(c \<\-chan T\) \<\-chan T](<#Abs>) - [func Add\[T Number\]\(ac, bc \<\-chan T\) \<\-chan T](<#Add>) -- [func AppendOrWriteToCsvFile\[T any\]\(fileName string, hasHeader bool, rows \<\-chan \*T\) error](<#AppendOrWriteToCsvFile>) +- [func AppendOrWriteToCsvFile\[T any\]\(fileName string, rows \<\-chan \*T, options ...CsvOption\[T\]\) error](<#AppendOrWriteToCsvFile>) - [func Apply\[T Number\]\(c \<\-chan T, f func\(T\) T\) \<\-chan T](<#Apply>) - [func Buffered\[T any\]\(c \<\-chan T, size int\) \<\-chan T](<#Buffered>) - [func ChanToJSON\[T any\]\(c \<\-chan T, w io.Writer\) error](<#ChanToJSON>) @@ -69,7 +69,7 @@ The information provided on this project is strictly for informational purposes - [func Operate3\[A any, B any, C any, R any\]\(ac \<\-chan A, bc \<\-chan B, cc \<\-chan C, o func\(A, B, C\) R\) \<\-chan R](<#Operate3>) - [func Pipe\[T any\]\(f \<\-chan T, t chan\<\- T\)](<#Pipe>) - [func Pow\[T Number\]\(c \<\-chan T, y T\) \<\-chan T](<#Pow>) -- [func ReadFromCsvFile\[T any\]\(fileName string, hasHeader bool\) \(\<\-chan \*T, error\)](<#ReadFromCsvFile>) +- [func ReadFromCsvFile\[T any\]\(fileName string, options ...CsvOption\[T\]\) \(\<\-chan \*T, error\)](<#ReadFromCsvFile>) - [func Remove\(t \*testing.T, name string\)](<#Remove>) - [func RemoveAll\(t \*testing.T, path string\)](<#RemoveAll>) - [func RoundDigit\[T Number\]\(n T, d int\) T](<#RoundDigit>) @@ -93,11 +93,15 @@ The information provided on this project is strictly for informational purposes - [func \(b \*Bst\[T\]\) Remove\(value T\) bool](<#Bst[T].Remove>) - [type BstNode](<#BstNode>) - [type Csv](<#Csv>) - - [func NewCsv\[T any\]\(hasHeader bool\) \(\*Csv\[T\], error\)](<#NewCsv>) + - [func NewCsv\[T any\]\(options ...CsvOption\[T\]\) \(\*Csv\[T\], error\)](<#NewCsv>) - [func \(c \*Csv\[T\]\) AppendToFile\(fileName string, rows \<\-chan \*T\) error](<#Csv[T].AppendToFile>) - [func \(c \*Csv\[T\]\) ReadFromFile\(fileName string\) \(\<\-chan \*T, error\)](<#Csv[T].ReadFromFile>) - [func \(c \*Csv\[T\]\) ReadFromReader\(reader io.Reader\) \<\-chan \*T](<#Csv[T].ReadFromReader>) - [func \(c \*Csv\[T\]\) WriteToFile\(fileName string, rows \<\-chan \*T\) error](<#Csv[T].WriteToFile>) +- [type CsvOption](<#CsvOption>) + - [func WithCsvDefaultDateTimeFormat\[T any\]\(format string\) CsvOption\[T\]](<#WithCsvDefaultDateTimeFormat>) + - [func WithCsvLogger\[T any\]\(logger \*slog.Logger\) CsvOption\[T\]](<#WithCsvLogger>) + - [func WithoutCsvHeader\[T any\]\(\) CsvOption\[T\]](<#WithoutCsvHeader>) - [type Float](<#Float>) - [type Integer](<#Integer>) - [type Number](<#Number>) @@ -132,7 +136,7 @@ const ( CsvFormatTag = "format" // DefaultDateTimeFormat denotes the default format of a date and time column. - DefaultDateTimeFormat = "2006-01-02 15:04:05" + DefaultDateTimeFormat = "2006-01-02" ) ``` @@ -182,10 +186,10 @@ fmt.Println(actual) // [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] ``` -## func [AppendOrWriteToCsvFile]() +## func [AppendOrWriteToCsvFile]() ```go -func AppendOrWriteToCsvFile[T any](fileName string, hasHeader bool, rows <-chan *T) error +func AppendOrWriteToCsvFile[T any](fileName string, rows <-chan *T, options ...CsvOption[T]) error ``` AppendOrWriteToCsvFile writes the provided rows of data to the specified file, appending to the existing file if it exists or creating a new one if it doesn't. In append mode, the function assumes that the existing file's column order matches the field order of the given row struct to ensure consistent data structure. @@ -805,10 +809,10 @@ fmt.Println(helper.ChanToSlice(squared)) // [4, 9, 25, 100] ``` -## func [ReadFromCsvFile]() +## func [ReadFromCsvFile]() ```go -func ReadFromCsvFile[T any](fileName string, hasHeader bool) (<-chan *T, error) +func ReadFromCsvFile[T any](fileName string, options ...CsvOption[T]) (<-chan *T, error) ``` ReadFromCsvFile creates a CSV instance, parses CSV data from the provided filename, maps the data to corresponding struct fields, and delivers it through the channel. @@ -1095,7 +1099,7 @@ type BstNode[T Number] struct { ``` -## type [Csv]() +## type [Csv]() Csv represents the configuration for CSV reader and writer. @@ -1109,16 +1113,16 @@ type Csv[T any] struct { ``` -### func [NewCsv]() +### func [NewCsv]() ```go -func NewCsv[T any](hasHeader bool) (*Csv[T], error) +func NewCsv[T any](options ...CsvOption[T]) (*Csv[T], error) ``` -NewCsv function initializes a new CSV instance. The parameter hasHeader indicates whether the CSV contains a header row. +NewCsv creates a new CSV instance with the provided options. -### func \(\*Csv\[T\]\) [AppendToFile]() +### func \(\*Csv\[T\]\) [AppendToFile]() ```go func (c *Csv[T]) AppendToFile(fileName string, rows <-chan *T) error @@ -1127,7 +1131,7 @@ func (c *Csv[T]) AppendToFile(fileName string, rows <-chan *T) error AppendToFile appends the provided rows of data to the end of the specified file, creating the file if it doesn't exist. In append mode, the function assumes that the existing file's column order matches the field order of the given row struct to ensure consistent data structure. -### func \(\*Csv\[T\]\) [ReadFromFile]() +### func \(\*Csv\[T\]\) [ReadFromFile]() ```go func (c *Csv[T]) ReadFromFile(fileName string) (<-chan *T, error) @@ -1136,7 +1140,7 @@ func (c *Csv[T]) ReadFromFile(fileName string) (<-chan *T, error) ReadFromFile parses the CSV data from the provided file name, maps the data to corresponding struct fields, and delivers the resulting rows through the channel. -### func \(\*Csv\[T\]\) [ReadFromReader]() +### func \(\*Csv\[T\]\) [ReadFromReader]() ```go func (c *Csv[T]) ReadFromReader(reader io.Reader) <-chan *T @@ -1145,7 +1149,7 @@ func (c *Csv[T]) ReadFromReader(reader io.Reader) <-chan *T ReadFromReader parses the CSV data from the provided reader, maps the data to corresponding struct fields, and delivers the resulting it through the channel. -### func \(\*Csv\[T\]\) [WriteToFile]() +### func \(\*Csv\[T\]\) [WriteToFile]() ```go func (c *Csv[T]) WriteToFile(fileName string, rows <-chan *T) error @@ -1153,6 +1157,42 @@ func (c *Csv[T]) WriteToFile(fileName string, rows <-chan *T) error WriteToFile creates a new file with the given name and writes the provided rows of data to it, overwriting any existing content. + +## type [CsvOption]() + +CsvOption represents a functional option for configuring the CSV instance. + +```go +type CsvOption[T any] func(*Csv[T]) +``` + + +### func [WithCsvDefaultDateTimeFormat]() + +```go +func WithCsvDefaultDateTimeFormat[T any](format string) CsvOption[T] +``` + +WithCsvDefaultDateTimeFormat sets the default date and time format for the CSV instance. + + +### func [WithCsvLogger]() + +```go +func WithCsvLogger[T any](logger *slog.Logger) CsvOption[T] +``` + +WithCsvLogger sets the logger for the CSV instance. + + +### func [WithoutCsvHeader]() + +```go +func WithoutCsvHeader[T any]() CsvOption[T] +``` + +WithoutCsvHeader disables the header row in the CSV. + ## type [Float]() diff --git a/helper/csv.go b/helper/csv.go index f37a181..4d17301 100644 --- a/helper/csv.go +++ b/helper/csv.go @@ -24,7 +24,7 @@ const ( CsvFormatTag = "format" // DefaultDateTimeFormat denotes the default format of a date and time column. - DefaultDateTimeFormat = "2006-01-02 15:04:05" + DefaultDateTimeFormat = "2006-01-02" ) // csvColumn represents the mapping between the CSV column and @@ -47,14 +47,46 @@ type Csv[T any] struct { // Logger is the slog logger instance. Logger *slog.Logger + + // defaultDateTimeFormat is the default format for date and time columns. + defaultDateTimeFormat string } -// NewCsv function initializes a new CSV instance. The parameter -// hasHeader indicates whether the CSV contains a header row. -func NewCsv[T any](hasHeader bool) (*Csv[T], error) { +// CsvOption represents a functional option for configuring the CSV instance. +type CsvOption[T any] func(*Csv[T]) + +// WithoutCsvHeader disables the header row in the CSV. +func WithoutCsvHeader[T any]() CsvOption[T] { + return func(c *Csv[T]) { + c.hasHeader = false + } +} + +// WithCsvLogger sets the logger for the CSV instance. +func WithCsvLogger[T any](logger *slog.Logger) CsvOption[T] { + return func(c *Csv[T]) { + c.Logger = logger + } +} + +// WithCsvDefaultDateTimeFormat sets the default date and time format for the CSV instance. +func WithCsvDefaultDateTimeFormat[T any](format string) CsvOption[T] { + return func(c *Csv[T]) { + c.defaultDateTimeFormat = format + } +} + +// NewCsv creates a new CSV instance with the provided options. +func NewCsv[T any](options ...CsvOption[T]) (*Csv[T], error) { c := &Csv[T]{ - hasHeader: hasHeader, - Logger: slog.Default(), + hasHeader: true, + Logger: slog.Default(), + defaultDateTimeFormat: DefaultDateTimeFormat, + } + + // Apply options to the CSV instance. + for _, option := range options { + option(c) } // Row type must be a pointer to struct. @@ -75,7 +107,7 @@ func NewCsv[T any](hasHeader bool) (*Csv[T], error) { format, ok := field.Tag.Lookup(CsvFormatTag) if !ok { - format = DefaultDateTimeFormat + format = c.defaultDateTimeFormat } c.columns[i] = csvColumn{ @@ -275,8 +307,8 @@ func (c *Csv[T]) writeHeaderToCsvWriter(csvWriter *csv.Writer) error { // ReadFromCsvFile creates a CSV instance, parses CSV data from the provided filename, // maps the data to corresponding struct fields, and delivers it through the channel. -func ReadFromCsvFile[T any](fileName string, hasHeader bool) (<-chan *T, error) { - c, err := NewCsv[T](hasHeader) +func ReadFromCsvFile[T any](fileName string, options ...CsvOption[T]) (<-chan *T, error) { + c, err := NewCsv[T](options...) if err != nil { return nil, err } @@ -288,8 +320,8 @@ func ReadFromCsvFile[T any](fileName string, hasHeader bool) (<-chan *T, error) // the existing file if it exists or creating a new one if it doesn't. In append mode, the // function assumes that the existing file's column order matches the field order of the // given row struct to ensure consistent data structure. -func AppendOrWriteToCsvFile[T any](fileName string, hasHeader bool, rows <-chan *T) error { - c, err := NewCsv[T](hasHeader) +func AppendOrWriteToCsvFile[T any](fileName string, rows <-chan *T, options ...CsvOption[T]) error { + c, err := NewCsv[T](options...) if err != nil { return err } diff --git a/helper/csv_test.go b/helper/csv_test.go index 612c188..2b64f92 100644 --- a/helper/csv_test.go +++ b/helper/csv_test.go @@ -8,6 +8,7 @@ import ( "fmt" "strings" "testing" + "time" "github.com/cinar/indicator/v2/helper" ) @@ -20,7 +21,7 @@ func TestCsv(t *testing.T) { reader := strings.NewReader("Date,Asset,Open,Close\n\"2023-11-26 00:00:00\",\"SP500\",10.2,30.4\n") - csv, err := helper.NewCsv[Row](true) + csv, err := helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -40,7 +41,7 @@ func TestCsvNoHeader(t *testing.T) { reader := strings.NewReader("10.2,30.4\n") - csv, err := helper.NewCsv[Row](false) + csv, err := helper.NewCsv[Row](helper.WithoutCsvHeader[Row]()) if err != nil { t.Fatal(err) } @@ -62,7 +63,7 @@ func TestCsvInvalidColumns(t *testing.T) { reader := strings.NewReader("1,2\n1\n") - csv, err := helper.NewCsv[Row](false) + csv, err := helper.NewCsv[Row](helper.WithoutCsvHeader[Row]()) if err != nil { t.Fatal(err) } @@ -86,7 +87,7 @@ func TestCsvMissingHeader(t *testing.T) { reader := strings.NewReader("") - csv, err := helper.NewCsv[Row](true) + csv, err := helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -105,7 +106,7 @@ func TestCsvInvalidField(t *testing.T) { reader := strings.NewReader("\"ABCD\",\"EFGH\"\n") - csv, err := helper.NewCsv[Row](false) + csv, err := helper.NewCsv[Row](helper.WithoutCsvHeader[Row]()) if err != nil { t.Fatal(err) } @@ -122,7 +123,7 @@ func TestCsvNoStruct(t *testing.T) { High float64 } - _, err := helper.NewCsv[*Row](true) + _, err := helper.NewCsv[*Row]() if err == nil { t.Fatal("expected error") } @@ -134,7 +135,7 @@ func TestCsvReadFromFile(t *testing.T) { High float64 } - csv, err := helper.NewCsv[Row](true) + csv, err := helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -157,7 +158,7 @@ func TestCsvReadFromMissingFile(t *testing.T) { High float64 } - csv, err := helper.NewCsv[Row](true) + csv, err := helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -174,7 +175,7 @@ func TestReadFromCsvFile(t *testing.T) { High float64 } - rows, err := helper.ReadFromCsvFile[Row]("testdata/with_header.csv", true) + rows, err := helper.ReadFromCsvFile[Row]("testdata/with_header.csv") if err != nil { t.Fatal(err) } @@ -192,7 +193,7 @@ func TestReadFromCsvFileNoStruct(t *testing.T) { High float64 } - _, err := helper.ReadFromCsvFile[*Row]("testdata/with_header.csv", true) + _, err := helper.ReadFromCsvFile[*Row]("testdata/with_header.csv") if err == nil { t.Fatal("expected error") } @@ -209,7 +210,7 @@ func TestCsvWriteToFile(t *testing.T) { {Close: 30, High: 40}, } - csv, err := helper.NewCsv[Row](true) + csv, err := helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -222,7 +223,7 @@ func TestCsvWriteToFile(t *testing.T) { t.Fatal(err) } - csv, err = helper.NewCsv[Row](true) + csv, err = helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -251,7 +252,7 @@ func TestCsvAppendToFile(t *testing.T) { {Close: 30, High: 40}, } - csv, err := helper.NewCsv[Row](true) + csv, err := helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -264,7 +265,7 @@ func TestCsvAppendToFile(t *testing.T) { t.Fatal(err) } - csv, err = helper.NewCsv[Row](true) + csv, err = helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -274,7 +275,7 @@ func TestCsvAppendToFile(t *testing.T) { t.Fatal(err) } - csv, err = helper.NewCsv[Row](true) + csv, err = helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -303,7 +304,7 @@ func TestCsvWriteToInvalidFile(t *testing.T) { {Close: 30, High: 40}, }) - csv, err := helper.NewCsv[Row](true) + csv, err := helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -327,7 +328,7 @@ func TestCsvWriteToFileInvalidField(t *testing.T) { {Close: 30, High: nil}, }) - csv, err := helper.NewCsv[Row](true) + csv, err := helper.NewCsv[Row]() if err != nil { t.Fatal(err) } @@ -355,17 +356,17 @@ func TestAppendOrWriteToCsvFile(t *testing.T) { fileName := "test_append_or_write_to_csv_file.csv" defer helper.Remove(t, fileName) - err := helper.AppendOrWriteToCsvFile(fileName, true, helper.SliceToChan(input[:1])) + err := helper.AppendOrWriteToCsvFile(fileName, helper.SliceToChan(input[:1])) if err != nil { t.Fatal(err) } - err = helper.AppendOrWriteToCsvFile(fileName, true, helper.SliceToChan(input[1:])) + err = helper.AppendOrWriteToCsvFile(fileName, helper.SliceToChan(input[1:])) if err != nil { t.Fatal(err) } - actual, err := helper.ReadFromCsvFile[Row](fileName, true) + actual, err := helper.ReadFromCsvFile[Row](fileName) if err != nil { t.Fatal(err) } @@ -386,8 +387,33 @@ func TestAppendOrWriteToCsvFileNoStruct(t *testing.T) { input := helper.SliceToChan([]**Row{}) - err := helper.AppendOrWriteToCsvFile[*Row]("test_append_or_write_to_csv_file_no_struct.csv", true, input) + err := helper.AppendOrWriteToCsvFile[*Row]("test_append_or_write_to_csv_file_no_struct.csv", input) if err == nil { t.Fatal("expected error") } } + +func TestCsvWithDefaultDateFormat(t *testing.T) { + type Row struct { + Date time.Time + Close float64 + High float64 + } + + reader := strings.NewReader("Date,Asset,Open,Close\n\"2023-11-26 01:02:03\",\"SP500\",10.2,30.4\n") + + csv, err := helper.NewCsv[Row]( + helper.WithCsvDefaultDateTimeFormat[Row]("2006-01-02 15:04:05"), + ) + if err != nil { + t.Fatal(err) + } + + row := <-csv.ReadFromReader(reader) + + expected := time.Date(2023, 11, 26, 1, 2, 3, 0, time.UTC) + + if !row.Date.Equal(expected) { + t.Fatalf("actual %v expected %v", row.Date, expected) + } +} diff --git a/helper/report_test.go b/helper/report_test.go index fc255fe..f7bd048 100644 --- a/helper/report_test.go +++ b/helper/report_test.go @@ -20,7 +20,7 @@ func TestReportWriteToFile(t *testing.T) { Annotation string } - input, err := helper.ReadFromCsvFile[Row]("testdata/report.csv", true) + input, err := helper.ReadFromCsvFile[Row]("testdata/report.csv") if err != nil { t.Fatal(err) } @@ -58,7 +58,7 @@ func TestReportWriteToFileFailed(t *testing.T) { Annotation string } - input, err := helper.ReadFromCsvFile[Row]("testdata/report.csv", true) + input, err := helper.ReadFromCsvFile[Row]("testdata/report.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/awesome_oscillator_test.go b/momentum/awesome_oscillator_test.go index aa9935a..0ff2f52 100644 --- a/momentum/awesome_oscillator_test.go +++ b/momentum/awesome_oscillator_test.go @@ -18,7 +18,7 @@ func TestAwesomeOscillator(t *testing.T) { Ao float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/awesome_oscillator.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/awesome_oscillator.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/chaikin_oscillator_test.go b/momentum/chaikin_oscillator_test.go index 270d502..aa323b1 100644 --- a/momentum/chaikin_oscillator_test.go +++ b/momentum/chaikin_oscillator_test.go @@ -21,7 +21,7 @@ func TestChaikinOscillator(t *testing.T) { Co float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/chaikin_oscillator.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/chaikin_oscillator.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/ichimoku_cloud_test.go b/momentum/ichimoku_cloud_test.go index 0223056..a9538c3 100644 --- a/momentum/ichimoku_cloud_test.go +++ b/momentum/ichimoku_cloud_test.go @@ -23,7 +23,7 @@ func TestIchimokuCloud(t *testing.T) { LaggingLine float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/ichimoku_cloud.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/ichimoku_cloud.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/ppo_test.go b/momentum/ppo_test.go index 7103da7..45dc017 100644 --- a/momentum/ppo_test.go +++ b/momentum/ppo_test.go @@ -19,7 +19,7 @@ func TestPpo(t *testing.T) { Histogram float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/ppo.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/ppo.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/pvo_test.go b/momentum/pvo_test.go index 1a33160..8a832d1 100644 --- a/momentum/pvo_test.go +++ b/momentum/pvo_test.go @@ -19,7 +19,7 @@ func TestPvo(t *testing.T) { Histogram float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/pvo.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/pvo.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/qstick_test.go b/momentum/qstick_test.go index e3daa21..4df52f1 100644 --- a/momentum/qstick_test.go +++ b/momentum/qstick_test.go @@ -18,7 +18,7 @@ func TestQstick(t *testing.T) { Qstick float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/qstick.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/qstick.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/rsi_test.go b/momentum/rsi_test.go index 4ea0c51..23e35d5 100644 --- a/momentum/rsi_test.go +++ b/momentum/rsi_test.go @@ -17,7 +17,7 @@ func TestRsi(t *testing.T) { Rsi float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/rsi.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/rsi.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/stochastic_oscillator_test.go b/momentum/stochastic_oscillator_test.go index 3abd103..3003154 100644 --- a/momentum/stochastic_oscillator_test.go +++ b/momentum/stochastic_oscillator_test.go @@ -20,7 +20,7 @@ func TestStochasticOscillator(t *testing.T) { D float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/stochastic_oscillator.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/stochastic_oscillator.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/stochastic_rsi_test.go b/momentum/stochastic_rsi_test.go index 186290a..0fe8234 100644 --- a/momentum/stochastic_rsi_test.go +++ b/momentum/stochastic_rsi_test.go @@ -17,7 +17,7 @@ func TestStochasticRsi(t *testing.T) { StochasticRsi float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/stochastic_rsi.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/stochastic_rsi.csv") if err != nil { t.Fatal(err) } diff --git a/momentum/williams_r_test.go b/momentum/williams_r_test.go index 182c74b..5ea05c0 100644 --- a/momentum/williams_r_test.go +++ b/momentum/williams_r_test.go @@ -19,7 +19,7 @@ func TestWilliamsR(t *testing.T) { WilliamsR float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/williams_r.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/williams_r.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/and_strategy_test.go b/strategy/and_strategy_test.go index 97fe8db..12a3d5e 100644 --- a/strategy/and_strategy_test.go +++ b/strategy/and_strategy_test.go @@ -13,12 +13,12 @@ import ( ) func TestAndStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/and.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/and.csv") if err != nil { t.Fatal(err) } @@ -37,7 +37,7 @@ func TestAndStrategy(t *testing.T) { } func TestAndStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/buy_and_hold_strategy_test.go b/strategy/buy_and_hold_strategy_test.go index 0b1e2d8..edcf641 100644 --- a/strategy/buy_and_hold_strategy_test.go +++ b/strategy/buy_and_hold_strategy_test.go @@ -13,12 +13,12 @@ import ( ) func TestBuyAndHoldStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/buy_and_hold_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/buy_and_hold_strategy.csv") if err != nil { t.Fatal(err) } @@ -35,7 +35,7 @@ func TestBuyAndHoldStrategy(t *testing.T) { } func TestBuyAndHoldStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/compound/macd_rsi_strategy_test.go b/strategy/compound/macd_rsi_strategy_test.go index 405b3c2..32f2ee9 100644 --- a/strategy/compound/macd_rsi_strategy_test.go +++ b/strategy/compound/macd_rsi_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestMacdRsiStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/macd_rsi_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/macd_rsi_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestMacdRsiStrategy(t *testing.T) { } func TestMacdRsiStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/decorator/inverse_strategy_test.go b/strategy/decorator/inverse_strategy_test.go index 46a507d..8140ad3 100644 --- a/strategy/decorator/inverse_strategy_test.go +++ b/strategy/decorator/inverse_strategy_test.go @@ -15,12 +15,12 @@ import ( ) func TestInverseStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/inverse_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/inverse_strategy.csv") if err != nil { t.Fatal(err) } @@ -39,7 +39,7 @@ func TestInverseStrategy(t *testing.T) { } func TestInverseStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/decorator/no_loss_strategy_test.go b/strategy/decorator/no_loss_strategy_test.go index dd255d2..1fd7787 100644 --- a/strategy/decorator/no_loss_strategy_test.go +++ b/strategy/decorator/no_loss_strategy_test.go @@ -15,12 +15,12 @@ import ( ) func TestNoLossStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/no_loss_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/no_loss_strategy.csv") if err != nil { t.Fatal(err) } @@ -39,7 +39,7 @@ func TestNoLossStrategy(t *testing.T) { } func TestNoLossStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/decorator/stop_loss_strategy_test.go b/strategy/decorator/stop_loss_strategy_test.go index 62c5487..48aa19c 100644 --- a/strategy/decorator/stop_loss_strategy_test.go +++ b/strategy/decorator/stop_loss_strategy_test.go @@ -15,12 +15,12 @@ import ( ) func TestStopLossStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/stop_loss_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/stop_loss_strategy.csv") if err != nil { t.Fatal(err) } @@ -39,7 +39,7 @@ func TestStopLossStrategy(t *testing.T) { } func TestStopLossStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/majority_strategy_test.go b/strategy/majority_strategy_test.go index d690081..fe25651 100644 --- a/strategy/majority_strategy_test.go +++ b/strategy/majority_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestMajorityStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/majority.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/majority.csv") if err != nil { t.Fatal(err) } @@ -38,7 +38,7 @@ func TestMajorityStrategy(t *testing.T) { } func TestMajorityStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/momentum/awesome_oscillator_strategy_test.go b/strategy/momentum/awesome_oscillator_strategy_test.go index bce684b..cfdb5b4 100644 --- a/strategy/momentum/awesome_oscillator_strategy_test.go +++ b/strategy/momentum/awesome_oscillator_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestAwesomeOscillatorStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/awesome_oscillator_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/awesome_oscillator_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestAwesomeOscillatorStrategy(t *testing.T) { } func TestAwesomeOscillatorStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/momentum/rsi_strategy_test.go b/strategy/momentum/rsi_strategy_test.go index bbdf146..2c4062e 100644 --- a/strategy/momentum/rsi_strategy_test.go +++ b/strategy/momentum/rsi_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestRsiStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/rsi_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/rsi_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestRsiStrategy(t *testing.T) { } func TestRsiStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/momentum/stochastic_rsi_strategy_test.go b/strategy/momentum/stochastic_rsi_strategy_test.go index b762a16..93ea7c2 100644 --- a/strategy/momentum/stochastic_rsi_strategy_test.go +++ b/strategy/momentum/stochastic_rsi_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestStochasticRsiStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/stochastic_rsi_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/stochastic_rsi_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestStochasticRsiStrategy(t *testing.T) { } func TestStochasticRsiStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/momentum/triple_rsi_strategy_test.go b/strategy/momentum/triple_rsi_strategy_test.go index 9d83f01..493ef8a 100644 --- a/strategy/momentum/triple_rsi_strategy_test.go +++ b/strategy/momentum/triple_rsi_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestTripleRsiStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/triple_rsi_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/triple_rsi_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestTripleRsiStrategy(t *testing.T) { } func TestTripleRsiStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/or_strategy_test.go b/strategy/or_strategy_test.go index 599e40b..90b9dff 100644 --- a/strategy/or_strategy_test.go +++ b/strategy/or_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestOrStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/or.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/or.csv") if err != nil { t.Fatal(err) } @@ -38,7 +38,7 @@ func TestOrStrategy(t *testing.T) { } func TestOrStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/split_strategy_test.go b/strategy/split_strategy_test.go index dc4cb51..57e3410 100644 --- a/strategy/split_strategy_test.go +++ b/strategy/split_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestSplitStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/split.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/split.csv") if err != nil { t.Fatal(err) } @@ -40,7 +40,7 @@ func TestSplitStrategy(t *testing.T) { } func TestSplitStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/repository/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/alligator_strategy_test.go b/strategy/trend/alligator_strategy_test.go index 978efd7..54c0b0c 100644 --- a/strategy/trend/alligator_strategy_test.go +++ b/strategy/trend/alligator_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestAlligatorStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/alligator_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/alligator_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestAlligatorStrategy(t *testing.T) { } func TestAlligatorStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/apo_strategy_test.go b/strategy/trend/apo_strategy_test.go index 0511c29..423603b 100644 --- a/strategy/trend/apo_strategy_test.go +++ b/strategy/trend/apo_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestApoStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/apo_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/apo_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestApoStrategy(t *testing.T) { } func TestApoStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/aroon_strategy_test.go b/strategy/trend/aroon_strategy_test.go index 5f1a5ae..76fcbc2 100644 --- a/strategy/trend/aroon_strategy_test.go +++ b/strategy/trend/aroon_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestAroonStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/aroon_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/aroon_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestAroonStrategy(t *testing.T) { } func TestAroonStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/bop_strategy_test.go b/strategy/trend/bop_strategy_test.go index 930ca03..a633045 100644 --- a/strategy/trend/bop_strategy_test.go +++ b/strategy/trend/bop_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestBopStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/bop_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/bop_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestBopStrategy(t *testing.T) { } func TestBopStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/cci_strategy_test.go b/strategy/trend/cci_strategy_test.go index f0d4f9c..15041e7 100644 --- a/strategy/trend/cci_strategy_test.go +++ b/strategy/trend/cci_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestCciStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/cci_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/cci_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestCciStrategy(t *testing.T) { } func TestCciStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/dema_strategy_test.go b/strategy/trend/dema_strategy_test.go index d725f30..ed97b6f 100644 --- a/strategy/trend/dema_strategy_test.go +++ b/strategy/trend/dema_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestDemaStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/dema_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/dema_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestDemaStrategy(t *testing.T) { } func TestDemaStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/envelope_strategy_test.go b/strategy/trend/envelope_strategy_test.go index 9b110ae..10f6817 100644 --- a/strategy/trend/envelope_strategy_test.go +++ b/strategy/trend/envelope_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestEnvelopeStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/envelope_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/envelope_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestEnvelopeStrategy(t *testing.T) { } func TestEnvelopeStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/golden_cross_strategy_test.go b/strategy/trend/golden_cross_strategy_test.go index b02e68c..e1ea438 100644 --- a/strategy/trend/golden_cross_strategy_test.go +++ b/strategy/trend/golden_cross_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestGoldenCrossStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/golden_cross_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/golden_cross_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestGoldenCrossStrategy(t *testing.T) { } func TestGoldenCrossStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/kama_strategy_test.go b/strategy/trend/kama_strategy_test.go index 77d7b47..ff08209 100644 --- a/strategy/trend/kama_strategy_test.go +++ b/strategy/trend/kama_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestKamaStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/kama_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/kama_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestKamaStrategy(t *testing.T) { } func TestKamaStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/kdj_strategy_test.go b/strategy/trend/kdj_strategy_test.go index ee9f1c1..82a54b5 100644 --- a/strategy/trend/kdj_strategy_test.go +++ b/strategy/trend/kdj_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestKdjStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/kdj_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/kdj_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestKdjStrategy(t *testing.T) { } func TestKdjStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/macd_strategy_test.go b/strategy/trend/macd_strategy_test.go index 8a462d9..4105766 100644 --- a/strategy/trend/macd_strategy_test.go +++ b/strategy/trend/macd_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestMacdStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/macd_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/macd_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestMacdStrategy(t *testing.T) { } func TestMacdStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/qstick_strategy_test.go b/strategy/trend/qstick_strategy_test.go index 4ac4ba7..0d8d4d1 100644 --- a/strategy/trend/qstick_strategy_test.go +++ b/strategy/trend/qstick_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestQstickStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/qstick_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/qstick_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestQstickStrategy(t *testing.T) { } func TestQstickStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/smma_strategy_test.go b/strategy/trend/smma_strategy_test.go index 7cb8e58..4538d04 100644 --- a/strategy/trend/smma_strategy_test.go +++ b/strategy/trend/smma_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestSmmaStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/smma_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/smma_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestSmmaStrategy(t *testing.T) { } func TestSmmaStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/trima_strategy_test.go b/strategy/trend/trima_strategy_test.go index ea6edc6..82fe4b3 100644 --- a/strategy/trend/trima_strategy_test.go +++ b/strategy/trend/trima_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestTrimaStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/trima_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/trima_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestTrimaStrategy(t *testing.T) { } func TestTrimaStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/triple_moving_average_crossover_strategy_test.go b/strategy/trend/triple_moving_average_crossover_strategy_test.go index d29f074..9db7d12 100644 --- a/strategy/trend/triple_moving_average_crossover_strategy_test.go +++ b/strategy/trend/triple_moving_average_crossover_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestTripleMovingAverageCrossoverStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/triple_moving_average_crossover_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/triple_moving_average_crossover_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestTripleMovingAverageCrossoverStrategy(t *testing.T) { } func TestTripleMovingAverageCrossoverStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/trix_strategy_test.go b/strategy/trend/trix_strategy_test.go index 209d786..b459989 100644 --- a/strategy/trend/trix_strategy_test.go +++ b/strategy/trend/trix_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestTrixStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/trix_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/trix_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestTrixStrategy(t *testing.T) { } func TestTrixStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/tsi_strategy_test.go b/strategy/trend/tsi_strategy_test.go index 1ce8e7d..54abffa 100644 --- a/strategy/trend/tsi_strategy_test.go +++ b/strategy/trend/tsi_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestTsiStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/tsi_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/tsi_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestTsiStrategy(t *testing.T) { } func TestTsiStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/vwma_strategy_test.go b/strategy/trend/vwma_strategy_test.go index 82c9ff8..00568d0 100644 --- a/strategy/trend/vwma_strategy_test.go +++ b/strategy/trend/vwma_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestVwmaStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/vwma_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/vwma_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestVwmaStrategy(t *testing.T) { } func TestVwmaStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/trend/weighted_close_strategy_test.go b/strategy/trend/weighted_close_strategy_test.go index 41f7799..6988380 100644 --- a/strategy/trend/weighted_close_strategy_test.go +++ b/strategy/trend/weighted_close_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestWeightedCloseStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/weighted_close_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/weighted_close_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestWeightedCloseStrategy(t *testing.T) { } func TestWeightedCloseStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/volatility/bollinger_bands_strategy_test.go b/strategy/volatility/bollinger_bands_strategy_test.go index 59e31ee..b6a8378 100644 --- a/strategy/volatility/bollinger_bands_strategy_test.go +++ b/strategy/volatility/bollinger_bands_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestBollingerBandsStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/bollinger_bands_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/bollinger_bands_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestBollingerBandsStrategy(t *testing.T) { } func TestBollingerBandsStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/volatility/super_trend_strategy_test.go b/strategy/volatility/super_trend_strategy_test.go index f422147..911d232 100644 --- a/strategy/volatility/super_trend_strategy_test.go +++ b/strategy/volatility/super_trend_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestSuperTrendStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/super_trend_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/super_trend_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestSuperTrendStrategy(t *testing.T) { } func TestSuperTrendStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/volume/chaikin_money_flow_strategy_test.go b/strategy/volume/chaikin_money_flow_strategy_test.go index 6398ed3..dff4a11 100644 --- a/strategy/volume/chaikin_money_flow_strategy_test.go +++ b/strategy/volume/chaikin_money_flow_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestChaikinMoneyFlowStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/chaikin_money_flow_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/chaikin_money_flow_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestChaikinMoneyFlowStrategy(t *testing.T) { } func TestChaikinMoneyFlowStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/volume/ease_of_movement_strategy_test.go b/strategy/volume/ease_of_movement_strategy_test.go index d304ef4..6233359 100644 --- a/strategy/volume/ease_of_movement_strategy_test.go +++ b/strategy/volume/ease_of_movement_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestEaseOfMovementStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/ease_of_movement_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/ease_of_movement_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestEaseOfMovementStrategy(t *testing.T) { } func TestEaseOfMovementStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/volume/force_index_strategy_test.go b/strategy/volume/force_index_strategy_test.go index 1ff2bc6..58531a4 100644 --- a/strategy/volume/force_index_strategy_test.go +++ b/strategy/volume/force_index_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestForceIndexStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/force_index_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/force_index_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestForceIndexStrategy(t *testing.T) { } func TestForceIndexStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/volume/money_flow_index_strategy_test.go b/strategy/volume/money_flow_index_strategy_test.go index 50571fd..179d908 100644 --- a/strategy/volume/money_flow_index_strategy_test.go +++ b/strategy/volume/money_flow_index_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestMoneyFlowIndexStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/money_flow_index_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/money_flow_index_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestMoneyFlowIndexStrategy(t *testing.T) { } func TestMoneyFlowIndexStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/volume/negative_volume_index_strategy_test.go b/strategy/volume/negative_volume_index_strategy_test.go index 1e3ad89..e925e77 100644 --- a/strategy/volume/negative_volume_index_strategy_test.go +++ b/strategy/volume/negative_volume_index_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestNegativeVolumeIndexStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/negative_volume_index_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/negative_volume_index_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestNegativeVolumeIndexStrategy(t *testing.T) { } func TestNegativeVolumeIndexStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/strategy/volume/weighted_average_price_strategy_test.go b/strategy/volume/weighted_average_price_strategy_test.go index 696bf70..cd0938a 100644 --- a/strategy/volume/weighted_average_price_strategy_test.go +++ b/strategy/volume/weighted_average_price_strategy_test.go @@ -14,12 +14,12 @@ import ( ) func TestVolumeWeightedAveragePriceStrategy(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } - results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/volume_weighted_average_price_strategy.csv", true) + results, err := helper.ReadFromCsvFile[strategy.Result]("testdata/volume_weighted_average_price_strategy.csv") if err != nil { t.Fatal(err) } @@ -36,7 +36,7 @@ func TestVolumeWeightedAveragePriceStrategy(t *testing.T) { } func TestVolumeWeightedAveragePriceStrategyReport(t *testing.T) { - snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv", true) + snapshots, err := helper.ReadFromCsvFile[asset.Snapshot]("testdata/brk-b.csv") if err != nil { t.Fatal(err) } diff --git a/trend/apo_test.go b/trend/apo_test.go index 734d069..e29788e 100644 --- a/trend/apo_test.go +++ b/trend/apo_test.go @@ -17,7 +17,7 @@ func TestApo(t *testing.T) { Apo float64 } - input, err := helper.ReadFromCsvFile[ApoData]("testdata/apo.csv", true) + input, err := helper.ReadFromCsvFile[ApoData]("testdata/apo.csv") if err != nil { t.Fatal(err) } diff --git a/trend/aroon_test.go b/trend/aroon_test.go index eee0404..0325c63 100644 --- a/trend/aroon_test.go +++ b/trend/aroon_test.go @@ -21,7 +21,7 @@ func TestAroon(t *testing.T) { aroon := trend.NewAroon[float64]() - input, err := helper.ReadFromCsvFile[AroonData]("testdata/aroon.csv", true) + input, err := helper.ReadFromCsvFile[AroonData]("testdata/aroon.csv") if err != nil { t.Fatal(err) } diff --git a/trend/bop_test.go b/trend/bop_test.go index 6f01c60..029fd51 100644 --- a/trend/bop_test.go +++ b/trend/bop_test.go @@ -20,7 +20,7 @@ func TestBop(t *testing.T) { Bop float64 } - input, err := helper.ReadFromCsvFile[BopData]("testdata/bop.csv", true) + input, err := helper.ReadFromCsvFile[BopData]("testdata/bop.csv") if err != nil { t.Fatal(err) } diff --git a/trend/cci_test.go b/trend/cci_test.go index bae1a60..e386872 100644 --- a/trend/cci_test.go +++ b/trend/cci_test.go @@ -19,7 +19,7 @@ func TestCci(t *testing.T) { Cci float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/cci.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/cci.csv") if err != nil { t.Fatal(err) } diff --git a/trend/envelope_test.go b/trend/envelope_test.go index 974ad1a..b64c3f4 100644 --- a/trend/envelope_test.go +++ b/trend/envelope_test.go @@ -19,7 +19,7 @@ func TestEnvelopeWithSma(t *testing.T) { Lower float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/envelope_sma.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/envelope_sma.csv") if err != nil { t.Fatal(err) } @@ -55,7 +55,7 @@ func TestEnvelopeWithEma(t *testing.T) { Lower float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/envelope_ema.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/envelope_ema.csv") if err != nil { t.Fatal(err) } diff --git a/trend/hma_test.go b/trend/hma_test.go index 14be762..0180ed3 100644 --- a/trend/hma_test.go +++ b/trend/hma_test.go @@ -17,7 +17,7 @@ func TestHma(t *testing.T) { Hma float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/hma.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/hma.csv") if err != nil { t.Fatal(err) } diff --git a/trend/kama_test.go b/trend/kama_test.go index 1742518..541a6e8 100644 --- a/trend/kama_test.go +++ b/trend/kama_test.go @@ -17,7 +17,7 @@ func TestKama(t *testing.T) { Kama float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/kama.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/kama.csv") if err != nil { t.Fatal(err) } diff --git a/trend/kdj_test.go b/trend/kdj_test.go index 37eba2a..86025bd 100644 --- a/trend/kdj_test.go +++ b/trend/kdj_test.go @@ -21,7 +21,7 @@ func TestKdj(t *testing.T) { J float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/kdj.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/kdj.csv") if err != nil { t.Fatal(err) } diff --git a/trend/macd_test.go b/trend/macd_test.go index 60e59d5..10e816b 100644 --- a/trend/macd_test.go +++ b/trend/macd_test.go @@ -18,7 +18,7 @@ func TestMacd(t *testing.T) { Signal float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/macd.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/macd.csv") if err != nil { t.Fatal(err) } diff --git a/trend/mass_index_test.go b/trend/mass_index_test.go index 946da1c..62a4ab9 100644 --- a/trend/mass_index_test.go +++ b/trend/mass_index_test.go @@ -18,7 +18,7 @@ func TestMassIndex(t *testing.T) { MassIndex float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/mass_index.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/mass_index.csv") if err != nil { t.Fatal(err) } diff --git a/trend/mlr_test.go b/trend/mlr_test.go index 745eaf8..4171aa9 100644 --- a/trend/mlr_test.go +++ b/trend/mlr_test.go @@ -18,7 +18,7 @@ func TestMlr(t *testing.T) { R float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/mlr.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/mlr.csv") if err != nil { t.Fatal(err) } diff --git a/trend/mls_test.go b/trend/mls_test.go index 801fded..7a8776b 100644 --- a/trend/mls_test.go +++ b/trend/mls_test.go @@ -19,7 +19,7 @@ func TestMls(t *testing.T) { B float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/mls.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/mls.csv") if err != nil { t.Fatal(err) } diff --git a/trend/rma_test.go b/trend/rma_test.go index de7d4bb..f445ef9 100644 --- a/trend/rma_test.go +++ b/trend/rma_test.go @@ -17,7 +17,7 @@ func TestRma(t *testing.T) { Rma float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/rma.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/rma.csv") if err != nil { t.Fatal(err) } diff --git a/trend/smma_test.go b/trend/smma_test.go index a2fda5c..c7e46ea 100644 --- a/trend/smma_test.go +++ b/trend/smma_test.go @@ -17,7 +17,7 @@ func TestSmma(t *testing.T) { Smma float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/smma.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/smma.csv") if err != nil { t.Fatal(err) } diff --git a/trend/tema_test.go b/trend/tema_test.go index 57f26da..d8db92c 100644 --- a/trend/tema_test.go +++ b/trend/tema_test.go @@ -17,7 +17,7 @@ func TestTema(t *testing.T) { Tema float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/tema.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/tema.csv") if err != nil { t.Fatal(err) } diff --git a/trend/trima_test.go b/trend/trima_test.go index e84bf53..bc2de08 100644 --- a/trend/trima_test.go +++ b/trend/trima_test.go @@ -17,7 +17,7 @@ func TestTrimaWithOddPeriod(t *testing.T) { Trima float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/trima_odd.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/trima_odd.csv") if err != nil { t.Fatal(err) } @@ -46,7 +46,7 @@ func TestTrimaWithEvenPeriod(t *testing.T) { Trima float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/trima_even.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/trima_even.csv") if err != nil { t.Fatal(err) } diff --git a/trend/trix_test.go b/trend/trix_test.go index 9643528..c9b7b09 100644 --- a/trend/trix_test.go +++ b/trend/trix_test.go @@ -17,7 +17,7 @@ func TestTrix(t *testing.T) { Trix float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/trix.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/trix.csv") if err != nil { t.Fatal(err) } diff --git a/trend/tsi_test.go b/trend/tsi_test.go index e2414b9..f1f97da 100644 --- a/trend/tsi_test.go +++ b/trend/tsi_test.go @@ -17,7 +17,7 @@ func TestTsi(t *testing.T) { Tsi float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/tsi.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/tsi.csv") if err != nil { t.Fatal(err) } diff --git a/trend/typical_price_test.go b/trend/typical_price_test.go index afca8da..29809b0 100644 --- a/trend/typical_price_test.go +++ b/trend/typical_price_test.go @@ -19,7 +19,7 @@ func TestTypicalPrice(t *testing.T) { TypicalPrice float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/typical_price.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/typical_price.csv") if err != nil { t.Fatal(err) } diff --git a/trend/vwma_test.go b/trend/vwma_test.go index ffffe59..c3fcac5 100644 --- a/trend/vwma_test.go +++ b/trend/vwma_test.go @@ -18,7 +18,7 @@ func TestVwma(t *testing.T) { Vwma float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/vwma.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/vwma.csv") if err != nil { t.Fatal(err) } diff --git a/trend/weighted_close_test.go b/trend/weighted_close_test.go index 18218b8..5966b40 100644 --- a/trend/weighted_close_test.go +++ b/trend/weighted_close_test.go @@ -19,7 +19,7 @@ func TestWeightedClose(t *testing.T) { WeightedClose float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/weighted_close.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/weighted_close.csv") if err != nil { t.Fatal(err) } diff --git a/trend/wma_test.go b/trend/wma_test.go index 47757f1..9e10315 100644 --- a/trend/wma_test.go +++ b/trend/wma_test.go @@ -17,7 +17,7 @@ func TestWma(t *testing.T) { Wma float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/wma.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/wma.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/acceleration_bands_test.go b/volatility/acceleration_bands_test.go index 6efb928..bc1e60f 100644 --- a/volatility/acceleration_bands_test.go +++ b/volatility/acceleration_bands_test.go @@ -21,7 +21,7 @@ func TestAccelerationBands(t *testing.T) { Lower float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/acceleration_bands.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/acceleration_bands.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/atr_test.go b/volatility/atr_test.go index be8c697..c31b603 100644 --- a/volatility/atr_test.go +++ b/volatility/atr_test.go @@ -19,7 +19,7 @@ func TestAtr(t *testing.T) { Atr float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/atr.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/atr.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/bollinger_band_width_test.go b/volatility/bollinger_band_width_test.go index c3218d7..995a8ac 100644 --- a/volatility/bollinger_band_width_test.go +++ b/volatility/bollinger_band_width_test.go @@ -17,7 +17,7 @@ func TestBollingerBandWidth(t *testing.T) { Width float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/bollinger_band_width.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/bollinger_band_width.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/bollinger_bands_test.go b/volatility/bollinger_bands_test.go index ce65503..7d2aeba 100644 --- a/volatility/bollinger_bands_test.go +++ b/volatility/bollinger_bands_test.go @@ -19,7 +19,7 @@ func TestBollingerBands(t *testing.T) { Lower float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/bollinger_bands.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/bollinger_bands.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/chandelier_exit_test.go b/volatility/chandelier_exit_test.go index 55951a5..f8493cd 100644 --- a/volatility/chandelier_exit_test.go +++ b/volatility/chandelier_exit_test.go @@ -20,7 +20,7 @@ func TestChandelierExit(t *testing.T) { Short float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/chandelier_exit.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/chandelier_exit.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/donchian_channel_test.go b/volatility/donchian_channel_test.go index 050f562..c1c18f4 100644 --- a/volatility/donchian_channel_test.go +++ b/volatility/donchian_channel_test.go @@ -19,7 +19,7 @@ func TestDonchianChannel(t *testing.T) { Lower float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/donchian_channel.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/donchian_channel.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/keltner_channel_test.go b/volatility/keltner_channel_test.go index d2ffa50..09d3617 100644 --- a/volatility/keltner_channel_test.go +++ b/volatility/keltner_channel_test.go @@ -21,7 +21,7 @@ func TestKeltnerChannel(t *testing.T) { Lower float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/keltner_channel.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/keltner_channel.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/moving_std_test.go b/volatility/moving_std_test.go index 9c74a82..0e0a743 100644 --- a/volatility/moving_std_test.go +++ b/volatility/moving_std_test.go @@ -17,7 +17,7 @@ func TestMovingStd(t *testing.T) { Std float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/moving_std.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/moving_std.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/percent_b_test.go b/volatility/percent_b_test.go index f0d81f4..2f3ace4 100644 --- a/volatility/percent_b_test.go +++ b/volatility/percent_b_test.go @@ -40,7 +40,7 @@ func TestPercentB(t *testing.T) { PercentB float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/percent_b.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/percent_b.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/po_test.go b/volatility/po_test.go index d15387d..5d3de1a 100644 --- a/volatility/po_test.go +++ b/volatility/po_test.go @@ -19,7 +19,7 @@ func TestPo(t *testing.T) { Po float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/po.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/po.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/super_trend_test.go b/volatility/super_trend_test.go index 6bfe9ef..7e7aa1f 100644 --- a/volatility/super_trend_test.go +++ b/volatility/super_trend_test.go @@ -19,7 +19,7 @@ func TestSuperTrend(t *testing.T) { SuperTrend float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/super_trend.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/super_trend.csv") if err != nil { t.Fatal(err) } diff --git a/volatility/ulcer_index_test.go b/volatility/ulcer_index_test.go index e21bbdd..b09f963 100644 --- a/volatility/ulcer_index_test.go +++ b/volatility/ulcer_index_test.go @@ -17,7 +17,7 @@ func TestUlcerIndex(t *testing.T) { UlcerIndex float64 } - input, err := helper.ReadFromCsvFile[Data]("testdata/ulcer_index.csv", true) + input, err := helper.ReadFromCsvFile[Data]("testdata/ulcer_index.csv") if err != nil { t.Fatal(err) } diff --git a/volume/ad_test.go b/volume/ad_test.go index fb96186..c1196de 100644 --- a/volume/ad_test.go +++ b/volume/ad_test.go @@ -20,7 +20,7 @@ func TestAd(t *testing.T) { Ad float64 } - input, err := helper.ReadFromCsvFile[AdData]("testdata/ad.csv", true) + input, err := helper.ReadFromCsvFile[AdData]("testdata/ad.csv") if err != nil { t.Fatal(err) } diff --git a/volume/cmf_test.go b/volume/cmf_test.go index 4dbf674..884e9c2 100644 --- a/volume/cmf_test.go +++ b/volume/cmf_test.go @@ -20,7 +20,7 @@ func TestCmf(t *testing.T) { Cmf float64 } - input, err := helper.ReadFromCsvFile[CmfData]("testdata/cmf.csv", true) + input, err := helper.ReadFromCsvFile[CmfData]("testdata/cmf.csv") if err != nil { t.Fatal(err) } diff --git a/volume/emv_test.go b/volume/emv_test.go index 5080b8e..18c282b 100644 --- a/volume/emv_test.go +++ b/volume/emv_test.go @@ -19,7 +19,7 @@ func TestEmv(t *testing.T) { Emv float64 } - input, err := helper.ReadFromCsvFile[EmvData]("testdata/emv.csv", true) + input, err := helper.ReadFromCsvFile[EmvData]("testdata/emv.csv") if err != nil { t.Fatal(err) } diff --git a/volume/fi_test.go b/volume/fi_test.go index 172154b..95d38bc 100644 --- a/volume/fi_test.go +++ b/volume/fi_test.go @@ -18,7 +18,7 @@ func TestFi(t *testing.T) { Fi float64 } - input, err := helper.ReadFromCsvFile[FiData]("testdata/fi.csv", true) + input, err := helper.ReadFromCsvFile[FiData]("testdata/fi.csv") if err != nil { t.Fatal(err) } diff --git a/volume/mfi_test.go b/volume/mfi_test.go index b1d926a..65d801c 100644 --- a/volume/mfi_test.go +++ b/volume/mfi_test.go @@ -20,7 +20,7 @@ func TestMfi(t *testing.T) { Mfi float64 } - input, err := helper.ReadFromCsvFile[MfiData]("testdata/mfi.csv", true) + input, err := helper.ReadFromCsvFile[MfiData]("testdata/mfi.csv") if err != nil { t.Fatal(err) } diff --git a/volume/mfm_test.go b/volume/mfm_test.go index 2fc1416..a60dcf1 100644 --- a/volume/mfm_test.go +++ b/volume/mfm_test.go @@ -19,7 +19,7 @@ func TestMfm(t *testing.T) { Mfm float64 } - input, err := helper.ReadFromCsvFile[MfmData]("testdata/mfm.csv", true) + input, err := helper.ReadFromCsvFile[MfmData]("testdata/mfm.csv") if err != nil { t.Fatal(err) } diff --git a/volume/mfv_test.go b/volume/mfv_test.go index a3d76e8..f2e74bf 100644 --- a/volume/mfv_test.go +++ b/volume/mfv_test.go @@ -20,7 +20,7 @@ func TestMfv(t *testing.T) { Mfv float64 } - input, err := helper.ReadFromCsvFile[MfvData]("testdata/mfv.csv", true) + input, err := helper.ReadFromCsvFile[MfvData]("testdata/mfv.csv") if err != nil { t.Fatal(err) } diff --git a/volume/nvi_test.go b/volume/nvi_test.go index 1f87dc6..0083f16 100644 --- a/volume/nvi_test.go +++ b/volume/nvi_test.go @@ -18,7 +18,7 @@ func TestNvi(t *testing.T) { Nvi float64 } - input, err := helper.ReadFromCsvFile[NviData]("testdata/nvi.csv", true) + input, err := helper.ReadFromCsvFile[NviData]("testdata/nvi.csv") if err != nil { t.Fatal(err) } diff --git a/volume/obv_test.go b/volume/obv_test.go index efdd938..68037a4 100644 --- a/volume/obv_test.go +++ b/volume/obv_test.go @@ -18,7 +18,7 @@ func TestObv(t *testing.T) { Obv float64 } - input, err := helper.ReadFromCsvFile[ObvData]("testdata/obv.csv", true) + input, err := helper.ReadFromCsvFile[ObvData]("testdata/obv.csv") if err != nil { t.Fatal(err) } diff --git a/volume/vpt_test.go b/volume/vpt_test.go index ca49732..5fd370e 100644 --- a/volume/vpt_test.go +++ b/volume/vpt_test.go @@ -18,7 +18,7 @@ func TestVpt(t *testing.T) { Vpt float64 } - input, err := helper.ReadFromCsvFile[VptData]("testdata/vpt.csv", true) + input, err := helper.ReadFromCsvFile[VptData]("testdata/vpt.csv") if err != nil { t.Fatal(err) } diff --git a/volume/vwap_test.go b/volume/vwap_test.go index baad138..b37ee60 100644 --- a/volume/vwap_test.go +++ b/volume/vwap_test.go @@ -18,7 +18,7 @@ func TestVwap(t *testing.T) { Vwap float64 } - input, err := helper.ReadFromCsvFile[VwapData]("testdata/vwap.csv", true) + input, err := helper.ReadFromCsvFile[VwapData]("testdata/vwap.csv") if err != nil { t.Fatal(err) }