『外汇堂』·专业外汇论坛

标题: Dukascopy数据下载协作召集 [打印本页]

作者: kuhasu    时间: 2009-2-10 16:04
标题: Dukascopy数据下载协作召集
一个朋友提到Dukascopy的历史数据数据质量比较好,而且可以作为IB,MB Trading这样的ECN外汇的历史数据的有益补充。但是dukascopy提供的免费数据的下载方式实在是麻烦,而且大家也往往没有那个精力浪费在这上面。

Dukascopy外汇历史数据:
http://www.dukascopy.com/plugins/feed_browser/feed.swf

所以我用automate做了个脚本,来自动下载历史数据。但是一两个人的速度还是有限。所以,希望广大大侠、小侠、潜水员同志有对这个历史数据感兴趣的一起参与进来。

建议使用虚拟机以不耽误正常工作,需要以下工具(所有工具我都可以提供):
1、Automate
2、虚拟机
3、有需要的话我提供精简版的操作系统

大概的效率是这样的,所有数据,每个品种每个月的数据需要的时间是半个小时,一口气一年是6个小时。期间不用任何人为操作,是自动化采集存储。对于采集失败或者不存在的数据,自动记录日志,方便缺失文件查找以及汇总后向Dukascopy报告,要求其进行补充。

有兴趣的请以申领任务的方式报告自己要负责的月份或者年份。对于全部下载后的数据,因为是分文件夹的,打包后由我来处理,之后把整个历史数据再进行发放。对于以后的更新数据,用脚本自己就可以采集了,所以此次合作是一次性合作。

对于共享的问题,请版主把本贴设置个投票,由参与者投票决定是否对外共享。

谢谢!

-------------------------------------
2009.02.11更新

2003-2005 AUDJPY已经完成
数据大小大概为每年350M-400M
请已经参与的同志发邮件或者跟贴告知完成进度。谢谢!

相关文件工具及说明下载:

dukascopy.rar项目文件 435k
dukascopy.rar

VMware.rar虚拟机  51M
VMware.rar

AutoMate6.2.8 21M
Automation.AutoMate.Enterprise.Edition.v6.2.8.0.Incl.KeyMaker-DVT.rar

dukascopy下载代码 22k
dukascopy下载IE窗口改良.aml


-------------------------------------
2009.02.12更新

上面的全部作废,过时了。
请熟悉java代码的大侠帮忙(反编译还将就,编译我就阿菜了)。谢谢!

[ 本帖最后由 kuhasu 于 2009-2-17 21:01 编辑 ]
作者: redstart    时间: 2009-2-10 17:10
很棒的思路

如果需要,算我一个

不过回过头来说,最好的数据是CQG提供的。楼主是要编EA么?呵呵
作者: kuhasu    时间: 2009-2-10 20:41
CQG的数据要如何获得呢?因为我想MT和ECN的在一些细节上数据还是不同的
作者: redstart    时间: 2009-2-11 17:00
https://www.cqgdatafactory.com/
好东西都是要收费的,比eSignal还贵,光一组DM-EURO/GBP 从1971到2009年的数据就要$2783.60
[attach]1375[/attach]

数据格式和是否MM还是ECN没有关系,目前主流经纪商的数据格式应该都是一样的:
TICK: yyyyMMdd HHmmss;price;volume
Minute BAR: yyyyMMdd HHmmss;open price;high price;low price;close price;volume
Daily BAR:yyyyMMdd;open price;high price;low price;close price;volume

现货外汇没有volume,30分钟,60分钟,240分钟等通过min bar来实现,周线,月线等通过daily bar来实现。
作者: kuhasu    时间: 2009-2-11 19:01
原帖由 redstart 于 2009-2-11 17:00 发表
https://www.cqgdatafactory.com/
好东西都是要收费的,比eSignal还贵,光一组DM-EURO/GBP 从1971到2009年的数据就要$2783.60
1375

数据格式和是否MM还是ECN没有关系,目前主流经纪商的数据格式应该都是一样的: ...


