返回列表 上一主題 發帖

請問如何改成K棒顯示?

依你目前的需求來說,要以多空力道、反向勢力、主力控盤的資料列來處理的話,
是有難度,而且我本身是不 ...
c_c_lai 發表於 2012-5-26 15:59

感謝c_c_lai 大大這麼熱心的幫忙
我自行測試看看
謝謝
感恩再感恩

TOP

依你目前的需求來說,要以多空力道、反向勢力、主力控盤的資料列來處理的話,
是有難度,而且我本身是不 ...
c_c_lai 發表於 2012-5-26 15:59

c_c_lai 大大我如附件整合一下
好像不行ㄋㄟ  都是1秒紀錄  無法1分判斷!
抱歉!因程式底子不好  只能依樣畫葫蘆
麻煩指正

謝謝  感恩

0526元大記錄量態OHLC.rar (21.78 KB)

TOP

回復 7# mead
期貨即時量態線.rar (18.49 KB) 參考一下30秒+K線圖text

TOP

回復  mead
參考一下30秒+K線圖text
f3202 發表於 2012-5-27 08:54

謝謝f3202大大熱心幫忙
但因權限不夠  是否麻煩寄到我的mail:
mead4131@yahoo.com.tw

感恩再感恩

TOP

本帖最後由 c_c_lai 於 2012-5-28 08:01 編輯

回復 14# mead
看了一下你那三合一的程式,我將它整理了一下 (你直接貼上就 OK 了,另外我也會將檔案E-Mail給你):
  1. ' 以多空力道、反向勢力、主力控盤的資料列來處理
  2. Option Explicit
  3. Dim timerEnabled As Boolean  '
  4. Dim Ov(1 To 3), Hv(1 To 3), Lv(1 To 3), Cv(1 To 3) As Single  ' 開盤價、最高價、最高價、收盤價(成交價) 等設定之變數。
  5.                                                               ' 改以陣列處理。(1. 多空力道、2. 反向勢力、3. 主力控盤)
  6. Dim turnKey As Integer   ' 判斷每一輪迴上列變數初始值之設定。
  7. Dim nums As Integer      ' 將每隔 "多少時間" 處理時段,移到此處來處理。

  8. Private Sub Workbook_Open()
  9.     Sheets("策略記錄").Cells(4, 2) = 10
  10.    
  11.     nums = 30            ' 設定每隔 30 秒處理時段,亦可更改成 30 (每隔 30 秒)、 10 (每隔 10 秒)、20 (每隔 20 秒)等等。
  12.     timerEnabled = False ' 此處不建議使用 1 秒時段來處理,因為還要去求出開盤、最高、最低、成交價。

  13.     Call timerStart      ' 程式一啟始,便去自動執行 timerStart
  14. End Sub

  15. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  16.     On Error Resume Next
  17.     Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer", , False
  18. End Sub

  19. Public Sub Timer()
  20.     Dim Pos As Integer
  21.    
  22.     On Error Resume Next
  23.     ' Sheets("策略記錄").Cells(2, 1) = Time '將時間show至策略的a2欄位
  24.    
  25.      If (TimeValue(Now) >= TimeValue("08:45:00") And TimeValue(Now) <= TimeValue("13:46:01")) Then    ' 開盤、收盤時段設定
  26.         ' 盤中處理,將資料匯入寫入工作表單內儲存。

  27.         With Sheets("策略記錄")
  28.             Cells(4, 2).Value = Cells(4, 2).Value + 1 '將變動行號加一行

  29.             Pos = Cells(4, 2).Value
  30.             
  31.             Cells(Pos, 1).Value = Time
  32.             Cells(Pos, 2).Value = Ov(1)    ' B 欄
  33.             Cells(Pos, 3).Value = Hv(1)    ' C 欄
  34.             Cells(Pos, 4).Value = Lv(1)    ' D 欄
  35.             Cells(Pos, 5).Value = Cv(1)    ' E 欄

  36.             Cells(Pos, 6).Value = Ov(2)    ' F 欄
  37.             Cells(Pos, 7).Value = Hv(2)    ' G 欄
  38.             Cells(Pos, 8).Value = Lv(2)    ' H 欄
  39.             Cells(Pos, 9).Value = Cv(2)    ' I 欄

  40.             Cells(Pos, 10).Value = Ov(3)   ' J 欄
  41.             Cells(Pos, 11).Value = Hv(3)   ' K 欄
  42.             Cells(Pos, 12).Value = Lv(3)   ' L 欄
  43.             Cells(Pos, 13).Value = Cv(3)   ' M 欄
  44.         End With
  45.     End If
  46. End Sub

  47. Sub ExeSelf()
  48.     timerEnabled = True

  49.     If IsError(Sheets("策略記錄").Range("B2").Value) Then ' 假設 B2 欄位為多空力道
  50.         Cv(1) = 0
  51.         Cv(2) = 0
  52.         Cv(3) = 0
  53.     Else
  54.         Cv(1) = Sheets("策略記錄").Range("B2").Value   ' 多空力道成交價
  55.         Cv(2) = Sheets("策略記錄").Range("C2").Value   ' 反向勢力成交價
  56.         Cv(3) = Sheets("策略記錄").Range("D2").Value   ' 主力控盤成交價
  57.     End If

  58.     If (turnKey = 0 Or Ov(1) = 0) Then                 ' 當 turnKey 值為0,表示其為初始值設定。為考量系統剛連上 DDE,
  59.                                                        ' 有時在第一根數值產生時 Ov = Cv 值可能為 0 (IsError()的狀態)。
  60.         Ov(1) = Cv(1)                                  ' 多空力道開盤價初始值設定
  61.         Hv(1) = Cv(1)                                  ' 多空力道最高價初始值設定
  62.         Lv(1) = Cv(1)                                  ' 多空力道最低價初始值設定

  63.         Ov(2) = Cv(2)                                  ' 反向勢力開盤價初始值設定
  64.         Hv(2) = Cv(2)                                  ' 反向勢力最高價初始值設定
  65.         Lv(2) = Cv(2)                                  ' 反向勢力最低價初始值設定

  66.         Ov(3) = Cv(3)                                  ' 主力控盤開盤價初始值設定
  67.         Hv(3) = Cv(3)                                  ' 主力控盤最高價初始值設定
  68.         Lv(3) = Cv(3)                                  ' 主力控盤最低價初始值設定
  69.     End If

  70.     turnKey = turnKey + 1

  71.     If (Cv(1) > Hv(1)) Then Hv(1) = Cv(1)              ' 判斷多空力道最高價
  72.     If (Cv(2) > Hv(2)) Then Hv(2) = Cv(2)              ' 判斷反向勢力最高價
  73.     If (Cv(3) > Hv(3)) Then Hv(3) = Cv(3)              ' 判斷主力控盤最高價

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

  77.     If (turnKey < nums) Then
  78.         Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.ExeSelf"
  79.     Else
  80.         If (Cv(1) <> 0) Then Call Timer
  81.         ' Call Timer
  82.         Call timerStart
  83.     End If
  84. End Sub

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

  87.     If timerEnabled Then
  88.         ' Application.OnTime (Now), "ThisWorkbook.ExeSelf"      
  89.        [color=Red]Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.timerOnTimer"[/color]
  90.     Else
  91.         ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  92.         Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.ExeSelf"
  93.     End If
  94. End Sub
