返回列表 上一主題 發帖

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

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

網站各為先進您好~
想請教一下,小弟目前是太平洋證卷抓取DDE相關資料到EXCEL,,再用簡單的EXCEL程式去最運算,
想請教一下,如果我要去記錄每分鐘K線的高低價,該如何去寫ㄋ??
請各為提供意見
感謝萬分

回復 1# lieh_chun
你要的是不是這支程式內容所描述的?
  1. Sub ExeSelf()
  2.     timerEnabled = True

  3.     Sheets("策略記錄").Cells(2, 1) = Now()
  4.    
  5.     On Error Resume Next
  6.     If (TimeValue(Now) > TimeValue("13:46:01")) Then Exit Sub
  7.    
  8.     If (TimeValue(Now) >= TimeValue("08:45:00")) Then         ' 開盤、收盤時段設定
  9.         If IsError(Sheets("策略記錄").Range("B2").Value) Then ' 假設 B2 欄位為多空力道
  10.             Cv(1) = 0
  11.             Cv(2) = 0
  12.             Cv(3) = 0
  13.         Else
  14.             Cv(1) = Sheets("策略記錄").Range("B2").Value   ' 多空力道成交價
  15.             Cv(2) = Sheets("策略記錄").Range("C2").Value   ' 反向勢力成交價
  16.             Cv(3) = Sheets("策略記錄").Range("D2").Value   ' 主力控盤成交價
  17.         End If
  18.          
  19.         If (turnKey = 0 Or Ov(1) = 0) Then ' 當 turnKey 值為0,表示其為初始值設定。
  20.             ' 為考量系統剛連上DDE,有時在第一根數值產生時Ov = Cv值可能為 0 的狀態)。
  21.             Ov(1) = Cv(1)                  ' 多空力道開盤價初始值設定
  22.             Hv(1) = Cv(1)                  ' 多空力道最高價初始值設定
  23.             Lv(1) = Cv(1)                  ' 多空力道最低價初始值設定
  24.                
  25.             Ov(2) = Cv(2)                  ' 反向勢力開盤價初始值設定
  26.             Hv(2) = Cv(2)                  ' 反向勢力最高價初始值設定
  27.             Lv(2) = Cv(2)                  ' 反向勢力最低價初始值設定
  28.                   
  29.             Ov(3) = Cv(3)                  ' 主力控盤開盤價初始值設定
  30.             Hv(3) = Cv(3)                  ' 主力控盤最高價初始值設定
  31.             Lv(3) = Cv(3)                  ' 主力控盤最低價初始值設定
  32.         End If

  33.         turnKey = turnKey + 1
  34.         Sheets("策略記錄").Cells(10, 2) = turnKey & " 秒"

  35.         If (Cv(1) > Hv(1)) Then Hv(1) = Cv(1) ' 判斷多空力道最高價
  36.         If (Cv(2) > Hv(2)) Then Hv(2) = Cv(2) ' 判斷反向勢力最高價
  37.         If (Cv(3) > Hv(3)) Then Hv(3) = Cv(3) ' 判斷主力控盤最高價
  38.          
  39.         If (Cv(1) < Lv(1)) Then Lv(1) = Cv(1) ' 判斷多空力道最低價
  40.         If (Cv(2) < Lv(2)) Then Lv(2) = Cv(2) ' 判斷反向勢力最低價
  41.         If (Cv(3) < Lv(3)) Then Lv(3) = Cv(3) ' 判斷主力控盤最低價
  42.                
  43.     End If
  44.    
  45.     If (turnKey < nums) Then
  46.         Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.ExeSelf"
  47.     Else
  48.         If (Cv(1) <> 0) Then Call Timer
  49.         ' Call Timer
  50.         Call timerStart
  51.     End If
  52. End Sub
複製代碼

TOP

回復 2# c_c_lai

板大您好~
感謝您熱心分享,我想要的期貨每分鐘的成交價高點和低點,不知該如何去編寫??
另外請教一下,如果要記錄每分鐘期貨成交價的高低點,是不是就要改成每秒寫入還是每筆寫入ㄋ??

TOP