那样我是觉得就没什么必要了,呵呵:)
其实这个数据用来做MBtrading的历史数据补充是最好的了
作者: redstart    时间: 2009-2-12 20:48
怎么操作?写个流程
作者: kuhasu    时间: 2009-2-12 23:43
原帖由 redstart 于 2009-2-12 20:48 发表
怎么操作?写个流程



请告诉我邮箱地址。我把追溯到的数据后门和反编译后的代码等文件传给大人。

上面的那一堆可以作废了。
作者: kuhasu    时间: 2009-2-12 23:47
数据下载方面,我先看看速度,如果服务器给的带宽低的话再麻烦大家。

[ 本帖最后由 kuhasu 于 2009-2-12 23:56 编辑 ]
作者: mugger    时间: 2009-2-13 17:06
我载了10来个货币对。
用自己写的java程序载的。
10_sec的数据是从2003年8月开始。下载的压缩数据包每个货币对大概200多M(包括Bid和Ask)。解压后每个货币对大概1.6个G(包括Bid和Ask)
作者: kuhasu    时间: 2009-2-13 21:07
原帖由 mugger 于 2009-2-13 17:06 发表
我载了10来个货币对。
用自己写的java程序载的。
10_sec的数据是从2003年8月开始。下载的压缩数据包每个货币对大概200多M(包括Bid和Ask)。解压后每个货币对大概1.6个G(包括Bid和Ask)


总算遇到个会java的。。。。

我不是java程序员,java很菜,请教下以下代码的意思:

(尤其是stamp.append(time).append("[").append(format.format(time)).append("] / ");
result = prime * result + (int) (temp ^ (temp >>> 32));)


public String toString() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
StringBuilder stamp = new StringBuilder();
stamp.append(time).append("[").append(format.format(time)).append("] / ");
stamp.append(open).append(" - ").append(close);
return stamp.toString();
}

@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
long temp;
temp = Double.doubleToLongBits(close);
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(high);
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(low);
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(open);
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(vol);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
谢谢!!!

[ 本帖最后由 kuhasu 于 2009-2-13 21:10 编辑 ]
作者: mugger    时间: 2009-2-13 21:48
就是把一个Candle转成字符串而已。
比如这个Candle是2009-02-12 03:05:10这个时间的,Open是1.3242,Close是1.3223,那么
StringBuilder stamp = new StringBuilder();
//这时stamp是空的
stamp.append(time).append("[").append(format.format(time)).append("] / ");
//stamp的值变成8549823492[2009-02-12 03:05:10.000]/
stamp.append(open).append(" - ").append(close);
//stamp的值变成“8549823492[2009-02-12 03:05:12.000]/1.3242-1.3223”
仅此而已。
hashCode()方法只是为了唯一标识一个CandleData类而已。

如果你下载的是Bin格式的,才需要用他提供的例子。
他的CandleData这个类是为了读BIN格式的。你也不一定要用他的思路。他们网页上已经清楚的说明了各种文件的格式。
你完全可以自己写。
作者: kuhasu    时间: 2009-2-14 00:50
谢谢!


@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
long temp;
temp = Double.doubleToLongBits(close);
result = prime * result + (int) (temp ^ (temp >>> 32));

呢?

还有8549823492是怎么得出来的呢,转换到时间的算法呢?

[ 本帖最后由 kuhasu 于 2009-2-14 00:52 编辑 ]
作者: mugger    时间: 2009-2-14 10:36
8549823492是1970 年1 月1 日00:00:00 GMT 以来到那个时间点经过的毫秒数。这个数字我是为了举例子随便写的。
hashCode()方法只是为了唯一标识一个CandleData类而已。
可参考阅读http://www.javaresearch.org/article/38075.htm
作者: kuhasu    时间: 2009-2-14 15:28
谢谢!
举个例子,对于日期时间的longlong型和价格、数量的8 byte long double(8位长双精度)型
01.01.2004 08:00,80.61,80.71,79.8,83.73,252937