複製代碼
有關設定間格時段可依個人需求而設置 (個人是選擇 B、或 C, B 是寫死在程式內, C 可從工作表單內之"A5"欄位依個人需求去外部更改)
(A) LastMin = Hour(Time) * 3600 + Minute(Time) * 60 + Second(Time) 是求出現在時間之換算值,
      如:現在是 11:25:10, 則 LastMin = 41110 秒;
(B) 範例中的 nums = 30, 是直接設定為 30 秒;
(C) 設定一固定欄位 (假設為 "A5"),其欄位值直接輸入 00:00:30。
      nums = Hour(Cells(5,1).Value) * 3600 + Minute(Cells(5,1).Value) * 60 + Second(Cells(5,1).Value)
     則 nums =  30 秒。   
P.S. 如果你想要靈活運作的話, 可選擇 C 項,較有彈性, A 項程式碼在處理上會無謂的增大
       (如加上多少時間再去判對比較,然後又再求得目前時間等)。
附上程式執行畫面共擬參考:

0526元大記錄量態OHLC.rar (22.53 KB)

TOP

回復  mead
看了一下你那三合一的程式,我將它整理了一下 (你直接貼上就 OK 了,另外我也會將檔案E-Mail給 ...
c_c_lai 發表於 2012-5-27 12:16

了解  感謝c_c_lai 大大的熱心協助

我測試一下

謝謝

感恩再感恩

TOP

  1. Sub Timer()
  2. Dim HHMM As Integer
  3. On Error Resume Next
  4. ' Sheets("策略記錄").Select
  5. Sheets(2).Cells(2, 1) = Time '將時間show至策略的b3欄位
  6. HHMM = Hour(Time) * 100 + Minute(Time)
  7.   If (HHMM < 845 Or HHMM > 1345) Then Exit Sub '營業時間才執行
  8.   If Minute(Time) <> LastMin Then '開始後做
  9.     i = i + 1
  10.     If i = 60 Then

  11. Sheets(2).Range("a10000").End(xlUp).Offset(1, 0) = Time
  12. Sheets(2).Range("a10000").End(xlUp).Offset(0, 1) = O
  13. Sheets(2).Range("a10000").End(xlUp).Offset(0, 2) = H
  14. Sheets(2).Range("a10000").End(xlUp).Offset(0, 3) = L
  15. Sheets(2).Range("a10000").End(xlUp).Offset(0, 4) = C
  16.   
  17. Sheets(2).Range("a10000").End(xlUp).Offset(0, 5) = O1
  18. Sheets(2).Range("a10000").End(xlUp).Offset(0, 6) = H1
  19. Sheets(2).Range("a10000").End(xlUp).Offset(0, 7) = L1
  20. Sheets(2).Range("a10000").End(xlUp).Offset(0, 8) = C1

  21. Sheets(2).Range("a10000").End(xlUp).Offset(0, 9) = O2
  22. Sheets(2).Range("a10000").End(xlUp).Offset(0, 10) = H2
  23. Sheets(2).Range("a10000").End(xlUp).Offset(0, 11) = L2
  24. Sheets(2).Range("a10000").End(xlUp).Offset(0, 12) = C2
  25.      i = 0
  26.       O = Sheets(2).Cells(2, 2)
  27.       H = Sheets(2).Cells(2, 2)
  28.       L = Sheets(2).Cells(2, 2)
  29.       C = Sheets(2).Cells(2, 2)
  30.         
  31.      O1 = Sheets(2).Cells(2, 3)
  32.      H1 = Sheets(2).Cells(2, 3)
  33.      L1 = Sheets(2).Cells(2, 3)
  34.      C1 = Sheets(2).Cells(2, 3)
  35.      
  36.      O2 = Sheets(2).Cells(2, 4)
  37.      H2 = Sheets(2).Cells(2, 4)
  38.      L2 = Sheets(2).Cells(2, 4)
  39.      C2 = Sheets(2).Cells(2, 4)
  40. Else
  41.      C = Sheets(2).Cells(2, 2)
  42.      If H = "" Then H = Sheets(2).Cells(2, 2)
  43.      If C >= H Then H = C
  44.      If C < L Then L = C
  45.      If O = 0 Then O = Sheets(2).Cells(2, 2) Else O = O
  46.      If L = 0 Then L = Sheets(2).Cells(2, 2) Else L = L
  47.    
  48.      C1 = Sheets(2).Cells(2, 3)
  49.      If H1 = "" Then H1 = Sheets(2).Cells(2, 3)
  50.      If C1 >= H1 Then H1 = C1
  51.      If C1 < L1 Then L1 = C1
  52.      If O1 = 0 Then O1 = Sheets(2).Cells(2, 3) Else O1 = O1
  53.      If L1 = 0 Then L1 = Sheets(2).Cells(2, 3) Else L1 = L1
  54.    
  55.      C2 = Sheets(2).Cells(2, 4)
  56.      If H2 = "" Then H2 = Sheets(2).Cells(2, 4)
  57.      If C2 >= H2 Then H2 = C2
  58.      If C2 < L2 Then L2 = C2
  59.      If O2 = 0 Then O2 = Sheets(2).Cells(2, 4) Else O1 = O1
  60.      If L2 = 0 Then L2 = Sheets(2).Cells(2, 4) Else L2 = L2
  61.   End If
  62.         LastMin = Minute(Time)
  63.   End If
  64. Application.OnTime Now + TimeValue("00:00:01"), "Timer" '每秒顯示
  65. End Sub
複製代碼
回復 14# mead
試看看

TOP

回復  mead
試看看
f3202 發表於 2012-5-27 17:42

可以了  明天開盤來試試

謝謝f3202大大的熱心協助

感恩再感恩

TOP

        靜思自在 : 話多不如話少,話少不如話好。
返回列表 上一主題