返回列表 上一主題 發帖

『已解決』dde tick資料轉換分鐘資料

『已解決』dde tick資料轉換分鐘資料

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

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

我現在的問題在於e-leader是dde是沒有日期欄位
我想在每個工作表中J欄分別紀錄下它們的即時資料
再J欄的隔壁想記下它們每分鐘的開、高、收、低、成交量
有想法,但卻不知該從何做起!!
請各位大大幫忙!! 謝謝
50 字節以內
不支持自定義 Discuz! 代碼

回復 1# ko310kmo

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

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

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

TOP

回復 1# ko310kmo

時間上語法可以參考我Po的文 (要感謝板主的解答)
也有類似的問題

TOP

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

回復 2# luhpro


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

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

我有搜尋過資料,但多半是一對一的(針對一檔股票or一檔期貨)
像我這種一對多個的好像比較少,而且我怕我的Calculate事件會負擔過大or發生錯亂
還有也比較少看到同時多個表格都進行即時價格持續記錄並抓出每一分鐘的開、高、收、低、成交量的寫法
而且我還是小學生階級,無法開附件來看
所以才會貼出來請教大家的,謝謝。
50 字節以內
不支持自定義 Discuz! 代碼

TOP

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

TOP

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

回復 5# GBKEE


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

TOP

回復 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
複製代碼

TOP

回復 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)
那它可以知道資料是要寫去哪一個工作表,其他三價的沒寫,會存對地方嗎??


附上檔案讓大大更了解我的架構與想法!! Calculate OVER.rar (162.25 KB)
50 字節以內
不支持自定義 Discuz! 代碼

TOP

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

附檔明天再研究

TOP

本帖最後由 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
出現 黃底色、『此處需要物件』的錯誤
   
請問是我哪裡弄錯了嗎? 有加.rar (22.85 KB) 沒加.rar (21.57 KB)

把兩個有加、沒加,執行後的程式附給大大看看
50 字節以內
不支持自定義 Discuz! 代碼

TOP

        靜思自在 : 真正的愛心,是照顧好自己的這顆心。
返回列表 上一主題