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 вылетал. С этой платформой все было очень гладко.