求助!如何导入MT4的DDE数据?

Discussion in 'AmiBroker' started by cat, Sep 8, 2010.

  1. cat

    cat

    按照AB的指南导入FXCM的DDE数据,结果只有一小段2007年的,没有实时的数据。


    请各位推荐一个MT4,并介绍一下MT4里面和AB里面应该如何设置好吗?


    多谢!

    注:AB专业版,无AmiQuote.
     
  2. 我记得好像有个专门的mt4-ab的工具的,论坛里我好像过去贴过,我去查查我的地址薄里有没有保留。
     
  3. cat

    cat

    多谢 wj2000 的帮助!!!

    你是我们所有人的学习榜样!真心话!
     
  4. cat

    cat

    按提示在Dos下输入rateserver.exe /regserver,Win7总是显示意外错误。

    有哪位也碰到吗?

    请问如何解决?
     
  5. 那个指南的作用是帮你建立一个FXCM的数据库,设定一些常见的货币对(比如EURUSD, USDPJY等)。里面的数据只是例子。实际使用时,反而要先删除,然后在导入最新的历史数据,然后再通过DDE接收实时数据。

    等我整理一份,有一些要注意的地方...
     
  6. 今天终于有时间把从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
    
     
  7. cat

    cat

    感谢 espresso 的耐心帮助!

    在你的文章指导下已取得了部分成功。请原谅我还有一些很菜鸟的问题:


    1,设置了9999999的数字,但下载只有65000根ticks?

    2,时间确实差7小时,但感觉似乎应该+7h,而不是-7h?

    3,.format和.types文件应该如何打开和创建?


    问题很菜,还望指教。

    多谢!
     
  8. cat

    cat

    第一个问题已解决,下载了近380万个Bars.
     
  9. 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里面增加的一行就是引用这个文件,所以名字要对应。
     
  10. GREAT! the most important progress.. ;)
     
  11. cat

    cat

    三个问题都解决了,这是太感谢了!

    等周一再试实时数据了。



    多谢多谢!!!
     
  12. cat

    cat

    。。。
     
  13. 呵呵,这么晚还在搞。
    估计是那里没弄对。

    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,去看一下使用帮助,我也不太确定这个格式。
     
  14. cat

    cat

    昨晚我改完帖正好你没有刷新,没看到我说问题解决了。又麻烦你写了这么多。

    昨天问题基本解决了。我现在国内,所以想按北京时间设置,那么行情是周六早上五点结束。可是+7小时后,时间是对了,但是数据只到周五晚24点后面的就没有了,即使我已经下载。

    另外想问一下,如果我不是24小时开机,那么以后不开机时的数据应该如何补齐?还是这次下历史数据的办法?会不会把之前下的十年数据都覆盖了?
     
  15. 嗯,24点之后没更新这种问题我没有遇到过。你可以看看这里的设置:
    File -> Database Settings... -> Intraday Settings
    里面有一些关于时间,过滤周末数据等方面的设置。

    DDE最大的缺点就是没有回补,所以必须一直开机,特别对于FX这种24小时交易的品种。否则的话,就得重复上面的过程,删除老数据,再次导入。

    我现在都是星期六重启服务器,然后开一个星期,不过是运行在VPS上面。
     
  16. cat

    cat

    DDE还没有解决,AB已经坏掉了。给他们写信了。看来是没缘分。


    同时对只做外汇的朋友们说一下:MT4够了。别舍近求远,给自己找事了。:(
     
  17. cat

    cat

    Tomasz回信了,又能用了。

    继续折腾DDE。

    忠告计算机水平有限的朋友要三思啊,这是个人开发的软件,适合专业人士。再次敬仰坛里的高人们。。。
     
  18. AB坏了,是不是你用到太猛了一点?:)
    AB的技术支持回复是挺快的,有时候TJ自己也会冒个泡。

    cat说得对,只做外汇的话,MT4已经是很不错了。至少像历史数据就不用这么费劲。