返回列表 上一主題 發帖

[發問] 請教抓取太平洋證卷的DDE 要如何從中抓取每分鐘的最大成交價及最小成交價

回復 9# lieh_chun
  1. '[策略記錄] 工作表的程式碼(重算事件 )
  2. Private Sub Worksheet_Calculate()
  3.     Static Msg As Boolean                      '用以判定是否為每日第一次執行
  4.     Static Time_Calculate As Date              '記錄每分鐘的時間
  5.     Static AR                                  '陣列:記錄成交價格
  6.     If Time < #8:30:00 AM# Then Exit Sub
  7.     Application.EnableEvents = False           '停止物件能觸發事件(Worksheet_Calculate)
  8.     If Msg = False Then
  9.         Time_Calculate = TimeSerial(Hour(Time), Minute(Time), 0) '每分鐘的時間
  10.         Range("A12").CurrentRegion.Offset(1) = ""                '清理昨日資料
  11.         ReDim AR(0)                                              '重新設為一元素
  12.     End If
  13.     Msg = True
  14.     If Time >= Time_Calculate + #12:01:00 AM# Then
  15.             With IIf([A13] = "", [A13], Cells(Rows.Count, 1).End(xlUp).Offset(1))
  16.                 .Cells(1, 1) = Time_Calculate                    '時間
  17.                 .Cells(1, 2) = AR(0)                             '開盤價
  18.                 .Cells(1, 3) = Application.Max(AR)               '最高價
  19.                 .Cells(1, 4) = Application.Min(AR)               '最低價
  20.                 .Cells(1, 5) = AR(UBound(AR))                    '收盤價
  21.             End With
  22.             Time_Calculate = TimeSerial(Hour(Time), Minute(Time), 0)
  23.             ReDim AR(0)
  24.     End If
  25.     If AR(UBound(AR)) <> "" Then ReDim Preserve AR(UBound(AR) + 1) '重新再加上一元素
  26.     AR(UBound(AR)) = [f2]                                          '記錄成交價格成交價
  27.     Application.EnableEvents = True           '恢復物件能觸發事件(Worksheet_Calculate)
  28. End Sub
複製代碼

TOP

回復 11# c_c_lai
lieh_chun 他要的是盤中的 Open/High/Low/Close 而不是 Max、Min。
9# 我要記錄每分鐘成交價的最高及最低點    10#程式碼可達成此效果
Open/High/Low/Close 不是對應著每分鐘的  AR(0)'開盤價 /Application.Max(AR)'最高價 / Application.Min(AR)'最低價 /AR(UBound(AR))'收盤價

TOP

本帖最後由 GBKEE 於 2012-8-26 11:49 編輯

回復 14# c_c_lai
ThisWorkbook  模組的程式碼
  1. Public 紀錄_Msg As Boolean
  2. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  3.     紀錄_Msg = True
  4. End Sub
  5. Private Sub Workbook_Open()
  6.     Run "工作表1.紀錄"     ' 程式一啟始,便去自動執行 工作表1.紀錄
  7. End Sub
  8. Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  9.     'ThisWorkbook 的重算事件
  10.     'Sh 傳回是哪一個工作表有重算
  11. End Sub
複製代碼
工作表1模組的程式碼
  1. '工作表1模組的程式碼(重算事件 )
  2. '工作表1 的A1 B1 C2 D1 E1 : 時間/開盤/價最高價/最低價/收盤價
  3. Private Sub Worksheet_Calculate()
  4.     Static Msg As Boolean                      '用以判定是否為每日第一次執行
  5.     Static Time_Calculate As Date              '記錄每分鐘的時間
  6.     Static AR                                  '陣列:記錄成交價格
  7.     If Time < #8:30:00 AM# Then Exit Sub
  8.     Application.EnableEvents = False           '停止物件能觸發事件(Worksheet_Calculate)
  9.     If Msg = False Then
  10.         Time_Calculate = TimeSerial(Hour(Time), Minute(Time), 0) '每分鐘的時間
  11.         Range("A1").CurrentRegion.Offset(1) = ""                '清理昨日資料
  12.         ReDim AR(0)                                              '重新設為一元素
  13.     End If
  14.     Msg = True
  15.     If Time >= Time_Calculate + #12:01:00 AM# Then
  16.             With Cells(Rows.Count, 1).End(xlUp).Offset(1)
  17.                 .Cells(1, 1) = Time_Calculate                    '時間
  18.                 .Cells(1, 2) = AR(0)                             '開盤價
  19.                 .Cells(1, 3) = Application.Max(AR)               '最高價
  20.                 .Cells(1, 4) = Application.Min(AR)               '最低價
  21.                 .Cells(1, 5) = AR(UBound(AR))                    '收盤價
  22.             End With
  23.             Time_Calculate = TimeSerial(Hour(Time), Minute(Time), 0)
  24.             ReDim AR(0)
  25.     End If
  26.     If AR(UBound(AR)) <> "" Then ReDim Preserve AR(UBound(AR) + 1) '重新再加上一元素
  27.     AR(UBound(AR)) = [iv1]                      '記錄成交價格成交價
  28.     Application.EnableEvents = True           '恢復物件能觸發事件(Worksheet_Calculate)
  29. End Sub
  30. '樓主檔案是引用太平洋證券的DDE =好神通!D4 不必有此程序
  31. '紀錄程序:是測試Worksheet_Calculate的正確性
  32. Private Sub 紀錄()
  33.     '紀錄時間執行迴圈 勿執行其他程式或輸入資料
  34.     Dim t As Date, 價格(1 To 4) As Single
  35.     價格(1) = 100
  36.     價格(2) = Round(價格(1) + 價格(1) * 0.07, 2)
  37.     價格(3) = Round(價格(1) - 價格(1) * 0.07, 2)
  38.     t = Time
  39.     Do
  40.         DoEvents
  41.         If Time > t + #12:00:05 AM# Then
  42.             t = Time
  43.             價格(4) = Round((價格(2) - 價格(3) + 1) * Rnd() + 價格(3), 2) '成交價的亂數
  44.             If 價格(4) > 價格(2) Then 價格(4) = 價格(2)
  45.             If 價格(4) < 價格(3) Then 價格(4) = 價格(3)
  46.             [iv1] = "=" & 價格(4)      '儲存格公式
  47.     '****    要觸動Worksheet_Calculate: 儲存格公式之值有變動  ****
  48.             Debug.Print [iv1]
  49.         End If
  50.     Loop While ThisWorkbook.紀錄_Msg = True Or Time <= #1:30:00 PM#
  51.     '關閉檔檔案 或 1:30:00 PM  停止紀錄
  52. End Sub
複製代碼

TOP

回復 18# lieh_chun
這 工作表1模組 是 WorkSheet 物件的模組
15# 工作表1模組的程式碼, 可複製在任一 WorkSheet 物件的模組

TOP

        靜思自在 : 虛空有盡.我願無窮,發願容易行願難。
返回列表 上一主題