Board logo

標題: 『已解決』dde tick資料轉換分鐘資料 [打印本頁]

作者: ko310kmo    時間: 2011-5-5 17:17     標題: 『已解決』dde tick資料轉換分鐘資料

本帖最後由 ko310kmo 於 2011-5-10 23:06 編輯

我是使用永豐金的(e-leader)的DDE
我每日都會篩選出我今天想觀察的履約價,列在Sheet1
並以各別履約價命名新增工作表,記錄下它的即時資料

我現在的問題在於e-leader是dde是沒有日期欄位
我想在每個工作表中J欄分別紀錄下它們的即時資料
再J欄的隔壁想記下它們每分鐘的開、高、收、低、成交量
有想法,但卻不知該從何做起!!
請各位大大幫忙!! 謝謝
作者: luhpro    時間: 2011-5-5 21:41

回復 1# ko310kmo

首先要抓取即時報價軟體內的資料,
最簡單的方式就是採用該軟體自帶的匯出到(或是拖曳到) Excel 表格中的功能,
匯出後在Excel表上的就是即時的報價資料, (記得開報價軟體)
如此每隔一段時間 Copy 一次到其他表格內應該就是你要的東西了.

而日期可以用MyDate = Date 抓,
時間就抓目前的時間 : MyTime = Time)

至於每隔一段時間就要做某件事的方式就請爬爬文囉,
此站上之前已不少人問過,
可供參考的例子應該滿多的.
作者: kimo5566    時間: 2011-5-5 22:07

回復 1# ko310kmo

時間上語法可以參考我Po的文 (要感謝板主的解答)
也有類似的問題
作者: ko310kmo    時間: 2011-5-5 22:35

本帖最後由 ko310kmo 於 2011-5-6 10:34 編輯

回復 2# luhpro


『首先要抓取即時報價軟體內的資料,
最簡單的方式就是採用該軟體自帶的匯出到(或是拖曳到) Excel 表格中的功能,
匯出後在Excel表上的就是即時的報價資料, (記得開報價軟體)
如此每隔一段時間 Copy 一次到其他表格內應該就是你要的東西了.』

這裡我本來就已經做出來了,絕對不是偷懶沒想過,就貼上來問大家

我有搜尋過資料,但多半是一對一的(針對一檔股票or一檔期貨)
像我這種一對多個的好像比較少,而且我怕我的Calculate事件會負擔過大or發生錯亂
還有也比較少看到同時多個表格都進行即時價格持續記錄並抓出每一分鐘的開、高、收、低、成交量的寫法
而且我還是小學生階級,無法開附件來看
所以才會貼出來請教大家的,謝謝。
作者: GBKEE    時間: 2011-5-6 08:29

回復 4# ko310kmo
我想在每個工作表中J欄分別紀錄下它們的即時資料,再J欄的隔壁想記下它們每分鐘的開、高、收、低、成交量.
這是類似期貨吧 ,我不了解期貨請問一下:
你的附檔Sheet1  只有   履約價 , 即時成交價, 單量.  但各工作表只有 履約價 ,即時成交價,史成交價,單量
開、高、收、低、成交量 的資料 是要從sheet2 取的嗎? 如是 Sheet2的資料會跟著 SHEET1即時成交價 來變動嗎?
作者: ko310kmo    時間: 2011-5-6 10:25

本帖最後由 ko310kmo 於 2011-5-6 10:36 編輯

回復 5# GBKEE


每一個工作表的歷史成交價是利用sheet1的變動來紀錄的,只要一變動就會往J欄一下向下紀錄,
我想從J欄的紀錄中抓出它每一分鐘的開、高、收、低、總量
(J欄是被動接受DDE傳來的值,每秒不停的接收,我想每到一分鐘就統計出它的開、高、收、低、成交量)
sheet2其實只是我篩選出履約價的工具,跟其他sheet沒有太大的關係
我是想在sheet1的Calculate事件寫入程式,以完成
同時多個表格都進行各自的歷史成交價持續記錄並抓出每一分鐘的開、高、收、低、成交量的寫法
但怕會負擔過大or發生錯亂抓不到正真變動的儲存格
謝謝
作者: GBKEE    時間: 2011-5-6 21:01