00  00  00  F9  CE  BA  B8  00         01.01.2004 08:00
40  54  27  0A  3D  70   A3  D7        80.61
40  54  2D  70  A3  D7  0A  3D         80.71
40  53  F3  33  33   33   33  33         79.8
40  54  EE  B8  51  EB  85  1F         83.73
41  0E  E0  48  00  00   00   00        252937


用java或者C#,怎样进行数据转换呢
还有就是
temp = Double.doubleToLongBits(close);
result = prime * result + (int) (temp ^ (temp >>> 32));
变量我明白,运算符和函数就不懂,请教下,谢谢
作者: mugger    时间: 2009-2-14 16:24
CandleData里的这个方法就是用来转换的啊。
public void fromBytes(byte[] bytes, int off) {
        time = getLong(bytes, off);
        open = getDouble(bytes, off + 1 * 8);
        close = getDouble(bytes, off + 2 * 8);
        low = getDouble(bytes, off + 3 * 8);
        high = getDouble(bytes, off + 4 * 8);
        vol = getDouble(bytes, off + 5 * 8);
    }
运算符和函数是什么意思,我想您google一下就会很容易找到了。
作者: mugger    时间: 2009-2-14 16:30
另外,统一回答一下你的短消息。
我载的是BIN,他是zip压缩的,java有自带的zip解压缩实现,c#也有很多免费的zip解压缩实现。
我没有转成txt,我要的就是二进制的。
某个目录下批量的转化,我想你很容易可以下写一个的。
另外,建议您仔细阅读他们网站上的说明。里面有很多有用的信息。
作者: kuhasu    时间: 2009-2-14 16:41
原帖由 mugger 于 2009-2-14 16:30 发表
另外,统一回答一下你的短消息。
我载的是BIN,他是zip压缩的,java有自带的zip解压缩实现,c#也有很多免费的zip解压缩实现。
我没有转成txt,我要的就是二进制的。
某个目录下批量的转化,我想你很容易可以下写一 ...



谢谢 我编程方面实在是菜,尤其用C#,java处理数据方面。所以还是决定直接下载那个csv了,尽管稍微慢些。

附上反编译的swf文件。批量下载的时候月份需要注意的是是从0开始代表1月的。
作者: mugger    时间: 2009-2-14 18:18
适合自己的才是最好的!
Good luck!
作者: kuhasu    时间: 2009-2-14 18:33
标题: 回复 18# 的帖子
呵呵,这个东西有什么适合不适合自己的,反正搞完数据也是要共享的。
只不过有方便工具,有几个人互相合作,速度快些罢了。
也不是人人都精通数据转换的数据编程,而且精通一种语言的其他的也不一定精通,熟悉编译的不一定熟悉反编译,
只是这样而已。所以才想到了协作的方式。

bin的文件都是单个的,一段儿一段儿的,那你单个文件怎么用呢?还没有数据库的存储是以一大堆bin做基础的吧
作者: mugger    时间: 2009-2-14 20:33
把文件都拼起来就成一个了~
你也可以不拼,要什么时间的数据,就读什么文件,反正文件命名都有规则的。
至于数据库,bad idea~
作者: kuhasu    时间: 2009-2-14 21:55
原来是这样,单独数据存储的话,的确是个好主意:)
作者: kuhasu    时间: 2009-2-15 02:26
这两天把自己以前会的一个武林绝学——斗转星移给忘了,突然间记起心法,一下子一劳永逸地解决了这个数据问题。

谢谢各位的参与,参加协作的各位,不用再辛苦了,准备收数据吧。


(晚上看了珠光宝气的大结局,还看了两个电影:麦克斯佩恩和叶问。珠光宝气和叶问我推荐)
作者: asdasddd    时间: 2009-6-2 15:02
请问进展如何了?想弄到几年的质量好的数据,有办法吗?谢谢
作者: hanghangzhu    时间: 2010-7-25 10:01
唯一没看懂的贴子,我C语言很厉害滴说。
作者: asfnuts    时间: 2010-8-6 15:03
楼主后来怎么获取到数据的?




欢迎光临 『外汇堂』·专业外汇论坛 (http://www.forex-town.com/) Powered by Discuz! X3.1