DDE: временной ряд в анализе Excel

Резюме: мне нужно хранить / анализировать временные ряды, которые входят в 1 ячейку в Excel, используя DDE.

Проблема: поскольку постоянно изменяется 1 ячейка, я не знаю, как получить каждый экземпляр обновленного значения, чтобы использовать его в других формулах, графиках и т. Д. Таким образом, его 1 ячейка в электронной таблице Excel, которая изменяет каждую миллисекунды, и я хочу получить фактические временные ряды (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, это было бы также полезно. Но все это должны быть живые данные в анализе в реальном времени.

Спасибо за любую помощь.

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 для обработки

Я предлагаю вам попробовать платформу FxOne.com.
Вы можете попробовать в течение 30 дней бесплатно. Если вы являетесь клиентом FXCM, то это абсолютно бесплатно.

Это мощнее, чем Excel, потому что не использовать VBA, но C++, который идеально подходит для алгоритмической торговли. VBA очень хорош для анализа, но не для торговли. Я пытался делать то, что искал, и каждый раз Excel вылетал. С этой платформой все было очень гладко.

Другие вопросы по тегам