回復 6# ko310kmo
試試看 不理想再說
每分鐘的成交量  沒有成交時間的變動做不出來
  1. Sub Ex()      Dim t As Date, i%, R%, P%   
  2.    With Sheet1
  3.         R = .[B1].End(xlDown).Row
  4.         Do
  5.             ReDim AR(1 To 6, 2 To R)
  6.             t = Time
  7.             For i = 2 To R
  8.                 AR(1, i) = TimeSerial(Hour(Time), Minute(Time), 0)   '每分鐘時間
  9.                 AR(2, i) = .Cells(i, 3)   '每分鐘的開盤價
  10.                 AR(3, i) = .Cells(i, 3)   '每分鐘的最高價
  11.                 AR(5, i) = .Cells(i, 3)   '每分鐘的最低價
  12.                 'AR(6, i) = .Cells(i, 4)   '每分鐘的成交量
  13.             Next
  14.             Do While Minute(Time) = Minute(t)
  15.                 For i = 2 To R
  16.                     DoEvents
  17.                     AR(3, i) = IIf(.Cells(i, 3) > AR(3, i), .Cells(i, 3), AR(3, i)) '每分鐘的最高價
  18.                     AR(5, i) = IIf(.Cells(i, 3) < AR(5, i), .Cells(i, 3), AR(5, i)) '每分鐘的最低價
  19.                     '  AR(6, i) = AR(6, i) + .Cells(i, 4)                             '每分鐘的成交量
  20.                 Next
  21.             Loop
  22.             For i = 2 To R
  23.                 AR(4, i) = .Cells(i, 3)                '每分鐘的收盤價
  24.                 P = Sheets(.Cells(i, 2).Text).Cells(Row.Count, "J").End(xlUp).Row + 1
  25.                 Sheets(.Cells(i, 2).Text).Range("J" & P).Resize(1, 6) = Application.Index(Application.Transpose(AR), i - 1)
  26.             Next
  27.         Loop Until Time <= #1:30:00 PM#
  28.     End With
  29. End Sub
複製代碼

作者: ko310kmo    時間: 2011-5-8 20:58

回復 7# GBKEE

大大不好意思
因為我是初學者,陣列還不是學的很好,所以有幾個問題想請教,
1.
『AR(1 To 6, 2 To R)』是(列,欄)的意思對吧!!
但不懂的是,為什麼欄要『2to R』
R = .[B1].End(xlDown).Row
是算新增了幾個工作表嗎?

2.
Cells(i, 3)是即時價格
為什麼『Cells(i, 3) > AR(3, i)』就可以知道它是這一分鐘內的最高價??

3.『Application.Index(Application.Transpose(AR), i - 1)』
請問這段的意思是什麼,有google過,但還是不太懂它們的解釋的意義.


大大寫的開、高、低,等三價的程式,並沒有看到說要把它寫入哪個工作表,
這樣會每個sheet各別計算嗎?(因為還沒開盤,還沒測試過)
像收盤價就有寫
P = Sheets(.Cells(i, 2).Text).Cells(Row.Count, "J").End(xlUp).Row + 1
Sheets(.Cells(i, 2).Text).Range("J" & P).Resize(1, 6) =Application.Index(Application.Transpose(AR), i - 1)
那它可以知道資料是要寫去哪一個工作表,其他三價的沒寫,會存對地方嗎??


附上檔案讓大大更了解我的架構與想法!![attach]6065[/attach]
作者: GBKEE    時間: 2011-5-8 22:05

回復 8# ko310kmo
1為什麼欄要『2 to R』  
第一維的元素 ->每分鐘時間,開、高、收、低、成交量
第二維的元素 -> 履約價的個數

