返回列表 上一主題 發帖

[發問] 算漲跌與均價

[發問] 算漲跌與均價

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

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

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

漲跌的定義應該是(這分鐘成交價-上分鐘成交價)/上分鐘成交價
Kenny

TOP

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

TOP

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

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

TOP

回復 4# daniel5168

試試看
  1. Sub 自動記錄()
  2.     Dim Rng As Range, 漲跌 As Single, 均價 As Single
  3.     If uMode = 0 Then Exit Sub
  4.     With Sht1
  5.         If Time > TimeValue(EndTime) Then '收盤時間以後不執行
  6.             .[O8] = "已過收盤"
  7.             uMode = 0
  8.             Exit Sub
  9.         End If
  10.         '----------------------------------------------------------
  11.         Set Rng = .Range("A65536").End(xlUp).Offset(1)
  12.         .Range("A" & Rng.Row & ":C" & Rng.Row).Value = .Range("A2:C2").Value
  13.         With .Cells(Rng.Row, "C")   '
  14.             '漲跌的定義應該是(這分鐘成交價-上分鐘成交價)/上分鐘成交價
  15.             If .Row >= 4 Then 漲跌 = (.Cells - .Cells.Offset(-1)) / .Cells.Offset(-1)
  16.             '20單位週期均價
  17.             If .Row >= 22 Then 均價 = Application.WorksheetFunction.Average(.Cells.Offset(-19).Resize(20))
  18.         End With
  19.         .Range("D2") = IIf(漲跌 <> 0, 漲跌, "")
  20.         .Range("E2") = IIf(均價 <> 0, 均價, "")
  21.         .Range("D" & Rng.Row & ":E" & Rng.Row).Value = .Range("D2:E2").Value
  22.         '------------------------------------------------
  23.     End With
  24.     If ActiveSheet.Name = Sht1.Name And xRow > 8 Then
  25.         ActiveWindow.ScrollRow = xRow - 6 '讓最新資料保持在可見視窗中
  26.     End If
  27.     Beep
  28.     '------------------------------------------------
  29.     ThisWorkbook.Save   '存檔
  30.     Application.OnTime Now + TimeValue("00:00:01"), "自動記錄"   '每一秒遞迴一次
  31. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

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

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

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

TOP

回復 6# daniel5168


    你加了If Second(Time) = 0 And Minute(Time) Mod 1 = 0 Then卻沒有給它End If

TOP

本帖最後由 GBKEE 於 2015-8-4 14:17 編輯

回復 6# daniel5168


但他好像是每秒記錄一次,
這裡修改 Application.OnTime Now + TimeValue("00:01:00"), "自動記錄"   '每一分遞迴一次
可以不用 If Second(Time) = 0 And Minute(Time) Mod 1 = 0 Then 這行程式碼

錯誤訊息 沒有 With, lpk187 說了少了End If
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

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

        靜思自在 : 一個人的快樂.不是因為他擁有得多,而是因為他計較得少。
返回列表 上一主題