返回列表 上一主題 發帖

請問如何改成K棒顯示?

附上如何產生多空力道的 O/H/L/C 之方法,其餘兩項可以另外兩組變數來同時處理(如二之說明):
(一)(二)  ...
c_c_lai 發表於 2012-5-26 10:41

感謝c_c_lai大大的熱心詳細解說  學習了解些了
再請問 c_c_lai 大大  即時比對的O/H/L/C 要如何指定暫存於儲存格?
因是取ㄧ分K  則在一分內的O/H/L/C 要先暫存?

感恩協助  謝謝

TOP

謝謝回覆  感恩
這我了解 !但因我三個欄位都是DDE資料運算出來的  所以在一分鐘內也有O/H/L/C
所以我要 ...
mead 發表於 2012-5-25 22:11

附上如何產生多空力道的 O/H/L/C 之方法,其餘兩項可以另外兩組變數來同時處理(如二之說明):
(一)
  1. Option Explicit

  2. Dim timerEnabled As Boolean  '
  3. Dim counter As Single        ' 示範用計數器
  4. Dim Ov As Single, Hv As Single, Lv As Single, Cv As Single           ' 開盤價、最高價、最高價、收盤價(成交價) 等設定之變數。
  5. Dim turnKey As Integer   ' 判斷每一輪迴上列變數初始值之設定。
  6. Dim nums As Integer      ' 將每隔 "多少時間" 處理時段,移到此處來處理。

  7. Private Sub Workbook_Open()
  8.     counter = 0

  9.     nums = 30            ' 設定每隔 30 秒處理時段,亦可更改成 10 (每隔 10 秒)、20 (每隔 20 秒)等等。
  10.                          ' 此處不建議使用 1 秒時段來處理,因為還要去求出開盤、最高、最低、成交價。
  11.     timerEnabled = False
  12.     Call timerStart      ' 程式一啟始,便去自動執行 timerStart      
  13. End Sub

  14. Sub timerStart()
  15.     turnKey = 0          ' 每一輪迴盤中初始值之設定。

  16.     If timerEnabled Then
  17.         Application.OnTime (Now), "ThisWorkbook.ExeSelf"
  18.     Else
  19.         ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  20.         Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.ExeSelf"
  21.     End If
  22. End Sub

  23. Sub ExeSelf()
  24.     timerEnabled = True

  25.     If IsError(Sheets("工作表1").Range("E5").Value) Then ' 假設 E5 欄位為多空力道
  26.         Cv = 0
  27.     Else
  28.         Cv = Sheets("工作表1").Range("E5").Value          ' 多空力道成交價
  29.     End If
  30.    
  31.     If (turnKey = 0 Or Ov = 0) Then                     ' 當 turnKey 值為0,表示其為初始值設定。為考量系統剛連上 DDE,
  32.                                                         ' 有時在第一根數值產生時 Ov = Cv 值可能為 0 (IsError()的狀態)。
  33.         Ov = Cv                                         ' 多空力道開盤價初始值設定
  34.         Hv = Cv                                         ' 多空力道最高價初始值設定
  35.         Lv = Cv                                         ' 多空力道最低價初始值設定
  36.     End If
  37.    
  38.     turnKey = turnKey + 1
  39.    
  40.     If (Cv > Hv) Then Hv = Cv                           ' 判斷多空力道最高價
  41.     If (Cv < Lv) Then Lv = Cv                           ' 判斷多空力道最低價

  42.     counter = counter + 1
  43.     [F1].Value = counter    ' 08:45 後每隔 30 秒,請觀察 F1 欄位數字是否會異動?
  44.    
  45.     If (turnKey < nums) Then
  46.         Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.ExeSelf"
  47.     Else
  48.         If (Cv > 0) Then Call Timer
  49.         Call timerStart
  50.     End If
  51. End Sub

  52. Sub Timer()
  53.     Dim str As String
  54.    
  55.     If (TimeValue(Now) >= TimeValue("08:45:00") And TimeValue(Now) <= TimeValue("13:46:01")) Then    ' 開盤、收盤時段設定
  56.         ' 盤中處理,將資料匯入寫入工作表單內儲存。

  57.     End If
  58. End Sub