AR( 第一維的元素從  1 To 6,第二維的元素從  2 To R)  第二維的元素->  2 =[B1]的列號 , R = .[B1].End(xlDown).Row ( 履約價最後的範圍)的列號
配合 Sheets(.Cells(i, 2).Text).Range("J" & P).Resize(1, 6) =Application.Index(Application.Transpose(AR), i - 1)
Application.Index 使用為工作表函數 ->傳回指定儲存格的值或陣列中的儲存格陣列。

2. 為什麼『Cells(i, 3) > AR(3, i)』就可以知道它是這一分鐘內的最高價??
一開始設AR(3, i)為最高價     Do While Minute(Time) = Minute(t)  後
  AR(3, i) = IIf(.Cells(i, 3) > AR(3, i)  , 條件成立-> .Cells(i, 3),條件不成立-> AR(3, i)) '轉換為大者是每分鐘的最高價
3.並沒有看到說要把它寫入哪個工作表
寫入在Sheets(.Cells(i, 2).Text)
Sheets(.Cells(i, 2).Text).Range("J" & P).Resize(1, 6) =Application.Index(Application.Transpose(AR), i - 1)

附檔明天再研究

作者: ko310kmo    時間: 2011-5-9 00:34

本帖最後由 ko310kmo 於 2011-5-9 00:35 編輯

回復 9# GBKEE

我把這大大的程式加入我原本的Calculate事件中後,
反而會造成我sheet1的C、D欄的值出不來
(這兩欄是寫DDE公式,讓它接受傳值的)
各工作表的J欄的歷史成交價,也都無法往下記錄

而且也會一直在
P = Sheets(.Cells(i, 2).Text).Cells(Row.Count, "J").End(xlUp).Row + 1
出現 黃底色、『此處需要物件』的錯誤
   
請問是我哪裡弄錯了嗎?[attach]6069[/attach][attach]6070[/attach]

把兩個有加、沒加,執行後的程式附給大大看看
作者: GBKEE    時間: 2011-5-9 07:00

本帖最後由 GBKEE 於 2011-5-9 07:41 編輯

回復 10# ko310kmo
該物件 RowS
P = Sheets(.Cells(i, 2).Text).Cells(RowS.Count, "J").End(xlUp).Row + 1

8樓的附檔有難度
Sheet1每一履約價要有, 即時成交價的變動時間 及成交量的變動時間,來參考的 才可計算 一分鐘內 即時成交價的成交量的總和
PS: 成交量有變動,即時成交價不一定有變動.
作者: ko310kmo    時間: 2011-5-9 10:20

本帖最後由 ko310kmo 於 2011-5-9 11:12 編輯

回復 11# GBKEE


謝謝大大
今天試跑程式,我自行再做了點修改後
發現了一個問題
就是最低價竟然比收盤價高
我想可能是因為我們在一開始就 AR(4, i) = .Cells(i, 3)
所以程式就抓最一開始的Cells(i, 3)
請問該如何修改?

另外再請教
大大所寫的
P = Sheets(.Cells(i, 2).Text).Cells(Rows.Count, "J").End(xlUp).Row + 1
請問當中為什麼要寫『”J”』

謝謝大大的教導
[attach]6075[/attach]
作者: ko310kmo    時間: 2011-5-9 13:54

回復 11# GBKEE


大大
我後來自已再測試
把大大在六樓 寫的程式改貼到 一般模組
並再寫一個
『Sub test3()
    Call test2
    TickTime = Now + TimeValue("00:01:00")
    Application.OnTime TickTime, "test3"
End Sub』

就可以完成每分的資料更新,而且不會把我原本dde寫入的公式洗掉,
也就是我原本在第十樓所說的問題。

但依舊會出現我第12樓
最低價竟然比收盤價高的問題!!

