返回列表 上一主題 發帖

[發問] API逐筆運算負擔大,可否精簡

回復 26# dreamsway

想詢問代碼的意思是每過30秒會執行迴圈嗎!? 因為單執行K心態sub,只會執行一次將現有的報價跑完,跳出後就沒有任何動作

是數據已跑到收盤時間了嗎?

請看一下註解的說明
  1. Option Explicit
  2. Const 間隔 = #12:05:00 AM#   '這裡修改分鐘間隔
  3. Const 開盤 = #8:45:00 AM#
  4. Sub K心態()
  5.     Dim i As Long, Ti As Integer, 成交價 As Double, 多總 As Long, 空總 As Long, 方向 As String
  6.     Dim xTime As Date, wTime As Date
  7.     xTime = 開盤 + 間隔
  8.     i = 1: Ti = 0: 多總 = 0: 空總 = 0
  9.     成交價 = Sheets("多空藍圖").Range("M4") '欄位暫代
  10.     Do
  11.         With Sheets("報價數據").Range("b1").Offset(i)
  12.         '**間隔為  #12:05:00 AM#  這"↑","↓"數據 準確嗎?***
  13.         If 成交價 < .Cells(1, 2) Then 方向 = "↑"
  14.         If 成交價 > .Cells(1, 2) Then 方向 = "↓"
  15.         
  16.         If 成交價 <= .Cells(1, 2) And 方向 = "↑" Then 多總 = 多總 + .Cells(2, 3)
  17.         If 成交價 >= .Cells(1, 2) And 方向 = "↓" Then 空總 = 空總 + .Cells(2, 3)
  18.         成交價 = .Cells(1, 2)
  19.             If .Value > xTime + 間隔 Then
  20.                 With Sheets("測試").Range("A2").Offset(Ti)
  21.                     .Resize(, 3) = Array(xTime, 多總, 空總)
  22.                     .NumberFormatLocal = "hh:mm;@"
  23.                 End With
  24.                  xTime = xTime + 間隔: Ti = Ti + 1
  25.              Else
  26.                 If .Cells.Offset(1) = "" And Format(TimeValue(.Cells.Text), "HH:MM") = "13:45" Then
  27.                     '***程式運行速度很快會跑完報價數據,時間已到"13:45"收盤 不再有數據了 **
  28.                     xTime = xTime + 間隔
  29.                     With Sheets("測試").Range("A2").Offset(Ti)
  30.                         .Resize(, 3) = Array(xTime, 多總, 空總)
  31.                         .NumberFormatLocal = "hh:mm;@"
  32.                     End With
  33.                     Exit Do
  34.                 ElseIf .Cells.Offset(1) = "" Then
  35.                     '****程式運行速度很快會跑完報價數據,但是數據還會有 因時間還未到"13:45"收盤 時 ...  **
  36.                     '**程式到這理 執行  重新整理 的程式 有更新到   _20180724_Match  對嗎? **
  37.                      '**********************************************
  38.                       Do
  39.                         If wTime > Time - #12:00:30 AM# Then '30秒 重新整理 一次
  40.                             '**試稍待一下等候新的數據
  41.                             Application.StatusBar = "重新整理...."
  42.                             重新整理   '** 更新   _20180724_Match 如有新的資料進來
  43.                                        '*************************.Cells.Offset(1)就 <>""  ***
  44.                             wTime = Time
  45.                             End If
  46.                         DoEvents
  47.                     Loop While .Cells.Offset(1) = ""  '**還是沒有新的數據就一直等候...
  48.                     '*** 如有新的資料進來 離開迴圈 繼續下去到  i = i + 1 的地方 再 Loop 下去 ***
  49.                     Application.StatusBar = False
  50.                 End If
  51.             End If
  52.         End With
  53.         DoEvents
  54.         i = i + 1
  55.     Loop
  56.     MsgBox "工作完成"
  57. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 28# dreamsway

