Board logo

標題: [發問] RTD抓TICK,如何設定當總量變化時在抓取 [打印本頁]

作者: fansofcheer0987    時間: 2017-5-20 01:48     標題: RTD抓TICK,如何設定當總量變化時在抓取

本帖最後由 fansofcheer0987 於 2017-5-20 01:51 編輯

各位先進好,小弟想發問:
因為我最近在用RTD收TICK,想做新的技術指標,
但是RTD到excel後,執行VBA時若單純只用每隔一段時間就抓取一次,
這樣抓取下來的tick事實上是失真的,並非真正的tick,
我的想法是:因為成交時總量會變,所以只要在總量變時在抓就好,
想請教的是,要如何才能達到呢?
試過setlinkondata方法,卻用不出來
worksheet change 似乎也不行,與RTD公式值未變動有關,
於是上來請教各位大哥先進們,幫幫忙。
作者: GBKEE    時間: 2017-5-20 12:24

本帖最後由 GBKEE 於 2017-5-20 12:26 編輯

回復 1# fansofcheer0987
工作表儲存格的值,字串有變動.     可觸發的事件 :Worksheet_Change
工作表儲存格為公式傳回值的變動.  可觸發的事件 :Worksheet_Calculate

'附檔上工作表(b)儲存格RTD公式有多個,Worksheet_Calculate無法明確指出是哪一個RTD公式在變動

'請在所有儲存格沒有公式的工作表上的A1,寫上總量的RTD公式
'=RTD("xqrtd.rtdserverkgiap",,"FIMTX*1.TF-TotalVolume")
  1. Private Sub Worksheet_Calculate() '只有總量RTD公式,的工作表模組.
  2.    
  3.     If Not IsError([a1]) Then                           '未開盤時 RTD公式傳回 "N/A" 為錯誤值
  4.         If [a1] < 0 And IsNumeric([a1]) Then     '開盤後,總量需有 >0 的數字
  5.                 '執行程式碼  '**抓取你要的資料**
  6.         End If
  7.    End If
  8.    
  9. End Sub
複製代碼

作者: fansofcheer0987    時間: 2017-5-25 20:25

回復 2# GBKEE

GBKEE 大大好,因為最近有些雜事,到今天才有機會測試
Private Sub Worksheet_Calculate() '只有總量RTD公式,的工作表模組.
   
     Set Sht1 = ThisWorkbook.Sheets("c")   '新開的分頁  然後此分頁只有A1 填入公式 RTD總量的報價
   
    If Not IsError([A1]) Then                           '未開盤時 RTD公式傳回 "N/A" 為錯誤值
        If [A1] < 0 And IsNumeric([A1]) Then     '開盤後,總量需有 >0 的數字
                '執行程式碼  '**抓取你要的資料**
               
            xRow = Sht1.Range("A1000000").End(xlUp).Row + 1 '由上往下找
            Sht1.Range("A2").EntireRow.Insert
            Sht1.Range("A2:J2").Value = Sht1.Range("A1:J1").Value
        End If
   End If
   
End Sub

    但是卻沒有效果 我在想是哪裡出錯了,請大大指教
作者: fansofcheer0987    時間: 2017-6-9 16:22

回復 2# GBKEE


    檔案附上 ,麻煩您了,謝謝
作者: GBKEE    時間: 2017-6-12 16:43

回復 4# fansofcheer0987
附檔 Private Sub Worksheet_Calculate()在Module3是一般模組不是工作表模組.
當然沒做用
附檔 工作表a,可能有多筆要記錄
修改如下
  1. Private Sub Worksheet_Calculate() '工作表1(a)模組的重算事件
  2.     Dim i As Long, Sht2 As Worksheet
  3.     Set Sht2 = Sheets("b")
  4.     For i = 2 To Cells(Rows.Count, "h").End(xlUp).Row              '多筆要記錄
  5.         If Not IsError(Range("h" & i)) Then                        '未開盤時 RTD公式傳回 "N/A" 為錯誤值
  6.             If Range("h" & i) > Cells(i, Columns.Count) And IsNumeric(Range("h" & i)) Then      '開盤後,總量需有 >0 的數字
  7.             '** 輔助欄: Cells(i, Columns.Count)** 工作表最右一欄,記錄上一次成交總量
  8.                
  9.                 '執行程式碼  '**抓取你要的資料**
  10.                 Cells(i, Columns.Count) = Range("h" & i)   '記錄此次成交總量
  11.                 Sht2.Range("A2").EntireRow.Insert
  12.                 Sht2.Range("A2:J2").Value = Range("A" & i & ":J" & i).Value
  13.             Else
  14.                 Cells(i, Columns.Count) = ""  '**成交總量歸零
  15.             End If
  16.         Else
  17.             Cells(i, Columns.Count) = ""  '**成交總量歸零
  18.         End If
  19.     Next
  20. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)