複製代碼
(二) 改以陣列處理。(1. 多空力道、2. 反向勢力、3. 主力控盤)
  1. Dim Ov(1 To 3), Hv(1 To 3), Lv(1 To 3), Cv(1 To 3) As Single  ' 開盤價、最高價、最高價、收盤價(成交價) 等設定之變數。
  2. .                                                             ' 改以陣列處理。(1. 多空力道、2. 反向勢力、3. 主力控盤)
  3. .
  4. .

  5. Sub ExeSelf()
  6.     timerEnabled = True

  7.     If IsError(Sheets("工作表1").Range("E5").Value) Then ' 假設 E5 欄位為多空力道
  8.         Cv(1) = 0
  9.         Cv(2) = 0
  10.         Cv(3) = 0
  11.     Else
  12.         Cv(1) = Sheets("工作表1").Range("E5").Value    ' 多空力道成交價
  13.         Cv(2) = Sheets("工作表1").Range("I5").Value    ' 反向勢力成交價
  14.         Cv(3) = Sheets("工作表1").Range("M5").Value    ' 主力控盤成交價
  15.     End If
  16.    
  17.     If (turnKey = 0 Or Ov(1) = 0) Then                 ' 當 turnKey 值為0,表示其為初始值設定。為考量系統剛連上 DDE,
  18.                                                        ' 有時在第一根數值產生時 Ov = Cv 值可能為 0 (IsError()的狀態)。
  19.         Ov(1) = Cv(1)                                  ' 多空力道開盤價初始值設定
  20.         Hv(1) = Cv(1)                                  ' 多空力道最高價初始值設定
  21.         Lv(1) = Cv(1)                                  ' 多空力道最低價初始值設定
  22.         Ov(2) = Cv(2)                                  ' 反向勢力開盤價初始值設定
  23.         Hv(2) = Cv(2)                                  ' 反向勢力最高價初始值設定
  24.         Lv(2) = Cv(2)                                  ' 反向勢力最低價初始值設定
  25.         Ov(3) = Cv(3)                                  ' 主力控盤開盤價初始值設定
  26.         Hv(3) = Cv(3)                                  ' 主力控盤最高價初始值設定
  27.         Lv(3) = Cv(3)                                  ' 主力控盤最低價初始值設定
  28.     End If
  29.    
  30.     turnKey = turnKey + 1
  31.    
  32.     If (Cv(1) > Hv(1)) Then Hv(1) = Cv(1)              ' 判斷多空力道最高價
  33.     If (Cv(2) > Hv(2)) Then Hv(2) = Cv(2)              ' 判斷反向勢力最高價
  34.     If (Cv(3) > Hv(3)) Then Hv(3) = Cv(3)              ' 判斷主力控盤最高價

  35.     If (Cv(1) < Lv(1)) Then Lv(1) = Cv(1)              ' 判斷多空力道最低價
  36.     If (Cv(2) < Lv(2)) Then Lv(1) = Cv(2)              ' 判斷反向勢力最低價
  37.     If (Cv(3) < Lv(3)) Then Lv(1) = Cv(3)              ' 判斷主力控盤最低價

  38.     If (turnKey < nums) Then
  39.         Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.ExeSelf"
  40.     Else
  41.         If (Cv(1) > 0) Then Call Timer
  42.         Call timerStart
  43.     End If
  44. End Sub
複製代碼

TOP

回復  mead

參考
f3202 發表於 2012-5-25 22:46

謝謝您的幫忙!
但因權限不夠無法下載相關檔案參考研究
討論中的程式碼好像是有缺失的  因個人程式底子不好  無法了解那段程式問題而自行修正

不過還是感恩您的熱心協助

謝謝

TOP

TOP

回復  mead
XlChartType 列舉的圖表類型只是告訴你,如果要繪製出股票圖的話就必須要有上述的組合條件才能 ...
c_c_lai 發表於 2012-5-25 20:44

謝謝回覆  感恩
這我了解 !但因我三個欄位都是DDE資料運算出來的  所以在一分鐘內也有O/H/L/C
所以我要請求協助的就是如何弄出三欄各別的一分O/H/L/C;然後存於紀錄欄以便畫出K棒?

謝謝熱心協助

感恩

TOP

回復 3# mead
XlChartType 列舉的圖表類型只是告訴你,如果要繪製出股票圖的話就必須要有上述的組合條件才能形成,
就你目前的三個標題: 多空力道、反向勢力、主力控盤,其本身數據都是單向數列,構不成股票圖的組合條件,
只能以一般常用的 xlLine (折線圖) 或者是其它圖型來應用。
如果你真想能以股票圖來表示,你就必須將多空力道、反向勢力、主力控盤等於資料匯入處理同時,分別將其各自的
多空力道、反向勢力、主力控盤等之多空力道開盤價、多空力道最高價、多空力道最低價、多空力道收盤價分別
紀錄並予以匯入至工作表單內(如 #2 的表單附件;成立的條件、以及VBA製作的方法),如此才能處理股票圖的方案。
如此的說明不知瞭解否?

TOP

回復  mead
XlChartType 列舉
指定圖表類型。
---------------------------------------------------- ...
c_c_lai 發表於 2012-5-25 08:36

感恩回覆  
這只是繪圖嗎?一分鐘的__開/高/低/收  要如何處理完成?

抱歉!程式能力很弱  有煩您費心指導!

感恩再感恩

TOP

回復 1# mead
XlChartType 列舉
指定圖表類型。
-------------------------------------------------------------
名稱                         值         描述
xlStockOHLC         89         開盤-最高-最低-收盤股價圖
xlStockVHLC         90         成交量-最高-最低-收盤股價圖
xlStockVOHLC         91         成交量-開盤-最高-最低-收盤股價圖
-------------------------------------------------------------
此處的"描述"指的是你必須是上列的組合才能成立建置的條件,例如:
  1.     ActiveSheet.Shapes.AddChart.Select
  2.     With ActiveChart
  3.         .SetSourceData Source:=Range("工作表1!$B$1:工作表1!$B$" & totalRows & ", 工作表1!$C$1:工作表1!$F$" & totalRows)
  4.         .ChartType = xlStockOHLC
  5.         With .ChartGroups(1)
  6.              .AxisGroup = 1
  7.              .UpBars.Format.Fill.ForeColor.RGB = RGB(255, 69, 0)          ' 橘紅色
  8.              .DownBars.Format.Fill.ForeColor.RGB = RGB(0, 250, 170)     ' 淺洋綠色
  9.         End With
  10. . . . . . .
  11. End With
複製代碼

TOP

        靜思自在 : 手心向下是助人,手心向上是求人;助人快樂,求人痛苦。
返回列表 上一主題