返回列表 上一主題 發帖

如何將台指期的每一分鐘資料都紀錄在sheet 1裡..請教版上高手前輩~~

如何將台指期的每一分鐘資料都紀錄在sheet 1裡..請教版上高手前輩~~

各位高手前輩:中秋佳節快樂

我曾套用,版上大分享的程式碼,連上[看盤軟體DDE]卻不會動。想請問版大,我該怎麼改才可以使用。
現在我想重新建立新的檔,請先讓我簡單說明我的需求:
1.sheet 4 是看盤軟體DDE輸出到Excel的資料。
2.我希望能將台指期的每一分鐘資料都紀錄在sheet 1裡,不是直接紀錄DDE回傳的資料,
  而是紀錄sheet 4每一分鐘的[成交價][最高][最低][成交量]
以上用Excel不知是否可行?請教版上高手前輩~~

附上:我的[看盤軟體DDE]轉出到Excel沒程式碼的(如圖)

TX00a.zip (4.99 KB)

50 字節以內
不支持自定義 Discuz! 代碼

回復 1# cfuxiong
中秋佳節快樂!
我在 Sheet4 多增加一個欄位,專為處理每一分鐘後之 "成交量" 數據。
如何將台指期的每一分鐘資料都紀錄.rar (17.24 KB)

TOP

回復 2# c_c_lai
最佳的中秋節禮物...擁滿懷的『感謝』給你[c_c_lai]~~
剛剛測試很滿意,接著等星期一再實測了~~謝謝~~
50 字節以內
不支持自定義 Discuz! 代碼

TOP