程式碼有點錯誤請更正看看
  1. ElseIf .Cells.Offset(1) = "" Then
  2.                     '****程式運行速度很快會跑完報價數據,但是數據還會有 因時間還未到"13:45"收盤 時 ...  **
  3.                     '**程式到這理 執行  重新整理 的程式 有更新到   _20180724_Match  對嗎? **
  4.                      '**********************************************
  5.                       wtime = Time   '** 抱歉這裡遺漏了*****
  6.                       Do
  7.                         '*** 還有應是 If wtime < Time - #12:00:30 AM# Then 才對
  8.                         If wtime < Time - #12:00:30 AM# Then '30秒 重新整理 一次
  9.                             '**試稍待一下等候新的數據
  10.                             Application.StatusBar = "重新整理...."
  11.                             重新整理   '** 更新   _20180724_Match 如有新的資料進來
  12.                                        '*************************.Cells.Offset(1)就 <>""  ***
  13.                             wtime = Time
  14.                             End If
  15.                         DoEvents
  16.                     Loop While .Cells.Offset(1) = ""  '**還是沒有新的數據就一直等候...
  17.                     '*** 如有新的資料進來 離開迴圈 繼續下去到  i = i + 1 的地方 再 Loop 下去 ***
  18.                     Application.StatusBar = False
  19.                 End If
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2018-11-6 15:50 編輯

回復 30# dreamsway

11# 上 的 多空藍圖beta不含RTD.xls 中 Sub 匯入API報價文字檔()  '** 不就是在更新   _20180724_Match 的資料
    替代 重新整理看看
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 32# dreamsway

