bestlong 怕失憶論壇

 

 

搜索
bestlong 怕失憶論壇 論壇 MS WinForm Tech VBA [Excel VBA]如何把個股每5分鐘的成交價格記錄下來? ...
查看: 6622|回復: 0
go

[Excel VBA]如何把個股每5分鐘的成交價格記錄下來? [複製鏈接]

Rank: 9Rank: 9Rank: 9

1#
發表於 2011-2-24 13:19 |只看該作者 |倒序瀏覽 |打印
資料來源 http://blog.udn.com/WayCheng/2902612

使用DDE將股票看盤軟體中的某個股成交價連結到 Sheet1 的[A2],當 DDE 有資料變動的時候會觸發工作表的 Calculate 事件,所以我們可以把程式碼寫在 Sheet1 的 Worksheet_Calculate() 裡,以每五分鐘為一時段,記錄成交的價格:

D 欄:記錄這個時段的開始價,就是第一筆成交價。
E 欄:記錄這個時段的最高價。
F 欄:記錄這個時段的最低價。
G 欄:記錄這個時段的結束價,就是最後一筆成交價。

這個程式裡面的關鍵就是 Excel 的 "時間值 (TimeValue)",Now() 函數會從系統時鐘取得執行當時的 "日期和時間" 時間值。時間值是一個實數,它的整數部份代表日期,小數部份代表時間。

Excel 用小於1的正小數來表示一天從午夜開始算起的秒數,一天有24x60x60=86400秒,所以每天的第一秒, "12:00:01 AM" 用時間值表示就是 1/86400 (86400分之一, 大約 0.00115741), 第二秒就是 2/86400......依此類推。

所以若要把每 5 分鐘的資料歸在一列, 就產生了 288 這個 "魔術數字",288 = 86400/ (5x60) 就是這麼來的。
  1. Private Sub Worksheet_Calculate()
  2.         Dim NowDateTime, nowTime, startTime, stopTime
  3.         Dim tr As String

  4.         NowDateTime = Now '現在的時間值, 去掉整數部份,
  5.         nowTime = (NowDateTime - Int(NowDateTime)) '得到現在的時間值
  6.         startTime = Range("A6") '開盤時間, 例如: "09:00:00 AM"
  7.         stopTime = Range("A8")  '收盤時間, 例如: "01:30:00 PM"

  8.         If nowTime <= startTime Then '尚未開盤
  9.                 Exit Sub
  10.         ElseIf nowTime > stopTime Then '已經收盤
  11.                 Exit Sub
  12.         ElseIf [A2] <> "-" And [A2] <> "###" Then '清盤的狀態, 不取其資料
  13.                 tr = Int((nowTime - startTime) * 288) + 2 '每差 300 秒就換一列
  14.                 If Range("D" & tr) = "" Then
  15.                         Range("D" & tr) = Range("A2")        '開始價
  16.                 End If
  17.                 If Range("E" & tr) = "" Or Range("A2") > Range("E" & tr) Then
  18.                         Range("E" & tr) = Range("A2")        '最高價
  19.                 End If
  20.                 If Range("F" & tr) = "" Or Range("A2") < Range("F" & tr) Then
  21.                         Range("F" & tr) = Range("A2")        '最低價
  22.                 End If
  23.                 Range("G" & tr) = Range("A2")                '結束價
  24.         End If
  25. End Sub
複製代碼
‹ 上一主題|下一主題

Archiver|怕失憶論壇

GMT+8, 2024-4-25 15:43 , Processed in 0.011323 second(s), 11 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.