设为首页收藏本站

 找回密码
 注册
查看: 1209|回复: 7
打印 上一主题 下一主题

外部数据读取之后的处理问题请教 [复制链接]

Rank: 1

精华
0
UID
293582
积分
19
帖子
13
主题
6
阅读权限
10
注册时间
2020-7-4
最后登录
2020-7-23
跳转到指定楼层
1#
发表于 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 官网的函数清单中找不到类似功能的函数,怎么办?

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
2#
发表于 2020-7-20 19:41:36 |只看该作者
1、ReadCsvFile,会把文件读到一个数组,您需要逐个Bar到数组去读取相应的数据,来实现序列数据的转换。
2、String转数值,用Value函数
3、要在数组中查找对应的元素,应该没有直接的函数,可能循环遍历去查找,如果想快速定位,可以把数组转换成Map类型,这样定位会更快。

使用道具 举报

Rank: 1

精华
0
UID
293582
积分
19
帖子
13
主题
6
阅读权限
10
注册时间
2020-7-4
最后登录
2020-7-23
3#
发表于 2020-7-22 09:08:01 |只看该作者
第3点,能给个例程吗?

使用道具 举报

Rank: 1

精华
0
UID
293582
积分
19
帖子
13
主题
6
阅读权限
10
注册时间
2020-7-4
最后登录
2020-7-23
4#
发表于 2020-7-22 10:51:22 |只看该作者
另外,好像读取文件只能在 onBar 里操作,在OnInit、OnReady、OnBarOpen里都不行,可是OnBar在收到实时行情时,是每个tick运行一次的,这样在文件读取上大量资源都浪费了,如果通过循环来将外部数据从数组转成series,那消耗的资源就更多了。
期待更好的解决方法。

使用道具 举报

Rank: 1

精华
0
UID
293582
积分
19
帖子
13
主题
6
阅读权限
10
注册时间
2020-7-4
最后登录
2020-7-23
5#
发表于 2020-7-22 11:19:32 |只看该作者
或者用
1、自定义一个合约,使用时读取这个自定义合约
2、保存到数据中心中,使用时读取
这2方法可以吗?

使用道具 举报

Rank: 1

精华
0
UID
184859
积分
3
帖子
2
主题
1
阅读权限
10
注册时间
2014-4-15
最后登录
2020-12-8
6#
发表于 2020-8-13 00:17:32 |只看该作者
参考下
ReadCSVFile("d://X.csv", Y);
SetTBProfileString("块名",Text(Date),Y[Currentbar][2]);

使用道具 举报

Rank: 4

精华
0
UID
1124332
积分
421
帖子
52
主题
29
阅读权限
50
注册时间
2021-5-28
最后登录
2021-7-16
7#
发表于 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],之类就可以用到它里边的任意一个数据。

大家满意的话关注一个吧。

使用道具 举报

Rank: 4

精华
0
UID
1124332
积分
421
帖子
52
主题
29
阅读权限
50
注册时间
2021-5-28
最后登录
2021-7-16
8#
发表于 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位。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-25 02:57

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部