开拓者期货期权程序化系统交易论坛

标题: 外部数据读取之后的处理问题请教 [打印本页]

作者: wahaha2020    时间: 2020-7-20 10:37:22     标题: 外部数据读取之后的处理问题请教

用 ReadCSVFile 从本地硬盘读入数据并保存到 custom_dt,格式第一列是日期,第二列是数值,具体是

date,custom_dt
20141117,120.8233
20141118,47.1967
20141119,24.9677
20141120,21.4194
20141121,21.9953
20141124,58.5647

想转成时间序列数据,遇到以下问题请教:
1、是否有直接的办法,将 custom_dt 直接转成 Series<Numeric> 类型 ?
2、如果不能直接转,也可以先定义一个 Series<Numeric> 变量,然后逐个bar赋值,那么如何将 string 类型的数据转成 Numeric ?
3、为确保外部数据的时间轴与K线的时间轴对齐,要先在 custom_dt 第一列中搜索并定位当前K线的 date 在 custom_dt 第一列中的位置,但是 tbquant 官网的函数清单中找不到类似功能的函数,怎么办?
作者: 追涨杀跌    时间: 2020-7-20 19:41:36

1、ReadCsvFile,会把文件读到一个数组,您需要逐个Bar到数组去读取相应的数据,来实现序列数据的转换。
2、String转数值,用Value函数
3、要在数组中查找对应的元素,应该没有直接的函数,可能循环遍历去查找,如果想快速定位,可以把数组转换成Map类型,这样定位会更快。
作者: wahaha2020    时间: 2020-7-22 09:08:01

第3点,能给个例程吗?
作者: wahaha2020    时间: 2020-7-22 10:51:22

另外,好像读取文件只能在 onBar 里操作,在OnInit、OnReady、OnBarOpen里都不行,可是OnBar在收到实时行情时,是每个tick运行一次的,这样在文件读取上大量资源都浪费了,如果通过循环来将外部数据从数组转成series,那消耗的资源就更多了。
期待更好的解决方法。
作者: wahaha2020    时间: 2020-7-22 11:19:32

或者用
1、自定义一个合约,使用时读取这个自定义合约
2、保存到数据中心中,使用时读取
这2方法可以吗?

作者: zzj2779560    时间: 2020-8-13 00:17:32

参考下
ReadCSVFile("d://X.csv", Y);
SetTBProfileString("块名",Text(Date),Y[Currentbar][2]);
作者: zz175133    时间: 2021-5-29 15:13:59

我现在理解了ReadCSVFile函数的用法了,它可以将 csv格式的文件读到一个数组里,然后就可以通过这个数组来使用这些读取到的数据。
1_申明一个数据 Array<Array<String>> xxx;  //Array<Array<String>> 是类型 ,xxx是数组名称,用户可能根据自己的喜欢按命名规则任意命名;
2_用ReadCSVFile函数读文件,ReadCSVFile("c:\\123\\ker_der.log",xxx); //它的用于就是把c盘下的ker_der.log文件里的内容读取到数组xxx里。这里的文件后缀不一定是.csv,只要文件里的内容是以逗号分隔的就行。
3_使用xxx数组里的数据,用xxx[0][0],xxx[0][1],xxx[9][5],之类就可以用到它里边的任意一个数据。

大家满意的话关注一个吧。
作者: zz175133    时间: 2021-5-29 15:23:36

Array<Array<String>> xxx;
ReadCSVFile("c:\\123\\ker_der.log",xxx);
//
用ReadCSVFile函数读取到数组xxx里的数据如果需要整理的话,可以用Mid这个函数,
Mid(xxx[3][2],5,3);//意思是把数组xxx[3][2] 的数据从第5位起取3位。




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2