為了讓更多人進一步明瞭整體的作業過程,未來也可以自己在實務上實際演練
及摩擬,故將作業畫面與程式一併貼附上來分享。
希望每個人都能從中學習領悟、寫出更佳的程式,再將成果分享提供給大家!
  1. Option Explicit

  2. Dim Ov As Single, Hv As Single, Lv As Single, Cv As Single
  3. Dim timerEnabled As Boolean    ' 判定開啟本工作表單的時段是否為開盤前啟動。
  4. Public turnKey As Integer

  5. Private Sub Workbook_Open()
  6.     timerEnabled = False
  7.     Sheets("Sheet4").[I2] = Sheets("Sheet4").[H2]     ' 設定前成交量
  8.     Call timerStart            ' 程式一啟始,便去自動執行 timerStart
  9. End Sub

  10. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  11.     On Error Resume Next
  12.     Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.RTimer", , False
  13.    
  14.     Me.Save
  15. End Sub

  16. Public Sub RTimer(tm As Date)
  17.     Dim TimeRange As Range, Rng As Range
  18.     Dim pos As Integer
  19.    
  20.     On Error Resume Next
  21.     If (TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub
  22.    
  23.     If (TimeValue(Now) >= TimeValue("08:45:00")) Then         ' 開盤、收盤時段設定
  24.         ' 盤中處理,將資料匯入寫入工作表單內儲存。
  25.         With Sheets("Sheet1")
  26.             If Not IsError(.[B2]) Then
  27.                 .[B1] = "成交價"
  28.                 .[C1] = "最高價"
  29.                 .[D1] = "最低價"
  30.                 .[E1] = "成交量"
  31.                
  32.                 Set TimeRange = .[A:A].Find(TimeSerial(Hour(tm), Minute(tm), 0))  ' 檢查 "A" 欄位對應之時間資料
  33.                 Set Rng = TimeRange.Offset(, 1).Resize(1, 4)
  34.                
  35.                 Rng(1) = Cv                                             ' 成交價
  36.                 Rng(2) = Hv                                             ' 最高價
  37.                 Rng(3) = Lv                                             ' 最低價
  38.                 Rng(4) = Sheets("Sheet4").[H2] - Sheets("Sheet4").[I2]  ' 成交量
  39.                 Sheets("Sheet4").[I2] = Sheets("Sheet4").[H2]           ' 重新設定前成交量
  40.             End If
  41.         End With
  42.     End If
  43. End Sub

  44. Sub timerStart()
  45.     turnKey = 0                  ' 計數器重新歸零
  46.     Sheets("Sheet4").[A3] = "( " & turnKey & " 秒 )"
  47.    
  48.     If timerEnabled Then
  49.         ' 第二次(含)以後均以設定之 "間隔時段" 來處理執行序的作業。
  50.         Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.inProcess"
  51.     Else
  52.         timerEnabled = True
  53.         
  54.         ' 將第一次啟動時間更改為設定 "開盤時間"前,如果開啟 Excel 時,已經過了設定 "開盤時間",則一進入系統即直接去執行紀錄作業。
  55.         If (TimeValue(Now) <= TimeValue("08:45:00")) Then
  56.             Sheets("Sheet1").[B2:E301].ClearContents      ' 清除前一日之資料
  57.             Application.OnTime (TimeValue("08:45:00")), "ThisWorkbook.inProcess"
  58.         Else
  59.             ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,
  60.             ' 這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  61.             Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.inProcess"
  62.         End If
  63.     End If
  64. End Sub

  65. Private Sub inProcess()
  66.     Static Msg As Boolean          ' 用以判定是否為每日第一次執行
  67.     Static timeCalc As Date        ' 記錄每分鐘的時間
  68.    
  69.     On Error Resume Next
  70.     If (TimeValue(Now) < TimeValue("08:45:00") Or TimeValue(Now) > TimeValue("13:46:01")) Then Exit Sub
  71.       
  72.     If Msg = False Then
  73.         timeCalc = TimeSerial(Hour(Time), Minute(Time), 0)   ' 設定目前起始的時間
  74.         Msg = True
  75.     End If
  76.    
  77.     If IsError(Sheets("Sheet4").Range("B2").Value) Then
  78.         Cv = 0
  79.     Else
  80.         Cv = Sheets("Sheet4").Range("B2").Value    ' 成交價
  81.     End If
  82.          
  83.     If (turnKey = 0 Or Ov = 0) Then
  84.         Ov = Cv                                      ' 開盤價
  85.         Hv = Cv                                      ' 最高價
  86.         Lv = Cv                                      ' 最低價
  87.     End If
  88.         
  89.     If (Cv > Hv) Then Hv = Cv                        ' 最高價
  90.     If (Cv < Lv) Then Lv = Cv                        ' 最低價
  91.          
  92.     turnKey = turnKey + 1
  93.     Sheets("Sheet4").[A3] = "( " & turnKey & " 秒 )"
  94.     If Time >= timeCalc + #12:01:00 AM# Then
  95.         If (Cv > 0) Then Call RTimer(Time)
  96.         timeCalc = TimeSerial(Hour(Time), Minute(Time), 0)   ' 重新設定下一分鐘比對的時間
  97.         If timerEnabled Then Call timerStart
  98.     Else
  99.         Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.inProcess"
  100.     End If
  101. End Sub
複製代碼

TOP

回復 4# c_c_lai
c_c_lai版大你好;經過三天的實測,有時會當機(資料沒進來)待多觀測幾日再請教了,
整體上非常滿意~~...謝謝!!
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 5# cfuxiong
在跑這支程式執行中,切記勿開啟另一隻Excel 程式,請回憶看看是否有這種情形?
如果只是單純跑這隻的話,除非是電腦本身有狀況,你說的情況是不可能會發生的!

TOP

回復 5# cfuxiong
還有如果券商的軟體掛了重新開啟, EXCEL 亦要一併先予關閉後再開 (重新連結DDE)。

TOP

回復 7# c_c_lai
c_c_lai版大你好;昨天實測是有與[量態]同時使用....
今天就沒問題了...那要與[量態]併用是否就無解?
因看盤軟體dde有[委買賣量]沒有[委買賣筆數]不能計算[量態]~
謝謝回應與指導~~
能否給與指導 cfuxiong@gmail.com
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復  c_c_lai
c_c_lai版大你好;昨天實測是有與[量態]同時使用....
今天就沒問題了...那要與[量態]併用 ...
cfuxiong 發表於 2012-10-4 19:10

能不能將它們合併在一個 EXCEL 內應用?
這也是我一直的困擾,不知是 EXCEL 的 VBA 相互間處理所導致,還是其它因素?

TOP

回復 9# c_c_lai
c_c_lai版大你好;今天換倉DDE又要重新建立,那我們所編輯的VBA要如何移轉。
請給予指導...謝謝!!
50 字節以內
不支持自定義 Discuz! 代碼

TOP

        靜思自在 : 人的心地是一畦田,土地沒有播下好種子,也長不出好的果實。 -
返回列表 上一主題