標題:
『已解決』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
試試看 不理想再說
每分鐘的成交量 沒有成交時間的變動做不出來
Sub Ex() Dim t As Date, i%, R%, P%
With Sheet1
R = .[B1].End(xlDown).Row
Do
ReDim AR(1 To 6, 2 To R)
t = Time
For i = 2 To R
AR(1, i) = TimeSerial(Hour(Time), Minute(Time), 0) '每分鐘時間
AR(2, i) = .Cells(i, 3) '每分鐘的開盤價
AR(3, i) = .Cells(i, 3) '每分鐘的最高價
AR(5, i) = .Cells(i, 3) '每分鐘的最低價
'AR(6, i) = .Cells(i, 4) '每分鐘的成交量
Next
Do While Minute(Time) = Minute(t)
For i = 2 To R
DoEvents
AR(3, i) = IIf(.Cells(i, 3) > AR(3, i), .Cells(i, 3), AR(3, i)) '每分鐘的最高價
AR(5, i) = IIf(.Cells(i, 3) < AR(5, i), .Cells(i, 3), AR(5, i)) '每分鐘的最低價
' AR(6, i) = AR(6, i) + .Cells(i, 4) '每分鐘的成交量
Next
Loop
For i = 2 To R
AR(4, i) = .Cells(i, 3) '每分鐘的收盤價
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)
Next
Loop Until Time <= #1:30:00 PM#
End With
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(Row
S
.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")
最低價竟然比收盤價高 修正如下
Sub Ex()
Dim t As Date, i%, R%, P%
With Sheet1
R = .[B1].End(xlDown).Row
Do
ReDim AR(1 To 6, 2 To R)
t = Time
For i = 2 To R
AR(1, i) = TimeSerial(Hour(Time), Minute(Time), 0) '每分鐘時間
AR(2, i) = .Cells(i, 3) '每分鐘的開盤價
AR(3, i) = .Cells(i, 3) '每分鐘的最高價
AR(5, i) = .Cells(i, 3) '每分鐘的最低價
'AR(6, i) = .Cells(i, 4) '每分鐘的成交量
Next
If Minute(Time) = Minute(t) Then
Do While Minute(Time) = Minute(t)
For i = 2 To R
DoEvents
AR(3, i) = IIf(.Cells(i, 3) > AR(3, i), .Cells(i, 3), AR(3, i)) '每分鐘的最高價
AR(5, i) = IIf(.Cells(i, 3) < AR(5, i), .Cells(i, 3), AR(5, i)) '每分鐘的最低價
' AR(6, i) = AR(6, i) + .Cells(i, 4) '每分鐘的成交量
Next
Loop
For i = 2 To R
AR(4, i) = .Cells(i, 3) '每分鐘的收盤價
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)
Next
End If
Loop Until Time <= #1:30:00 PM#
End With
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/)