返回列表 上一主題 發帖

『已解決』dde tick資料轉換分鐘資料

回復 4# ko310kmo
我想在每個工作表中J欄分別紀錄下它們的即時資料,再J欄的隔壁想記下它們每分鐘的開、高、收、低、成交量.
這是類似期貨吧 ,我不了解期貨請問一下:
你的附檔Sheet1  只有   履約價 , 即時成交價, 單量.  但各工作表只有 履約價 ,即時成交價,史成交價,單量
開、高、收、低、成交量 的資料 是要從sheet2 取的嗎? 如是 Sheet2的資料會跟著 SHEET1即時成交價 來變動嗎?

TOP

回復 6# ko310kmo
試試看 不理想再說
每分鐘的成交量  沒有成交時間的變動做不出來
  1. Sub Ex()      Dim t As Date, i%, R%, P%   
  2.    With Sheet1
  3.         R = .[B1].End(xlDown).Row
  4.         Do
  5.             ReDim AR(1 To 6, 2 To R)
  6.             t = Time
  7.             For i = 2 To R
  8.                 AR(1, i) = TimeSerial(Hour(Time), Minute(Time), 0)   '每分鐘時間
  9.                 AR(2, i) = .Cells(i, 3)   '每分鐘的開盤價
  10.                 AR(3, i) = .Cells(i, 3)   '每分鐘的最高價
  11.                 AR(5, i) = .Cells(i, 3)   '每分鐘的最低價
  12.                 'AR(6, i) = .Cells(i, 4)   '每分鐘的成交量
  13.             Next
  14.             Do While Minute(Time) = Minute(t)
  15.                 For i = 2 To R
  16.                     DoEvents
  17.                     AR(3, i) = IIf(.Cells(i, 3) > AR(3, i), .Cells(i, 3), AR(3, i)) '每分鐘的最高價
  18.                     AR(5, i) = IIf(.Cells(i, 3) < AR(5, i), .Cells(i, 3), AR(5, i)) '每分鐘的最低價
  19.                     '  AR(6, i) = AR(6, i) + .Cells(i, 4)                             '每分鐘的成交量
  20.                 Next
  21.             Loop
  22.             For i = 2 To R
  23.                 AR(4, i) = .Cells(i, 3)                '每分鐘的收盤價
  24.                 P = Sheets(.Cells(i, 2).Text).Cells(Row.Count, "J").End(xlUp).Row + 1
  25.                 Sheets(.Cells(i, 2).Text).Range("J" & P).Resize(1, 6) = Application.Index(Application.Transpose(AR), i - 1)
  26.             Next
  27.         Loop Until Time <= #1:30:00 PM#
  28.     End With
  29. End Sub
複製代碼

TOP

回復 8# ko310kmo
1為什麼欄要『2 to R』  
第一維的元素 ->每分鐘時間,開、高、收、低、成交量
第二維的元素 -> 履約價的個數

AR( 第一維的元素從  1 To 6,第二維的元素從  2 To R)  第二維的元素->  2 =[B1]的列號 , R = .[B1].End(xlDown).Row ( 履約價最後的範圍)的列號
配合 Sheets(.Cells(i, 2).Text).Range("J" & P).Resize(1, 6) =Application.Index(Application.Transpose(AR), i - 1)
Application.Index 使用為工作表函數 ->傳回指定儲存格的值或陣列中的儲存格陣列。

2. 為什麼『Cells(i, 3) > AR(3, i)』就可以知道它是這一分鐘內的最高價??
一開始設AR(3, i)為最高價     Do While Minute(Time) = Minute(t)  後
  AR(3, i) = IIf(.Cells(i, 3) > AR(3, i)  , 條件成立-> .Cells(i, 3),條件不成立-> AR(3, i)) '轉換為大者是每分鐘的最高價
3.並沒有看到說要把它寫入哪個工作表
寫入在Sheets(.Cells(i, 2).Text)
Sheets(.Cells(i, 2).Text).Range("J" & P).Resize(1, 6) =Application.Index(Application.Transpose(AR), i - 1)

附檔明天再研究

TOP

本帖最後由 GBKEE 於 2011-5-9 07:41 編輯

回復 10# ko310kmo
該物件 RowS
P = Sheets(.Cells(i, 2).Text).Cells(RowS.Count, "J").End(xlUp).Row + 1

8樓的附檔有難度
Sheet1每一履約價要有, 即時成交價的變動時間 及成交量的變動時間,來參考的 才可計算 一分鐘內 即時成交價的成交量的總和
PS: 成交量有變動,即時成交價不一定有變動.

TOP

回復 12# ko310kmo
可用欄位的英文字母表示  Cells(1, "J") =>Range("J1")  
最低價竟然比收盤價高   修正如下
  1. Sub Ex()
  2.     Dim t As Date, i%, R%, P%
  3.     With Sheet1
  4.         R = .[B1].End(xlDown).Row
  5.         Do
  6.             ReDim AR(1 To 6, 2 To R)
  7.             t = Time
  8.             For i = 2 To R
  9.                 AR(1, i) = TimeSerial(Hour(Time), Minute(Time), 0)   '每分鐘時間
  10.                 AR(2, i) = .Cells(i, 3)   '每分鐘的開盤價
  11.                 AR(3, i) = .Cells(i, 3)   '每分鐘的最高價
  12.                 AR(5, i) = .Cells(i, 3)   '每分鐘的最低價
  13.                 'AR(6, i) = .Cells(i, 4)   '每分鐘的成交量
  14.             Next
  15.         If Minute(Time) = Minute(t) Then
  16.             Do While Minute(Time) = Minute(t)
  17.                 For i = 2 To R
  18.                     DoEvents
  19.                     AR(3, i) = IIf(.Cells(i, 3) > AR(3, i), .Cells(i, 3), AR(3, i)) '每分鐘的最高價
  20.                     AR(5, i) = IIf(.Cells(i, 3) < AR(5, i), .Cells(i, 3), AR(5, i)) '每分鐘的最低價
  21.                     '  AR(6, i) = AR(6, i) + .Cells(i, 4)                             '每分鐘的成交量
  22.                 Next
  23.             Loop
  24.             For i = 2 To R
  25.                 AR(4, i) = .Cells(i, 3)                '每分鐘的收盤價
  26.                 P = Sheets(.Cells(i, 2).Text).Cells(Row.Count, "J").End(xlUp).Row + 1
  27.                 Sheets(.Cells(i, 2).Text).Range("J" & P).Resize(1, 6) = Application.Index(Application.Transpose(AR), i - 1)
  28.             Next
  29.         End If
  30.         Loop Until Time <= #1:30:00 PM#
  31.     End With
  32. End Sub
複製代碼

建議此程序 用ThisWorkbook的程序 自動執行
Private Sub Workbook_Open()
        Ex
End Sub

TOP

回復 14# ko310kmo
『Sub test3()
    Call test2
    TickTime = Now + TimeValue("00:01:00")
    Application.OnTime TickTime, "test3"
End Sub』
行不通的 給你的程式一執行後直到   Loop Until Time <= #1:30:00 PM#  才停止的
有事 暫時要下線了!

TOP

        靜思自在 : 為自己找藉口的人永遠不會進步。
返回列表 上一主題