回復 3# lieh_chun
上面的實例並非是樣本,它是將每一秒得 O、H、L、C 分別記錄下來,當滿足設定時間(例如一分鐘)
就將資料寫入到指定欄位儲存,如此紀錄上的每分鐘開盤價、最高價、最低價、收盤價都記錄下,
便可做一些統計分析了。

TOP

回復 4# c_c_lai

感謝板大熱心分享,對於EXCEL寫VBA,我是完全門外漢,冒昧請教,我如果如接複製您的程式碼到EXCEL 編碼那貼上,可以執行試跑ㄇ
還是有哪邊需要再修改才能跑??感謝分享:)

TOP

回復 5# lieh_chun
我只將處理 O、H、L、C 、 以及如何應用的模組 (已貼示) 貼上,其它部分須配合
你實際的應用,因每個人切入角度的不同 (券商、需求、應用面等),故此處論壇僅能
提供你個人參考、研究、以及彼此間之討論而已 。
你可以將你目前已成形的檔案以附件上傳,大家再看看能否幫得上忙。

TOP

回復 6# c_c_lai

您好~
我的只是用很簡單的資料去抓取一些相關資料只有設定每分鐘抓取DDE儲存格的資料來做紀錄
您看一下

Option Explicit
Dim LastMin As Integer

Private Sub Workbook_Open()
    Sheets("策略記錄").Cells(4, 2) = 12
    LastMin = Minute(Time)
    Call Timer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer", , False
End Sub


Public Sub Timer()
    Dim Pos As Integer, i As Integer, RangeStr As String
        
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer" '每秒顯示
    Sheets("策略記錄").Cells(1, 1) = Time '將時間show至策略的a1欄位
    Dim HHMM As Integer
    HHMM = Hour(Time) * 100 + Minute(Time)
    If (HHMM < 830 Or HHMM > 1346) Then Exit Sub '營業時間才執行
    If Minute(Time) <> LastMin Then '開始後做
        With Sheets("策略記錄")
            .Cells(4, 2) = .Cells(4, 2) + 1 '將變動行號加一行
            Pos = .Cells(4, 2)
            .Cells(Pos, 1) = Time
            .Cells(Pos, 2) = .Cells(2, 2)
            .Cells(Pos, 3) = .Cells(2, 3)
            .Cells(Pos, 4) = .Cells(2, 4)
            .Cells(Pos, 5) = .Cells(2, 5)
            .Cells(Pos, 6) = .Cells(2, 6)
            .Cells(Pos, 7) = .Cells(2, 7)
            .Cells(Pos, 8) = .Cells(2, 8)
            .Cells(Pos, 9) = .Cells(2, 9)
            .Cells(Pos, 10) = .Cells(2, 10)
            .Cells(Pos, 11) = .Cells(2, 11)
            .Cells(Pos, 12) = .Cells(2, 12)
            .Cells(Pos, 13) = .Cells(2, 13)
            .Cells(Pos, 14) = .Cells(2, 14)
            .Cells(Pos, 15) = .Cells(2, 15)
            .Cells(Pos, 16) = .Cells(2, 16)
            .Cells(Pos, 17) = .Cells(2, 17)
            
            



         
        End With
   
        LastMin = Minute(Time)
    End If
End Sub


像您貼的檔案,我就真的不知道還要修改哪邊,才能自動寫入了,煩請您教導一下(因為我完全不懂VBA編碼........請別見笑)
另外想向您請教一下,您有6月以前的台指奇多空力道的資料及成交價ㄇ??

感謝您

TOP

回復 7# lieh_chun
你把檔案當附件傳來,再幫你看看如何要如何處哩,
因為你哪一個欄位是哪一個,實在無法得知。

TOP

回復 8# c_c_lai
您好~
附檔為我目前用最簡單的時間去紀錄相關資料,幾個問題請教
如果要讓它自動寫入,而不透過前一頁太平洋好神通的DDE抓取
該如何修改程式碼??另外在請教  如果我要記錄每分鐘成交價的最高及最低點
又該如何抓取ㄋ??煩請您幫忙解惑

感謝您!!

DDE.rar (57.81 KB)

TOP

回復 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

        靜思自在 : 我們最大的敵人不是別人.可能是自己。
返回列表 上一主題