返回列表 上一主題 發帖

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

回復 72# winwin
你把 Dim O5v As Single, H5v As Single, L5v As Single, C5v As Single 相關語句移除
拿掉,不管是 一分 或者是 五分,全都帶入Ov, Hv, Lv, Cv, 因為當時之價量是一樣的。
太多的 IF 也未必是好的處裡, 徒增 CPU 耗時過濾。
然後再試試看。

TOP

回復 71# winwin

整理好了, 先放上來, 請高手指回, 感恩!

    1-5分K量價紀錄-OK-O -R6.rar (42.87 KB)

TOP

回復 70# c_c_lai


   
    感謝您的斧正!  我再度修改後, 現在大致上己沒有問題了;尾盤資料消失的問題己經解決了!

但是5分K 的部分還是會偶爾一、二行時間沒有資料,出現空白。(不知是何問題?  但是1分K的話, 就很正常。)

我明天再測試一下, 不管有沒有問題, 我再把檔案上傳。

5分K.PNG (34.25 KB)

5分K.PNG

TOP

回復 69# winwin
試試看
  1. Public Sub RTimer(tm As Date)
  2.     Dim TimeRange As Range, Rng As Range
  3.     Dim pos As Integer
  4.    
  5.     On Error Resume Next
  6.     '  If (TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub
  7.     '  13:45 這一盤的收盤資料一直空白
  8.     If (TimeValue(Now) > TimeValue("13:46:00")) Then Exit Sub
  9.    
  10.     If (TimeValue(Now) >= TimeValue("08:45:00")) Then         ' 開盤、收盤時段設定
  11.         ' 盤中處理,將資料匯入寫入工作表單內儲存。
  12.         With Sheets("1K")
  13.             If Not IsError(.[B2]) Then
  14.                 .[C1] = "成交價"
  15.                 .[D1] = "最高價"
  16.                 .[E1] = "最低價"
  17.                 .[F1] = "成交量"
  18.                
  19.                 Set TimeRange = .[A:A].Find(TimeSerial(Hour(tm), Minute(tm), 0))  ' 檢查 "A" 欄位對應之時間資料
  20.                 Set Rng = TimeRange.Offset(, 2).Resize(1, 4)
  21.                
  22.                 Rng(1) = Cv                                             ' 成交價
  23.                 Rng(2) = Hv                                             ' 最高價
  24.                 Rng(3) = Lv                                             ' 最低價
  25.                 Rng(4) = Sheets("Sheet1").[H2] - Sheets("Sheet1").[I2]  ' 成交量
  26.                 Sheets("Sheet1").[I2] = Sheets("Sheet1").[H2]           ' 重新設定前成交量
  27.             End If
  28.         End With
  29.          
  30.         '  加入五分鐘之判斷
  31.         If (Minute(tm) * 60 + Second(tm)) Mod 300 = 0 Then                              '  每隔5分鐘執行一次 (5 x 60)
  32.             With Sheets("5K")
  33.                 If Not IsError(.[B2]) Then
  34.                     .[C1] = "成交價"
  35.                     .[D1] = "最高價"
  36.                     .[E1] = "最低價"
  37.                     .[F1] = "成交量"
  38.                     
  39.                     Set TimeRange = .[A:A].Find(TimeSerial(Hour(tm), Minute(tm), 0))  ' 檢查 "A" 欄位對應之時間資料
  40.                     Set Rng = TimeRange.Offset(, 2).Resize(2, 4)
  41.                     
  42.                     '  增加 "漲跌" 欄位之同步寫入
  43.                     Rng(0) = Sheets("Sheet5").[C2]                          ' 漲跌
  44.                     Rng(1) = Cv                                             ' 成交價
  45.                     Rng(2) = Hv                                             ' 最高價
  46.                     Rng(3) = Lv                                             ' 最低價
  47.                     Rng(4) = Sheets("Sheet5").[H2] - Sheets("Sheet5").[I2]  ' 5分成交量
  48.                     Sheets("Sheet5").[I2] = Sheets("Sheet5").[H2]           ' 重新設定前成交量
  49.                 End If
  50.             End With
  51.         End If
  52.     End If
  53. End Sub
複製代碼

TOP

本帖最後由 winwin 於 2017-12-8 14:33 編輯

回復 68# c_c_lai


    感謝鼎力相助, 踓然程式還有一點小問題,但是已經可以讓我把問題 把它處理好,真的幫我解決了大麻煩;真是感謝高手相助!

本著回饋的精祌, 我會把檔案放上來。 我的解決方法法就是為5分K多設一個資料源, 這樣我就可以同時看5分及1分K的量。
1-5分K量價紀錄-OK-O -R4.zip (51.34 KB)
可是我發現一個問題, 就是盤中的高低點位有時與券商的看盤軟體實際上的相差有點大, 不知道可有先進已有解決方案?
還有, 13:45 這一盤的收盤資料一直空白,不會完成。不知問題出在那?

第二個問題, 我想要增加一個或多個其他欄位;(如圖)對EXCEL VBA 實在是不懂; 可以再幫忙一次忙,寫一個例子,真的是非常感謝,謝謝!

