按照AB的指南导入FXCM的DDE数据,结果只有一小段2007年的,没有实时的数据。 请各位推荐一个MT4,并介绍一下MT4里面和AB里面应该如何设置好吗? 多谢! 注:AB专业版,无AmiQuote.
是这个,在amibroker的yahoo group里应该也有的,既然用了amibroker,那ami的yahoo group是需要经常访问的了。 http://www.gdynia.mm.pl/~wojtek_f/plug-in.htm 这个应该比通过mt4的dde强。
那个指南的作用是帮你建立一个FXCM的数据库,设定一些常见的货币对(比如EURUSD, USDPJY等)。里面的数据只是例子。实际使用时,反而要先删除,然后在导入最新的历史数据,然后再通过DDE接收实时数据。 等我整理一份,有一些要注意的地方...
今天终于有时间把从MT4导入数据到AB,并设置实时数据更新的过程整理出来。 看上去有点复杂,其实很容易,很多是一次性设置,之后就很快。 按这个方法,很多大的货币对可以轻松获得多年以上的历史数据,并且之后可以不断更新。 ------------------------------------------------------------------- 测试时,其实用哪个MT4平台无所谓,只要包含足够的历史数据即可。 (metaquotes自己的那个历史数据服务器就挺好。) 实际交易时最好用live账号,这样确保MT4里面的数据是准确和实时更新的。 导出MT4数据 首先,你连接的MT4平台要有足够多的历史数据。 然后,设置MT4把这些数据全部都装入到内存中,否则它只会导出当前装入内存中的数据。 MT4设置窗口有一个页是设定装入多少bar的,我通常要把它改到最大值,比如9999999, 这样MT4才会装入所有的bar,当然占用内存会比较多。 接着按F2,打开历史数据窗口,选择一个货币对,选择时间,如果使用1分钟bar的话, 下面的统计是导出文件的大概大小。根据你要开发的策略所需要的数据精度, 比如,我通常是倒出5分钟的bar,这样导出文件会小很多,10年数据大约50MB以内。 ======================================================================== Max# BAR in History (1 minute chart)___导出文件大小___数据时间 9999999(900万)___________________170MB_______至1999年 (至1999年的BAR为300多万) 499999(49万)_____________________23MB________18-20个月 199999(20万)_____________________10MB_________6-7个月 99999(9万)_______________________5MB__________3个月 ======================================================================== 注意: 导出文件名必须和AB里面设置好的ticker名称相同。例如: EURUSD.CSV (我也忘记AB是否能改Ticker的名字,但是为了方便,我每次都是导入前改好) 导入数据到AB 然后打开AB,切换到要导入数据的数据库,比如你刚才使用的FXCM那个。 以EURUSD为例,先删除这个ticker。(菜单 Symbol -> Delete ...) 然后有两种方法导入,都在菜单 File 下面 1) Import Wizard.. 2) Import ASCII.. 1) 是一个向导,一步一步地按照做就可以。最后有个选择可以保持你导入的设置。 2) 是我常用的,比较方便。它是使用预先设置好的值(这个文件可以由Import Wizard生成) 这里面有个地方比较tricky,就是MT4数据的时间和你实时数据源的时间可能不一样! 比如MT4历史数据和一些实时MT4数据相差7个小时, 下面就是我自己使用的一个Import Wizard生成的文件。 你可以直接拷贝下面的内容,然后在AB的目录下创建这个文件即可。 注意,你还要同时修改import.types这个文件,在里面增加一行: MT4 Export (-7hr) (*.csv)|*.csv|mt4_shift_-7hr.format 这样就可以在使用“Import ASCII..“这个方法时直接从导入类型里面选择"MT4 Export (-7hr)", 然后选择刚才从MT4里面导出的那个EURUSD.CSV文件。 导入完成之后,就能从AB里面看到历史数据了。 导入这个过程,可以多试几次,我也是试了很多次才摸索出来。大不了就删了重新导入。 设置DDE数据源 然后设置DDE,请参照官方的指南,有一段提到和MT4集成。 DDE DATA PLUGIN http://www.amibroker.com/dde.html 最后关键一步 注意!到这里还没有完,就算历史数据进去了,DDE也配置好。你看到右下角显示“绿色”,表示连接正常。 但是你的EURUSD还是不会被实时更新。 最后一步,选择菜单 View -> Symbol Information,会打开一个窗口, 显示每个ticker的一些关键配置信息。在"General"大类下面里面有一项叫"Use Only Local Database", 每次删除Ticker,再导入之后,这个值都是“YES“,即表示只使用local数据。 必须改为”NO”之后,AB才会将实时的tick写到这个数据库中,这个时候数据库是local + real-time混合模式。只有这样才能同时包括历史数据,并且接收实时数据。 两个文件的内容: C:\Program Files\AmiBroker\Formats\mt4_shift_-7hr.format Code: # Format definition file generated automatically # by AmiBroker's ASCII Import Wizard $FORMAT Date_YMD, Time, Open, High, Low, Close, Volume $SKIPLINES 0 $SEPARATOR , $CONT 1 $GROUP 1 $AUTOADD 1 $DEBUG 1 [COLOR="Red"]$TIMESHIFT -7[/COLOR] C:\Program Files\AmiBroker\Formats\import.types Code: Default ASCII (*.*)|*.*|default.format [COLOR="Red"]MT4 Export (-7hr) (*.csv)|*.csv|mt4_shift_-7hr.format [/COLOR]MT4 Export (*.csv)|*.csv|mt4.format Yahoo's CSV (*.csv)|*.csv|yahoo.format AmiQuote Historical (*.aqh)|*.aqh|aqh.format AmiQuote Historical (Funds) (*.aqh)|*.aqh|aqhfunds.format AmiQuote Daily (*.aqd)|*.aqd|aqd.format
感谢 espresso 的耐心帮助! 在你的文章指导下已取得了部分成功。请原谅我还有一些很菜鸟的问题: 1,设置了9999999的数字,但下载只有65000根ticks? 2,时间确实差7小时,但感觉似乎应该+7h,而不是-7h? 3,.format和.types文件应该如何打开和创建? 问题很菜,还望指教。 多谢!
1,设置了9999999的数字,但下载只有65000根ticks? =========================================== 设置99999999这个数字只是表示允许MT4可以在内存中装入这么多bar而已。你连接的MT4服务器上首先要有足够的bar,如果它只有65000,那你最多就只能下载到这么多。 还有,MT4似乎是使用类似lazy read的算法,就是只有等你真的需要某个时间段数据时,它才会去读。所以,最好是打开对应货币的图,尽量地往回显示老的bar,这样强制MT4去服务器上读老的数据。当然了,这还是取决于你连接的MT4服务器上的历史数据量。 2,时间确实差7小时,但感觉似乎应该+7h,而不是-7h? =========================================== AB接收实时数据时(至少DDE是这样的),是使用本地电脑上的时间而不是交易所的。这个值和你所在时区有关系,需要自己多试几次,反正就是修改一下 “$TIMESHIFT -7” 这一行。也许 +7 或者 +6 才能对应你的本地时间。 3,.format和.types文件应该如何打开和创建? =========================================== 这两个文件都是简单的文本文件,用notepad就可以。 import.types是AB自己的文件,已经存在。你只是需要在里面增加一行(见我上面贴的例子,红色) mt4_shift_-7hr.format是你运行之后Import Wizard之后生成的,文件名随意,只要以 .format结尾即可。注意,在 import.types里面增加的一行就是引用这个文件,所以名字要对应。
呵呵,这么晚还在搞。 估计是那里没弄对。 mt4_shift_-7hr.format 这个文件是自己创建的。 然后修改import.types 里面增加一行对上面这个文件的引用: MT4 Export (-7hr) (*.csv)|*.csv|mt4_shift_-7hr.format 导入前把AB里面对应ticker的老数据先删除。 之后就开始 File -> import ASCII,在窗口里面选择导入的文件,然后"files of type"就选: “MT4 Export (-7hr) (*.csv)”,其实就是我们刚才增加的那一行, 然后 import ascii 这个工具就会根据你在mt4_shift_-7hr.format这个文件中设置的信息去导入数据了。 实在不行,你先使用import wizard,使用成功之后,让它帮你生成这个 .format 文件吧。 估计需要手工增加这个参数:$TIMESHIFT -7,去看一下使用帮助,我也不太确定这个格式。
昨晚我改完帖正好你没有刷新,没看到我说问题解决了。又麻烦你写了这么多。 昨天问题基本解决了。我现在国内,所以想按北京时间设置,那么行情是周六早上五点结束。可是+7小时后,时间是对了,但是数据只到周五晚24点后面的就没有了,即使我已经下载。 另外想问一下,如果我不是24小时开机,那么以后不开机时的数据应该如何补齐?还是这次下历史数据的办法?会不会把之前下的十年数据都覆盖了?
嗯,24点之后没更新这种问题我没有遇到过。你可以看看这里的设置: File -> Database Settings... -> Intraday Settings 里面有一些关于时间,过滤周末数据等方面的设置。 DDE最大的缺点就是没有回补,所以必须一直开机,特别对于FX这种24小时交易的品种。否则的话,就得重复上面的过程,删除老数据,再次导入。 我现在都是星期六重启服务器,然后开一个星期,不过是运行在VPS上面。