证券交易所 EOD 数据转换程序问题
Stock Exchanges EOD Data conversion program problems
我使用国家证券交易所(印度)的 EOD 数据进行个人投资
决定。我通过软件下载每日收盘报价文件
实用程序 NSE EOD 数据下载器 v3.0。下载的文件是csv格式的文本
文件并包含日期作为文本字符串。这个文件是可变长度的
取决于特定日期的活跃报价。我处理下载的文件
通过 excel 启用宏的文件,以将日期文本字符串转换为
日期格式并将其转换为合适的格式以便在 Access 数据库中处理
基于移动平均线、High Low Max 和
最小值平均值等并输入到 Amibroker 交易程序。方法
以下概述如下。
I was facing some difficulty in up-loading the files . Hence providing a drop box link to the following files samples in "EOD_Data,zip"
Sample EOD_Data.txt "EQ_03AUG2015.txt"
Sample of EOD_Formatting.xlsm
Sample file dly_nsedly_conversion.xlsx
Sample of EOD_Converted.xlsx
[EOD_Data,zip]
<https://www.dropbox.com/sh/256mvvcnj6fhu20/AAD7nZpTHBuHfCpMNznr93PDa?dl=0>
1.) Excel 启用宏的文件“EOD_Formatting”已打开,其中包含链接到宏的命令按钮 open_text_file
- 每天收到的EOD数据文件如"EQ_03AUG2015.txt"保存在c:\mydir\EOD_Data.
- Excel Macro-enabled 文件 EOD_Formatting.xlsm 打开并启动以下步骤。
a) 打开一个Input-Box 输入文件名如"EQ_03AUG2015.txt" 每天都会变化。用户可以根据他的目录修改路径来存储这些文件。此文件已打开并复制了内容。
b) 为了不打扰宏文件,它打开另一个文件"dly_nsedly_conversion.xlsx"。首先将上一步复制的文本文件内容粘贴到Sheet3中,从A1单元格开始。其次它会清除 "NSE_DLY_RAW " sheet 上的先前内容,否则可能会出现重复行。选择 H2000 的范围是因为国家证券交易所的一般价格文件包含少于 2000 个报价。然后它移动到 sheet3 并确定填充单元格的范围并移动到 "NSE_DLY_RAW" sheet 以粘贴从单元格 A2 开始的选定范围,以便 Header 行不被打扰。日期列也从文本字符串转换为日期格式。
c) .xlsx 格式的转换文件作为 EOD_Converted.xlsx 文件保存到 mydir\EOD_Converted_Date 文件夹,可以直接导入到 Access 数据库中,并通过 Access 导出为 csv 文件以输入到 Amibroker Trader Program .
EOD_Formatting.xlsm 的代码附在下面。
Public fname As String
Public Sub open_text_file()
Dim wb1 As Excel.Workbook
Dim wb2 As Excel.Workbook
Dim filepath As String
Dim r As Range, i As Long
'path of the file whcih contains the file as
'received 'from 'software utility NSE EOD Data Downloader v3.0
filepath = "C:\mydir\EOD_Data\"
'Input filename like "EQ_04AUG2015.txt" to be processed by excel
'macro file
On Error Resume Next
fname = Application.InputBox("Enter the Filename", Type:=2)
On Error GoTo 0
Workbooks.OpenText Filename:=filepath & fname, _
StartRow:=1, DataType:=xlDelimited, Comma:=True
Cells.Select
Selection.Copy
'File no. of quotes vary daily. Further processing to transform
'date string from text to date format and variable length files
Set wb2 = Workbooks.Open("C:\mydir\dly_nsedly_conversion.xlsx")
Sheets("Sheet3").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("NSE_DLY_RAW").Select
'It is desired to clear previous content otherwise there can be
'duplicate rows. H2000 chosen because general Price file _
' of National Stock Exchange contains less than 2000 quotes
ActiveSheet.Range("A2:H2000").Select
Selection.ClearContents
Sheets("Sheet3").Select
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Set rng1 = Cells.Find("*", [A1], , , xlByRows, xlPrevious)
Set rng2 = Cells.Find("*", [A1], , , xlByColumns, xlPrevious)
If Not rng1 Is Nothing Then
Set rng3 = Range([A1], Cells(rng1.Row, rng2.Column))
Range([A1], Cells(rng1.Row, rng2.Column)).Select
Selection.Copy
End If
Sheets("NSE_DLY_RAW").Select
Range("A2").Select
ActiveSheet.Paste
LR = Cells(rows.Count, "B").End(xlUp).Row
Range("B2:B" & LR).Select
Dim c As Range
For Each c In Selection.Cells
c.value = DataSerial(Left(c.Value,4), Mid(c.Value, 5,2), Right_
(c.Value,2))
'Following line added only to enforce the format.
c.NumberFormat = "dd/mm/yyyy"
Next
' EOD_Converted File is suitable for input to Access Data base
' and Amibroker with minor working
ActiveWorkbook.SaveAs Filename:= _
"C:\mydir\EOD_Converted_Data\EOD_Converted.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
Workbooks.Close
End Sub
虽然这个程序对我有用,但我仍在努力解决以下问题。
一种)。如果收到的数据少于 1500 个引号,则在数据填充范围结束后将保留空白行。这些空行阻碍了在 Access 2007 中选择安全符号作为关键字段,因为它不允许关键字段中的重复值或空白字段。
b) 我希望转换后的输出文件从输入框中输入的文件名中获取文件名,而不是通用文件名。
我在 Excel VBA 处于初学者水平。我将不胜感激任何帮助,使这个程序更加专业和用户友好,并指导我提供一些线索来解决上述问题。该程序对普通的非技术投资者很有帮助。
谢谢。
PS: Internet connection has started working normally in our area now. As
'such uploading pictures of sample files.
这对我来说似乎有点太复杂了。考虑使用 R 处理原始 CSV 文件,将转换后的数据通过 RODBC 库直接保存到 Access——或者更好 SQL——数据库,然后通过 AmiBroker 中的 ODBC 插件直接访问数据。
我使用国家证券交易所(印度)的 EOD 数据进行个人投资 决定。我通过软件下载每日收盘报价文件 实用程序 NSE EOD 数据下载器 v3.0。下载的文件是csv格式的文本 文件并包含日期作为文本字符串。这个文件是可变长度的 取决于特定日期的活跃报价。我处理下载的文件 通过 excel 启用宏的文件,以将日期文本字符串转换为 日期格式并将其转换为合适的格式以便在 Access 数据库中处理 基于移动平均线、High Low Max 和 最小值平均值等并输入到 Amibroker 交易程序。方法 以下概述如下。
I was facing some difficulty in up-loading the files . Hence providing a drop box link to the following files samples in "EOD_Data,zip"
Sample EOD_Data.txt "EQ_03AUG2015.txt"
Sample of EOD_Formatting.xlsm
Sample file dly_nsedly_conversion.xlsx
Sample of EOD_Converted.xlsx
[EOD_Data,zip]
<https://www.dropbox.com/sh/256mvvcnj6fhu20/AAD7nZpTHBuHfCpMNznr93PDa?dl=0>
1.) Excel 启用宏的文件“EOD_Formatting”已打开,其中包含链接到宏的命令按钮 open_text_file
- 每天收到的EOD数据文件如"EQ_03AUG2015.txt"保存在c:\mydir\EOD_Data.
- Excel Macro-enabled 文件 EOD_Formatting.xlsm 打开并启动以下步骤。
a) 打开一个Input-Box 输入文件名如"EQ_03AUG2015.txt" 每天都会变化。用户可以根据他的目录修改路径来存储这些文件。此文件已打开并复制了内容。
b) 为了不打扰宏文件,它打开另一个文件"dly_nsedly_conversion.xlsx"。首先将上一步复制的文本文件内容粘贴到Sheet3中,从A1单元格开始。其次它会清除 "NSE_DLY_RAW " sheet 上的先前内容,否则可能会出现重复行。选择 H2000 的范围是因为国家证券交易所的一般价格文件包含少于 2000 个报价。然后它移动到 sheet3 并确定填充单元格的范围并移动到 "NSE_DLY_RAW" sheet 以粘贴从单元格 A2 开始的选定范围,以便 Header 行不被打扰。日期列也从文本字符串转换为日期格式。
c) .xlsx 格式的转换文件作为 EOD_Converted.xlsx 文件保存到 mydir\EOD_Converted_Date 文件夹,可以直接导入到 Access 数据库中,并通过 Access 导出为 csv 文件以输入到 Amibroker Trader Program . EOD_Formatting.xlsm 的代码附在下面。
Public fname As String
Public Sub open_text_file()
Dim wb1 As Excel.Workbook
Dim wb2 As Excel.Workbook
Dim filepath As String
Dim r As Range, i As Long
'path of the file whcih contains the file as
'received 'from 'software utility NSE EOD Data Downloader v3.0
filepath = "C:\mydir\EOD_Data\"
'Input filename like "EQ_04AUG2015.txt" to be processed by excel
'macro file
On Error Resume Next
fname = Application.InputBox("Enter the Filename", Type:=2)
On Error GoTo 0
Workbooks.OpenText Filename:=filepath & fname, _
StartRow:=1, DataType:=xlDelimited, Comma:=True
Cells.Select
Selection.Copy
'File no. of quotes vary daily. Further processing to transform
'date string from text to date format and variable length files
Set wb2 = Workbooks.Open("C:\mydir\dly_nsedly_conversion.xlsx")
Sheets("Sheet3").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("NSE_DLY_RAW").Select
'It is desired to clear previous content otherwise there can be
'duplicate rows. H2000 chosen because general Price file _
' of National Stock Exchange contains less than 2000 quotes
ActiveSheet.Range("A2:H2000").Select
Selection.ClearContents
Sheets("Sheet3").Select
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Set rng1 = Cells.Find("*", [A1], , , xlByRows, xlPrevious)
Set rng2 = Cells.Find("*", [A1], , , xlByColumns, xlPrevious)
If Not rng1 Is Nothing Then
Set rng3 = Range([A1], Cells(rng1.Row, rng2.Column))
Range([A1], Cells(rng1.Row, rng2.Column)).Select
Selection.Copy
End If
Sheets("NSE_DLY_RAW").Select
Range("A2").Select
ActiveSheet.Paste
LR = Cells(rows.Count, "B").End(xlUp).Row
Range("B2:B" & LR).Select
Dim c As Range
For Each c In Selection.Cells
c.value = DataSerial(Left(c.Value,4), Mid(c.Value, 5,2), Right_
(c.Value,2))
'Following line added only to enforce the format.
c.NumberFormat = "dd/mm/yyyy"
Next
' EOD_Converted File is suitable for input to Access Data base
' and Amibroker with minor working
ActiveWorkbook.SaveAs Filename:= _
"C:\mydir\EOD_Converted_Data\EOD_Converted.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
Workbooks.Close
End Sub
虽然这个程序对我有用,但我仍在努力解决以下问题。 一种)。如果收到的数据少于 1500 个引号,则在数据填充范围结束后将保留空白行。这些空行阻碍了在 Access 2007 中选择安全符号作为关键字段,因为它不允许关键字段中的重复值或空白字段。 b) 我希望转换后的输出文件从输入框中输入的文件名中获取文件名,而不是通用文件名。 我在 Excel VBA 处于初学者水平。我将不胜感激任何帮助,使这个程序更加专业和用户友好,并指导我提供一些线索来解决上述问题。该程序对普通的非技术投资者很有帮助。 谢谢。
PS: Internet connection has started working normally in our area now. As
'such uploading pictures of sample files.
这对我来说似乎有点太复杂了。考虑使用 R 处理原始 CSV 文件,将转换后的数据通过 RODBC 库直接保存到 Access——或者更好 SQL——数据库,然后通过 AmiBroker 中的 ODBC 插件直接访问数据。