我是Go语言的新手,希望创建我自己的算法交易策略回溯测试库,这是我在Python方面很有经验的一个领域,以帮助学习这门语言。
我有一个5分钟的OHLCV SPY5min.csv
数据集,其头部如下所示:
我使用以下代码从文件中读入数据集,将所有内容转换为值列表:
package main
import (
"encoding/csv"
"log"
"os"
"fmt"
)
func ReadCsvFile(filePath string) [][]string {
f, err := os.Open(filePath)
if err != nil {
log.Fatal("Unable to read input file "+filePath, err)
}
defer f.Close()
csvReader := csv.NewReader(f)
records, err := csvReader.ReadAll()
if err != nil {
log.Fatal("Unable to parse file as CSV for "+filePath, err)
}
return records
}
func main() {
records := ReadCsvFile("./SPY5min.csv")
fmt.Println(records)
}
这将返回一个字符串值的列表。很酷。现在我想做的是复制一个类似Pandas Dataframe的对象,或者如果更容易的话,将每个“列”分离到各自的数组/切片中,但还不确定。
完成后,我需要一种方法将datetime字符串转换为实际的datetime对象,以便运行比较和loc
。有人能给我指出正确的方向吗?
我的天真方法(伪)会是:
1.声明大小为len(records)
的6个数组变量(日期时间、打开、高、低、关闭、音量)
1.迭代列表的records
列表
1.将每个值插入到其各自数组的当前i
中
1.迭代完成后,是否将datetime
数组中的值批量转换为datetime对象的值?
想知道这是否真的是最好的方法,或者是否有比O(n)
迭代更快的方法?
1条答案
按热度按时间w51jfk4q1#
您问:“完成后,我需要一种方法将datetime字符串转换为实际的datetime对象......"我最近在这里回答了一个类似的问题:https://stackoverflow.com/a/74491722/5739452
您的时间戳如下所示:
"2022-11-08 4:00"
。time
包包含解析和其他操作函数。关键细节是了解布局解析器格式的约定。时间的每个元素都被识别为一个特定的数字。年为2006
,月为01
,等等。因此,对于您的目的,应该可以使用以下内容: