2013-10-13 3 views
2

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

Проблема: Поскольку это 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 тему и скопировать все relavent данные в один присест

На основе этой структуры данных

Based on this data layout

Настройка монитора на открытом мероприятии (место это в 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 для обработки

+0

Это действительно полезно. Я не использовал VBA через некоторое время, но я сделаю это и посмотрю, как я это делаю. Очень ценю подробный ответ. – user2039871

+0

Вы хотели бы закрепить это за определенную плату? Я не могу заставить его работать. – user2039871

+0

Я думаю, вы должны придерживаться SO на данный момент. Отправьте еще один вопрос, обязательно следуйте инструкциям (http://meta.stackexchange.com/q/156810/159408), в частности, напишите код, который вы попробовали, и объясните, как он не делает то, что вы хотите.Включите примерный набор данных, показывающий данные входных и выходных выборок. Я помогу, если смогу. –

0

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

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

+0

Спасибо за рекомендацию. Это действительно классная платформа, и я определенно рассмотрю ее более подробно. – user2039871

Смежные вопросы