证券交易所 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

  1. 每天收到的EOD数据文件如"EQ_03AUG2015.txt"保存在c:\mydir\EOD_Data.
  2. 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 插件直接访问数据。