股票计算.rar
(137.58 KB, 下载次数: 151)
程序目的: 根据选取的做多、做空的股票,画出给定时间段的多空双方股票加权价格、pe等
出现的问题:
在sheet1中添加多方(或空方)的股票后点击“计算”
出现提示:运行时错误‘6’溢出 出现错误的语句是 mul1 = mul1 + Sheet3.Cells(n + 1, m + 1) * Sheet1.Cells(fr + m, 5) / Sheet3.Cells(2, m + 1) (如果是空方股票,出现在mul2中) 调试错误时 发现停在最新添加的股票上 另外要说明的是 (1)这个问题出现后,只重新点击“计算”,就没有问题了,可以运行出结果 (2)运行过的股票,不关闭excel文件,清空后重新添加这个股票,也不会出问题
点击“计算”执行的程序如下(更详细的可见附件,下面程序中/后的注释是这里加的,原程序中没有): Private Sub CommandButton5_Click()
Dim fr As Integer
Dim r As Integer /这两个计算多方的股票个数用
Dim kfr As Integer
Dim kr As Integer /这两个计算空方的股票个数用
Dim startdate As Date
Dim enddate As Date /给定的时间段
Dim mul1 As Double /多方加权价格
Dim mul2 As Double /空方加权价格
fr = Sheet1.Range("A1").End(xlDown).row
r = Sheet1.Range("A10000").End(xlUp).row
kfr = Sheet1.Range("G1").End(xlDown).row
kr = Sheet1.Range("G10000").End(xlUp).row
startdate = Sheet1.TextBox1.Value
enddate = Sheet1.TextBox2.Value
'读取价格数据并按权重加权
Sheet3.Cells().Clear
For k = 1 To r - fr
Sheet3.Cells(1, k + 1) = Sheet1.Cells(fr + k, 2) / 把多方的股票代码列到第一行
Next k
For j = 1 To kr - kfr
Sheet3.Cells(1, r - fr + 1 + j) = Sheet1.Cells(kfr + j, 8) /第一行中紧接着多方的股票代码列空方的股票代码
Next j
Sheet3.Cells(1, r - fr + kr - kfr + 2).Value = "多方加权价格"
Sheet3.Cells(1, r - fr + kr - kfr + 3).Value = "空方加权价格"
Sheet3.Cells(1, 1) = "=HX_AutoDate(1,""" & startdate & """,""" & enddate & """,-1,-1,0,0,0,0,0)" /这个是同花顺的函数,在A1单元格中输入函数,此列下面单元格中自动列出交易日
For m = 1 To r - fr + kr - kfr
For n = 1 To Sheet3.Range("A10000").End(xlUp).row - 1
Sheet3.Cells(n + 1, m + 1).Formula = "=hx_s_dq_close(R[-" & n & "]C,RC[-" & m & "],2)" /同花顺函数,根据交易日和股票代码读取收盘价
Next n
Next m
For n = 1 To Sheet3.Range("A10000").End(xlUp).row - 1 '多方加权价格计算
If r - fr = 1 Then /如果多方只有一个股票,加权价格即为原来的价格
Sheet3.Cells(n + 1, r - fr + kr - kfr + 2).Value = Sheet3.Cells(n + 1, 2).Value
Else
For m = 1 To r - fr /多方股票个数大于1,计算加权价格,比例为sheet1中输入的自定义比例,即Sheet1.Cells(fr + m, 5)中的数,后面除以Sheet3.Cells(2, m + 1)是对价格序列的标准化,即首日加权价格为1
mul1 = mul1 + Sheet3.Cells(n + 1, m + 1) * Sheet1.Cells(fr + m, 5) / Sheet3.Cells(2, m + 1)
Next m
Sheet3.Cells(n + 1, r - fr + kr - kfr + 2).Value = mul1
mul1 = 0
End If
Next n
。。。。。
望高手不吝赐教~~非常感谢~~
|