ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2348|回复: 3

[求助] 想请教如何用VBA求算DDE期货指数的30分K线的移动平均价

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-4-4 15:02 | 显示全部楼层 |阅读模式
在下想用VBA求算DDE期货指数的30K线的移动平均价
說明:
(a)  sheet2工作表的資料是連結期貨商指數期貨dde的資訊記錄下的表格,
(資料紀錄欄從A2Y2)因為表格中的資料隨時都在變化,所以運用VBA程式將其自開盤後每間隔10秒紀錄於sheet1,每日自第271列由上往下紀錄,
(b)  D欄每日自第271列以下紀錄08:45開盤後每10秒紀錄一次成交價至13:45收盤
(c)   Q欄係10秒k線的270移動平均價
(d)  U261至U270係每日收盤後將倒數10根的30分k收盤價以手動輸入之欄位,
(e)  U欄每日自第271列以下紀錄08:45開盤後每30分鐘紀錄一次成交價至13:45收盤,即09:15、09:45、10:15、10:45…13:45 ,或謂30 分k收盤價。

今若欲在每日開盤後求算30 分k線5根即時移動平均價(5MA),若對應SHEET1中的欄位資料,係指當根K棒即時價(即D儲存格值)加上U往上數倒數4個非空白價位之平均值:此處時間以10:02:10為例解為D714、U613、U445、U270、U269之平均值,不知其VBA程式語法應如何撰寫?

感謝諸位大德協助

附現行運作之程式碼如下及excel檔案附件:
Public uMode&, StartTime, EndTime, BeepChk%
Public MyBook As Workbook, Sht1 As Worksheet, Sht2 As Worksheet, xRow&
Private Declare Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Sub 共用參照()
Set MyBook = ThisWorkbook
Set Sht1 = MyBook.Sheets("Sheet1")
Set Sht2 = MyBook.Sheets("Sheet2")
StartTime = "08:45:05"  '開盤時間(提早十秒開始,才可記錄開盤量價)
EndTime = "13:45:05"    '收盤時間(延後十秒停止記錄)
End Sub
(....中間省略)
Sht2.Range("W2") = Time '當前時間(時間碼表)
'----------------------------------------------------------
If Second(Time) Mod 10 = 0 Then
   '↓從第一列開始記錄
   xRow = Sht1.Range("E65536").End(xlUp).Row
   If Sht1.Range("D" & xRow) <> "" Then xRow = xRow + 1
   Sht1.Range("A" & xRow & ":Y" & xRow).Value = Sht2.Range("A2:Y2").Value
   Sht1.Range("W" & xRow).Value = Time
   '↓第2筆開始計算與上一筆的差值
    If xRow > 1 Then
      With Sht1
          .Range("J" & xRow) = .Range("I" & xRow).Value - .Range("I" & xRow - 1).Value
          .Range("Q" & xRow) = Format(Application.Sum(Range("D" & xRow - 269 & ":D" & xRow)) / 270, "0.00")     '指數1個tick的270ma
         End With
End If
If Hour(Time) > 9 And Second(Time) = 0 And Minute(Time) Mod 15 = 0 And Minute(Time) Mod 30 <> 0 Then
               Sht1.Range("U" & xRow).Value = Sht1.Range("D" & xRow).Value       '08:45開盤後每30分鐘紀錄一次成交價至13:45收盤,即09:15、09:45、10:15、10:45…13:45 / 或謂30 分k收盤價
'------------------------------------------------
Sht1.ChartObjects("圖表 1").Top = Cells(xRow - 7, 1).Top '圖表自動往下移動(與資料保持一列空白)
Sht1.ChartObjects("圖表 2").Top = Cells(xRow + 12, 1).Top '圖表自動往下移動(與資料保持一列空白)
   If ActiveSheet.Name = Sht1.Name And xRow > 4 Then
      ActiveWindow.ScrollRow = xRow - 3 '讓最新資料保持在可見視窗中
   End If
   ThisWorkbook.Save   '存檔
   Beep
End If
Application.OnTime Now + TimeValue("00:00:01"), "自動記錄"   '每一秒遞迴一次
End Sub
(....中間省略)
If ActiveSheet.Name = Sht1.Name Then ActiveWindow.ScrollRow = 1
Beep
End Sub




TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-4 15:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
剛才將該excel檔案附件上傳至  http://vdisk.weibo.com/s/DtEncXgg9Rtxy

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-5 09:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-5 10:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sebastian-1 发表于 2016-4-5 09:25
以上連結似乎不太順暢 故請點選此連結 ... https://drive.google.com/file/d/0B2d6lM0DrqR_QkRaZmhlQzR4T2M ...

1.上傳附檔,可利用本論壇的上傳附件功能(迴紋針工具),上傳前檔案須先壓縮為rar 或 zip
2.dde問題,除非有與您相同的dde程式,才能測試檔案,  
  何況vbe編輯器有〔繁簡〕不相容問題,所以應無人來解答此題
3.k線或其它技術分析圖表,除非對這方面有研究,否則也是無解(我也不懂!!!),
  如果您本身懂得,只是不懂如何取出所需數據,可提供一天的記錄表,並將需求結果模擬供參考即可,
  計算簡單的,公式應即可處理,而原dde程式可省略,避免太複雜而乏人問津
4.除了excel home,麻辣家族:http://forum.twbts.com/index.php 也可發帖,
  但不確定是否可以得到應有的解答,也是看問題本身!!!

帖中的dde記錄vba程式,雖是我寫的,但我從未用過dde,也不會各項分析技術,實無可供參考的知識,
期待本論壇有心的大大了!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-11 22:55 , Processed in 0.034579 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表