TOP

本帖最後由 c_c_lai 於 2017-12-8 07:17 編輯

回復 67# winwin
請將你程式內之 RTimer(tm As Date) 模組替換成下列之更新模組,
再試試看。
  1. Public Sub RTimer(tm As Date)
  2.     Dim TimeRange As Range, Rng As Range
  3.     Dim pos As Integer
  4.    
  5.     On Error Resume Next
  6.     If (TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub
  7.    
  8.     If (TimeValue(Now) >= TimeValue("08:45:00")) Then         ' 開盤、收盤時段設定
  9.         ' 盤中處理,將資料匯入寫入工作表單內儲存。
  10.         With Sheets("Sheet1")
  11.             If Not IsError(.[B2]) Then
  12.                 .[C1] = "成交價"
  13.                 .[D1] = "最高價"
  14.                 .[E1] = "最低價"
  15.                 .[F1] = "成交量"
  16.                
  17.                 Set TimeRange = .[A:A].Find(TimeSerial(Hour(tm), Minute(tm), 0))  ' 檢查 "A" 欄位對應之時間資料
  18.                 Set Rng = TimeRange.Offset(, 1).Resize(1, 4)
  19.                
  20.                 Rng(1) = Cv                                             ' 成交價
  21.                 Rng(2) = Hv                                             ' 最高價
  22.                 Rng(3) = Lv                                             ' 最低價
  23.                 Rng(4) = Sheets("Sheet4").[H2] - Sheets("Sheet4").[I2]  ' 成交量
  24.                 Sheets("Sheet4").[I2] = Sheets("Sheet4").[H2]           ' 重新設定前成交量
  25.             End If
  26.         End With
  27.          
  28.         '  加入五分鐘之判斷
  29.         If (Minute(tm) * 60 + Second(tm)) Mod 300 = 0 Then                              '  每隔5分鐘執行一次 (5 x 60)
  30.             With Sheets("5K")
  31.                 If Not IsError(.[B2]) Then
  32.                     .[C1] = "成交價"
  33.                     .[D1] = "最高價"
  34.                     .[E1] = "最低價"
  35.                     .[F1] = "成交量"
  36.                     
  37.                     Set TimeRange = .[A:A].Find(TimeSerial(Hour(tm), Minute(tm), 0))  ' 檢查 "A" 欄位對應之時間資料
  38.                     Set Rng = TimeRange.Offset(, 1).Resize(1, 4)
  39.                     
  40.                     Rng(1) = Cv                                             ' 成交價
  41.                     Rng(2) = Hv                                             ' 最高價
  42.                     Rng(3) = Lv                                             ' 最低價
  43.                     Rng(4) = Sheets("Sheet4").[H2] - Sheets("Sheet4").[I2]  ' 成交量
  44.                     Sheets("Sheet4").[I2] = Sheets("Sheet4").[H2]           ' 重新設定前成交量
  45.                 End If
  46.             End With
  47.         End If
  48.     End If
  49. End Sub
複製代碼

TOP

回復 66# winwin

1分K量價紀錄-OK-O -R1.zip (49.98 KB)

1分K量價紀錄-OK-O -R1.zip (49.98 KB)

TOP

c_c_lai 發表於 2013-4-19 14:19



    請問這是程式的那一個部分?
我在一分K的開盤價、成交價、最高價、最低價、成交量的程式是沒問題;

我想把它改成5分K的開盤價、成交價、最高價、最低價、成交量,

可是把它改成了N次,奮戰多時, 總是不成功............

可以協助一下嗎? 已經奮戰多時,皆以失敗告終......................

TOP

為了讓更多人進一步明瞭整體的作業過程,未來也可以自己在實務上實際演練
及摩擬,故將作業畫面與程式一併 ...
c_c_lai 發表於 2012-9-29 21:04


請問老師
關於下列這段語法的意思是

turnKey = turnKey + 1
    Sheets("Sheet4").[A3] = "( " & turnKey & " 秒 )"
    If Time >= timeCalc + #12:01:00 AM# Then
        If (Cv > 0) Then Call RTimer(Time)
        timeCalc = TimeSerial(Hour(Time), Minute(Time), 0)   ' 重新設定下一分鐘比對的時間
        If timerEnabled Then Call timerStart
    Else
        Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.inProcess"
    End If



感謝老師指導 謝謝老師 感謝
學習 學習 一直學習

TOP

回復  c_c_lai
請教 c_c_lai大大
若我要每五分鐘紀錄期貨的委買口數 委賣口數 委買筆數 委賣筆數 委買均 ...
n8975067 發表於 2013-4-19 11:23
  1. If (Minute(Time) * 60 + Second(Time)) Mod 300 = 0 Then          '  每隔5分鐘執行一次 (5 x 60)
  2.     '  ------ Your statement -------
  3. End If
複製代碼

TOP

        靜思自在 : 布施如播種,以歡喜心滋潤種子,才會發芽。
返回列表 上一主題