試試看
  1. Option Explicit
  2. Const 間隔 = #12:05:00 AM#   '這裡修改分鐘間隔
  3. Const 開盤 = #8:45:00 AM#
  4. Public Sht2 As Worksheet
  5. Sub K心態()
  6.     Dim i As Long, Ti As Integer, 成交價 As Double, 多總 As Long, 空總 As Long, 方向 As String
  7.     Dim xTime As Date, wTime As Date, Q As Variant
  8.     '*************************************
  9.     Set Sht2 = Sheets("報價數據")
  10.     With Sht2
  11.         For Each Q In .QueryTables
  12.             Q.Delete
  13.         Next
  14.         For Each Q In .Names
  15.             Q.Delete
  16.         Next
  17.     End With
  18.     匯入API報價文字檔
  19.     '**************************************
  20.     xTime = 開盤 + 間隔
  21.     i = 1: Ti = 0: 多總 = 0: 空總 = 0
  22.     成交價 = Sheets("多空藍圖").Range("M4") '欄位暫代
  23.     Do
  24.         With Sht2.Range("b1").Offset(i)
  25.         '**間隔為  #12:05:00 AM#  這"↑","↓"數據 準確嗎?***
  26.         If 成交價 < .Cells(1, 2) Then 方向 = "↑"
  27.         If 成交價 > .Cells(1, 2) Then 方向 = "↓"
  28.         
  29.         If 成交價 <= .Cells(1, 2) And 方向 = "↑" Then 多總 = 多總 + .Cells(2, 3)
  30.         If 成交價 >= .Cells(1, 2) And 方向 = "↓" Then 空總 = 空總 + .Cells(2, 3)
  31.         成交價 = .Cells(1, 2)
  32.             If .Value > xTime + 間隔 Then
  33.                 With Sheets("測試").Range("A2").Offset(Ti)
  34.                     .Resize(, 3) = Array(xTime, 多總, 空總)
  35.                     .NumberFormatLocal = "hh:mm;@"
  36.                 End With
  37.                  xTime = xTime + 間隔: Ti = Ti + 1
  38.              Else
  39.                 If .Cells.Offset(1) = "" And Format(TimeValue(.Cells.Text), "HH:MM") = "13:45" Then
  40.                     '***程式運行速度很快會跑完報價數據,時間已到"13:45"收盤 不再有數據了 **
  41.                     xTime = xTime + 間隔
  42.                     With Sheets("測試").Range("A2").Offset(Ti)
  43.                         .Resize(, 3) = Array(xTime, 多總, 空總)
  44.                         .NumberFormatLocal = "hh:mm;@"
  45.                     End With
  46.                     Exit Do
  47.                 ElseIf .Cells.Offset(1) = "" Then
  48.                     '****程式運行速度很快會跑完報價數據,但是數據還會有 因時間還未到"13:45"收盤 時 ...  **
  49.                     '**程式到這理 執行  重新整理 的程式 有更新到   _20180724_Match  對嗎? **
  50.                      '**********************************************
  51.                       wTime = Time
  52.                       Do
  53.                         If wTime < Time - #12:00:30 AM# Then '30秒 重新整理 一次
  54.                             '**試稍待一下等候新的數據
  55.                             Application.StatusBar = "重新整理...."
  56.                             匯入API報價文字檔   '** 更新   _20180724_Match 如有新的資料進來
  57.                                        '*************************.Cells.Offset(1)就 <>""  ***
  58.                             wTime = Time
  59.                             End If
  60.                         DoEvents
  61.                     Loop While .Cells.Offset(1) = ""  '**還是沒有新的數據就一直等候...
  62.                     '*** 如有新的資料進來 離開迴圈 繼續下去到  i = i + 1 的地方 再 Loop 下去 ***
  63.                     Application.StatusBar = False
  64.                 End If
  65.             End If
  66.         End With
  67.         DoEvents
  68.         i = i + 1
  69.     Loop
  70.     MsgBox "工作完成"
  71. End Sub
  72. Sub 匯入API報價文字檔() '還沒調整路徑字串,路徑2組日期改為當日日期,TXFH8則為sht1多空藍圖的A4儲存格
  73.     With Sht2
  74.         If .QueryTables.Count = 0 Then
  75.             With .QueryTables.Add(Connection:= _
  76.                 "TEXT;C:\API\20180724\TXFH8\20180724_Match.txt", Destination:=.Range("$A$2"))
  77.                 .Name = "20180724_Match"
  78.                 '.FieldNames = True         '預設值為 True 可不用列出
  79.                 .RowNumbers = False
  80.                 .FillAdjacentFormulas = False
  81.                 '.PreserveFormatting = True  '預設值為 True。可不用列出
  82.                 '.RefreshOnFileOpen = False   '預設值為 False。可不用列出
  83.                 .RefreshStyle = xlInsertDeleteCells
  84.                 .SavePassword = False
  85.                 .SaveData = True
  86.                '.AdjustColumnWidth = True      '預設值為 True。可不用列出
  87.                 .RefreshPeriod = 0
  88.                 '.TextFilePromptOnRefresh = False      '預設值為 False。可不用列出
  89.                 .TextFilePlatform = 950
  90.                 .TextFileStartRow = 1
  91.                 .TextFileParseType = xlDelimited
  92.                 .TextFileTextQualifier = xlTextQualifierDoubleQuote
  93.                 '.TextFileConsecutiveDelimiter = False  '預設值為 False 。可不用列出
  94.                 .TextFileTabDelimiter = True
  95.                 '.TextFileSemicolonDelimiter = False    '預設值為 False 。可不用列出
  96.                 .TextFileCommaDelimiter = True
  97.                 '.TextFileSpaceDelimiter = False         '預設值為 False 。可不用列出
  98.                 .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
  99.                 .TextFileTrailingMinusNumbers = True
  100.                 .Refresh BackgroundQuery:=False
  101.             End With
  102.         Else
  103.             .QueryTables(1).Refresh
  104.         End If
  105.         .Columns("B:B").NumberFormatLocal = "h:mm:ss;@"
  106.     End With
  107. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 34# dreamsway
  '**間隔為  #12:05:00 AM#  這"↑","↓"數據 準確嗎?***

我不是有這疑問嗎?
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 36# dreamsway

未能實際參與你的檔案,很難幫你修改.
期貨我是門外漢,我有台新證券,智多星軟體,但找不到你 TXFH8 指數
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 每天無所事事,是人生的消費者,積極、有用才是人生的創造者。
返回列表 上一主題