附上修改後、執行後的檔案,
懇請大大教導!!
謝謝、感激不盡:)
[attach]6082[/attach]
作者: GBKEE    時間: 2011-5-9 13:54

回復 12# ko310kmo
可用欄位的英文字母表示  Cells(1, "J") =>Range("J1")  
最低價竟然比收盤價高   修正如下
  1. Sub Ex()
  2.     Dim t As Date, i%, R%, P%
  3.     With Sheet1
  4.         R = .[B1].End(xlDown).Row
  5.         Do
  6.             ReDim AR(1 To 6, 2 To R)
  7.             t = Time
  8.             For i = 2 To R
  9.                 AR(1, i) = TimeSerial(Hour(Time), Minute(Time), 0)   '每分鐘時間
  10.                 AR(2, i) = .Cells(i, 3)   '每分鐘的開盤價
  11.                 AR(3, i) = .Cells(i, 3)   '每分鐘的最高價
  12.                 AR(5, i) = .Cells(i, 3)   '每分鐘的最低價
  13.                 'AR(6, i) = .Cells(i, 4)   '每分鐘的成交量
  14.             Next
  15.         If Minute(Time) = Minute(t) Then
  16.             Do While Minute(Time) = Minute(t)
  17.                 For i = 2 To R
  18.                     DoEvents
  19.                     AR(3, i) = IIf(.Cells(i, 3) > AR(3, i), .Cells(i, 3), AR(3, i)) '每分鐘的最高價
  20.                     AR(5, i) = IIf(.Cells(i, 3) < AR(5, i), .Cells(i, 3), AR(5, i)) '每分鐘的最低價
  21.                     '  AR(6, i) = AR(6, i) + .Cells(i, 4)                             '每分鐘的成交量
  22.                 Next
  23.             Loop
  24.             For i = 2 To R
  25.                 AR(4, i) = .Cells(i, 3)                '每分鐘的收盤價
  26.                 P = Sheets(.Cells(i, 2).Text).Cells(Row.Count, "J").End(xlUp).Row + 1
  27.                 Sheets(.Cells(i, 2).Text).Range("J" & P).Resize(1, 6) = Application.Index(Application.Transpose(AR), i - 1)
  28.             Next
  29.         End If
  30.         Loop Until Time <= #1:30:00 PM#
  31.     End With
  32. End Sub
複製代碼

建議此程序 用ThisWorkbook的程序 自動執行
Private Sub Workbook_Open()
        Ex
End Sub
作者: GBKEE    時間: 2011-5-9 14:15

回復 14# ko310kmo
『Sub test3()
    Call test2
    TickTime = Now + TimeValue("00:01:00")
    Application.OnTime TickTime, "test3"
End Sub』
行不通的 給你的程式一執行後直到   Loop Until Time <= #1:30:00 PM#  才停止的
有事 暫時要下線了!
作者: ko310kmo    時間: 2011-5-9 19:19

本帖最後由 ko310kmo 於 2011-5-10 23:04 編輯

回復 15# GBKEE


    大大
『程式一執行後直到   Loop Until Time <= #1:30:00 PM#  才停止的』
這個我懂,但很奇怪的是

我13樓附的檔
是先執行 test1,等它跑完再執行test3
這樣是可以每分更新的

如果我是先執行test1再執行test2,沒有設定test3
這樣分鐘資料只會更新第一遍。

我等明日開盤後,再測試看看,
謝謝大大的幫忙:)
作者: ko310kmo    時間: 2011-5-10 23:05

回復 15# GBKEE


非常感謝大大的幫忙,已解決我的問題了!!!
不過5/10日,再次測試還是得到相同的結果
[attach]6116[/attach]
作者: 19860104    時間: 2011-10-12 02:39

感謝分享

學到很多

謝謝
作者: yue790513    時間: 2018-12-8 20:16

對於程式有點不了解,怎麼等待一分鐘,等待K線不就會失真,高點低點抓不準,程式應該要不停比較高低點才對!




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