2

摘要:我需要使用 DDE 存储/分析进入 Excel 中 1 个单元格的实时时间序列。

问题:因为它是 1 个不断变化的单元格,所以我不知道如何获取更新值的每个实例,以便我可以在其他公式、绘图等中使用它。所以它在 Excel 电子表格中的 1 个单元格会改变每个毫秒,我想得到实际的时间序列(t,t-1,t-2,t-3 等)。我不知道如何存储为时间序列。

详细信息:我正在使用 MetaTrader 4 (MT4) 进行一些分析。导入实时价格的代码如下所示:

=MT4|BID!EURUSD
=MT4|ASK!EURUSD
=MT4|HIGH!EURUSD
=MT4|LOW!EURUSD
=MT4|TIME!EURUSD

我希望能够使用各种公式中的时间序列来实时计算和更新绘图。如果我可以将实时数据发送到 MATLAB,那也会很有帮助。但这一切都必须是实时分析的实时数据。

4

2 回答 2

2

如果您对 VBA 解决方案持开放态度,则可以使用该Workbook.SetLinkOnData方法在传入数据更改时调用 Sub。

我建议只响应TIME主题的更改,并一次性复制所有相关数据

基于此数据布局

基于此数据布局

在 Open 事件上设置监视器(将其放在ThisWorkbook模块中)

Sub Workbook_Open()
    Dim wb As Workbook
    Dim Links As Variant
    Dim i As Long

    Set wb = ThisWorkbook
    Links = wb.LinkSources(xlOLELinks)

    For i = LBound(Links) To UBound(Links)
        If Left$(Links(i), 8) = "MT4|TIME" Then
            wb.SetLinkOnData Links(i), "MT4_OnUpdate"
        End If
    Next
End Sub

并在普通模块中编写数据处理程序

Sub MT4_OnUpdate()
    ' DDE Updated TIME, copy data
    Dim ws As Worksheet
    Dim Source As Range
    Dim Dest As Range

    Set ws = Worksheets("Your DDE Data Sheet")

    With ws
        Set Source = ws.Range("A2:E2")
        Set Dest = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, Source.Columns.Count)
    End With

    Dest.Value = Source.Value
End Sub

这会将单元格复制A2:E2到历史数据列表的底部,每次A2(来自 MT4 的时间戳)更改。

注意:您在 OP 中说要每毫秒更新一次。这不可能发生,因为MT4|TIME返回的 DateTime 序列的分辨率为 1 秒。即使它可能发生,Excel 处理的数据也太多了

于 2013-10-13T03:18:33.303 回答
0

我建议你试试 FxOne.com 的平台。
您可以免费试用 30 天。如果您是 FXCM 的客户,则完全免费。

它比 excel 更强大,因为不使用 VBA,而是使用非常适合算法交易的 C++。VBA 非常适合分析,但不适用于交易。我试图做到底在寻找什么,每次 Excel 崩溃。有了这个平台,一切都非常顺利。

于 2013-10-21T10:25:39.803 回答