返回列表 上一主題 發帖

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

回復 8# c_c_lai
我是使用EASYWIN的dde訊號,如果要每30秒記錄一趟上面所有的資料該如何寫VBA?因為套表上去都會產生錯誤搞不清楚問題出在哪???

麻煩您了謝謝!!

EASYWIN0909.rar (1.95 KB)

TOP

回復  c_c_lai
我是使用EASYWIN的dde訊號,如果要每30秒記錄一趟上面所有的資料該如何寫VBA?因為套表上去 ...
ribbits 發表於 2012-9-9 14:31

貼上程式碼,供你參考:
  1. Option Explicit
  2. Dim timerEnabled As Boolean    ' 判定開啟本工作表單的時段是否為開盤前啟動。

  3. Private Sub Workbook_Open()
  4.     Dim Pos As Long             ' 將每隔 "多少時間" 處理時段,移到此處來處理。
  5.     timerEnabled = False

  6.     Pos = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row   ' 求出該欄之最後使用列數
  7.     If (Pos <= 1) Then Pos = 1
  8.     Sheets("策略記錄").[A4] = "已匯入 " & (Pos - 1) & " 筆資料"
  9.     Call timerStart      ' 程式一啟始,便去自動執行 timerStart
  10. End Sub

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

  17. Public Sub ATimer()
  18.     Dim Pos As Long             ' 將每隔 "多少時間" 處理時段,移到此處來處理。
  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("Data")
  26.             Pos = .Range("B" & Rows.Count).End(xlUp).Row   ' 求出該欄之最後使用列數
  27.             If (Pos <= 1) Then Pos = 1
  28.             Pos = Pos + 1                   ' 將變動行號加一行
  29.             Sheets("策略記錄").[A4] = "已匯入 " & (Pos - 1) & " 筆資料"

  30.             If Not IsError(Sheets("策略記錄").[E2]) Then
  31.                  .Cells(Pos, 1) = Date                              ' 日期
  32.                  .Cells(Pos, 2) = Time                              ' 時間
  33.                  .Cells(Pos, 3) = Sheets("策略記錄").[E2]           ' 成交價
  34.                  .Cells(Pos, 4).Offset(0).Resize(, 3) = Sheets("策略記錄").[G2:I2].Value
  35.                  .Cells(Pos, 7) = Sheets("策略記錄").[K2]           ' 成交量
  36.                 .Cells(Pos, 8).Offset(0).Resize(, 8) = Sheets("策略記錄").[O2:V2].Value
  37.             End If
  38.         End With
  39.     End If
  40.     If timerEnabled Then Call timerStart
  41. End Sub

  42. Sub timerStart()
  43.     If timerEnabled Then
  44.         ' 第二次(含)以後均以設定之 "間隔時段" 來處理執行序的作業。
  45.         Application.OnTime (Now + TimeValue("00:00:30")), "ThisWorkbook.ATimer"
  46.     Else
  47.         timerEnabled = True
  48.         
  49.         ' 將第一次啟動時間更改為設定 "開盤時間"前,如果開啟 Excel 時,已經過了設定 "開盤時間",則一進入系統即直接去執行紀錄作業。
  50.         If (TimeValue(Now) <= TimeValue("08:45:00")) Then
  51.             Application.OnTime (TimeValue("08:45:00")), "ThisWorkbook.ATimer"
  52.         Else
  53.             ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,
  54.             ' 這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  55.             Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.ATimer"
  56.         End If
  57.     End If
  58. End Sub
複製代碼
因為你目前無權下載,所以將執行畫面貼示,你只要照著修正即可:

EASYWIN0909.rar (12.11 KB)

TOP

回復 21# ribbits
對不起,剛才為了測試而忘瞭將它更改回來,請將下列之 Remark 修正回來:
  1. Public Sub ATimer()
  2.     Dim Pos As Long             ' 將每隔 "多少時間" 處理時段,移到此處來處理。
  3.    
  4.     On Error Resume Next
  5.     ' If (TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub
複製代碼
正確為 (最後一行):
  1. Public Sub ATimer()
  2.     Dim Pos As Long             ' 將每隔 "多少時間" 處理時段,移到此處來處理。
  3.    
  4.     On Error Resume Next
  5.     If (TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub
複製代碼
謝謝!

TOP

請教c_clai大,有辦法盤中即時畫出一個總委買口減去總委賣口的圖嗎?
謝謝回答

TOP

請教c_clai大,有辦法盤中即時畫出一個總委買口減去總委賣口的圖嗎?
謝謝回答
steveyeh168 發表於 2012-9-10 00:29

你只要多增加一個欄位名稱假設定為 "散戶方向",
然後以此欄作為 "選取資料" 項就可以畫出圖表了。

TOP

回復 23# c_c_lai


   我對VBA真的不懂,剛剛把程式碼照單貼上還是錯誤一堆,請問是貼在WORKBOOK上嗎?

還有你這所謂的錯誤從上面看兩個程式碼是完全一樣的啊!!

真的不懂:(

TOP

本帖最後由 c_c_lai 於 2012-9-10 12:13 編輯

回復 26# ribbits
貼在 ThisWorkbook 內。
舊的友加上 '
正確地已刪掉 '

TOP

c_c_lai大,我是小學生,專程請教......
1.打開easywin,
2.DDE欄位要先跟前圖一像欄位?
3.然後把source code貼到ThisWorkbook,另存再打開?
4.隔日開盤等畫圖(還未加入委買賣口相減)嗎?
謝謝幫忙

TOP

回復 27# c_c_lai

編譯時都會跳到這Private Sub Workbook_Open()
然後無法執行,這問題出現在哪邊?

還有,原始的DDE訊號欄是在策略記錄還是Data上?

另外關於您這些與法與抓取模式能詳細說明一下嗎?讓初學者把基礎弄清楚而不是照抄而不知所云,謝謝!

或者,您能指引一下哪邊有能針對VBA做詳細說明的???

TOP

回復  c_c_lai

編譯時都會跳到這Private Sub Workbook_Open()
然後無法執行,這問題出現在哪邊?

還 ...
ribbits 發表於 2012-9-10 23:09

這份圖表應該已回答你的問題了,如仍不解你只好祈求上蒼了!

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題