返回列表 上一主題 發帖

[發問] 算漲跌與均價

[發問] 算漲跌與均價

本帖最後由 daniel5168 於 2015-7-31 17:45 編輯

請教各位先進,我用DDE紀錄價位,要如何可以同時記錄這分鐘與上分鐘的漲跌與均價,怕口條不好解釋不清以下附圖

漲跌與均價也是要每分鐘往下紀錄的,那D2跟E2的格子該怎麼寫公式
台指近一分鐘即時記錄.rar (28.24 KB)

回復 2# ken2192
但是我要在D2跟E2計算出每分鐘的變化,然後往下每分鐘紀錄,我不知道該如何現在價格建去上一分鐘價格,因為上一分鐘價格的儲存格位置不段改變

TOP

本帖最後由 daniel5168 於 2015-8-3 14:28 編輯

請問一下各位先進,我上述想法是不是無法做到,只能用C欄已經記錄的資料在D欄以及E欄用函數計算呢?
因怕函數公式太多會導致越來越遲鈍,所以想問問是否有可能在D2以及E2就把數據算出來再讓VBA的每分紀錄去寫在D3跟E3往下欄位

TOP

本帖最後由 daniel5168 於 2015-8-4 09:49 編輯

回復 5# GBKEE
早上已經套入試用,但他好像是每秒記錄一次,我加入If Second(Time) = 0 And Minute(Time) Mod 1 = 0 Then
之後出現錯誤訊息如圖

想它每秒地回一次又想每一分鐘記錄我該怎麼改,有勞指點了.我也一邊自己努力改改看

TOP

回復 7# lpk187
多謝lpk187  大大,雖然不懂整個程式怎麼解讀,但是我打END IF嘗試在各個位置,終於成功

TOP

本帖最後由 daniel5168 於 2015-8-4 15:18 編輯

回復 8# GBKEE

多謝GBKEE  版主幫忙解答,經過您的編寫,我亂改出問題,lpk187大大的指點,我再亂改,終於測試成功
  1. Public uMode&, StartTime, EndTime
  2. Public MyBook As Workbook, Sht1 As Worksheet, Sht2 As Worksheet, xRow&

  3. Sub 共用參照()
  4. Set MyBook = ThisWorkbook
  5. Set Sht1 = MyBook.Sheets("台指近一分鐘線")
  6. StartTime = "08:44:50"  '開盤時間(提早十秒開始,才可記錄開盤量價)"08:44:50"
  7. EndTime = "21:45:10"    '收盤時間(延後十秒停止記錄)此為測試用時間,請自行更改正式時間 "13:45:10"
  8. End Sub

  9. Sub 自動記錄()
  10.     Dim Rng As Range, 漲跌 As Single, 均價 As Single
  11.     If uMode = 0 Then Exit Sub
  12.     With Sht1
  13.         If Time > TimeValue(EndTime) Then '收盤時間以後不執行
  14.             .[F2] = "已過收盤"
  15.             uMode = 0
  16.             Exit Sub
  17.         End If
  18.         Sht1.Range("B2") = Time '當前時間(時間碼表)
  19.         '----------------------------------------------------------
  20.         '每1分鐘記錄,5分鐘則改為 Mod 5
  21.         If Second(Time) = 0 And Minute(Time) Mod 1 = 0 Then
  22.         Set Rng = .Range("A65536").End(xlUp).Offset(1)
  23.         .Range("A" & Rng.Row & ":C" & Rng.Row).Value = .Range("A2:C2").Value
  24.         With .Cells(Rng.Row, "C")   '
  25.             '漲跌的定義應該是(這分鐘成交價-上分鐘成交價)/上分鐘成交價
  26.             If .Row >= 4 Then 漲跌 = (.Cells - .Cells.Offset(-1))
  27.             '20單位週期均價
  28.             If .Row >= 22 Then 均價 = Application.WorksheetFunction.Average(.Cells.Offset(-19).Resize(20))
  29.         End With
  30.         .Range("D2") = IIf(漲跌 <> 0, 漲跌, "")
  31.         .Range("E2") = IIf(均價 <> 0, 均價, "")
  32.         .Range("D" & Rng.Row & ":E" & Rng.Row).Value = .Range("D2:E2").Value
  33.         End If
  34.         '------------------------------------------------
  35.     End With
  36.     If ActiveSheet.Name = Sht1.Name And xRow > 8 Then
  37.         ActiveWindow.ScrollRow = xRow - 6 '讓最新資料保持在可見視窗中
  38.     End If
  39.     Beep
  40.     '------------------------------------------------
  41.     ThisWorkbook.Save   '存檔
  42.     Application.OnTime Now + TimeValue("00:00:01"), "自動記錄"   '每一秒遞迴一次
  43. End Sub
  44. Sub 開始執行()
  45. If uMode = 1 Then Exit Sub
  46. Call 共用參照
  47. uMode = 1
  48. Sht1.[F2] = "執行中"
  49. Call 自動記錄
  50. End Sub

  51. Sub 停止執行()
  52. uMode = 0
  53. Call 共用參照
  54. Sht1.[F2] = "STOP"
  55. End Sub

  56. Sub 清除記錄資料()
  57. Beep
  58. If MsgBox("※確定要清除〔Sheet1〕的記錄嗎? ", 4 + 32 + 256) = vbNo Then Exit Sub
  59. Call 共用參照
  60. Sht1.Rows("3:65536").ClearContents
  61. If ActiveSheet.Name = Sht1.Name Then ActiveWindow.ScrollRow = 1
  62. Beep
  63. End Sub
複製代碼

TOP

回復 11# GBKEE

報告版主大大,.因為我想看到B2的時間(秒數)

TOP

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題