2013-10-13 170 views
2

摘要: 我需要使用DDE在Excel中存儲/分析進入1個單元格的實時時間序列。DDE:Excel分析中的時間序列

問題: 由於它是一個不斷變化的單元格,我不知道如何獲取更新值的每個實例,因此我可以在其他公式,繪圖等中使用它。 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 

和代碼數據處理R在作爲正常模塊

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正在返回分辨率爲1秒的DateTime序列。即使可能發生,Excel也會處理太多的數據

+0

這真的很有幫助。我有一段時間沒有使用VBA,但我會給這個鏡頭,看看我是如何做到的。真的很感激詳細的迴應。 – user2039871

+0

你願意爲此付費嗎?我無法讓它工作。 – user2039871

+0

我認爲你應該堅持到現在。發表另外一個問題,一定要[遵循指導方針](http://meta.stackexchange.com/q/156810/159408),特別是發佈您嘗試過的代碼並解釋它如何不做你想做的。包含顯示輸入和輸出樣本數據的示例數據集。如果可以的話,我會幫忙的。 –

0

我建議您嘗試FxOne.com的平臺。
您可以免費試用30天。 如果您是FXCM的客戶,那麼完全免費。

它比excel更強大,因爲不使用VBA,而是適用於算法交易的C++。 VBA非常適合分析,但不適合交易。我試圖做什麼,每次Excel崩潰。有了這個平臺,一切都非常順利。

+0

感謝您的建議。這是一個非常酷的平臺,我一定會更詳細地看看它。 – user2039871