0

我使用国家证券交易所(印度)EOD 数据进行个人投资决策。我通过一个软件 Utility NSE EOD Data Downloader v3.0 下载每日结束报价文件。下载的文件是 csv 格式的文本文件,并包含日期作为文本字符串。该文件的长度可变,具体取决于特定日期的活跃报价。我通过启用宏的 excel 文件处理下载的文件,以期将日期文本字符串转换为日期格式,并将其转换为合适的格式以在 Access 数据库中处理,以根据移动平均线、高低最大值和最小值等参数进行投资决策平均值等并输入到 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 启用宏的文件 EOD_Formatting.xlsm 将打开并启动以下步骤。

a) 打开一个输入框以输入文件名,例如“EQ_03AUG2015.txt”,该文件名每天都会有所不同。用户可以根据自己的目录修改路径以存储此类文件。打开此文件并复制内容。

b) 为了不干扰宏文件,它打开另一个文件“dly_nsedly_conversion.xlsx”。首先将上一步中复制的文本文件的内容粘贴到从单元格 A1 开始的 Sheet3 上。其次,它会清除“NSE_DLY_RAW”表上的先前内容,否则可能会有重复的行。选择 H2000 以内的范围是因为国家证券交易所的一般价格文件包含少于 2000 个报价。然后它移动到 sheet3 并确定填充单元格的范围并移动到“NSE_DLY_RAW”表以粘贴从单元格 A2 开始的选定范围,这样标题行就不会受到干扰。日期列也从文本字符串转换为日期格式。

c) .xlsx 格式的转换文件作为 EOD_Converted.xlsx 文件保存到 mydir\EOD_Converted_Date 文件夹,该文件可以直接导入 Access 数据库,也可以通过 Access 导出为 csv 文件以输入到 Amibroker Trader Program。EOD_Formatting.xlsm 的代码附在下面。

公共 fname 作为字符串

      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.

EOD_Converted.xlsx

EOD_Formatting.xlsmenter 图像描述在这里

dly_nsedly_conversion.xlsx

EQ_03AUG2015.txt

4

1 回答 1

0

这对我来说似乎有点太复杂了。考虑使用 R 处理原始 CSV 文件,通过 RODBC 库将转换后的数据直接保存到 Access(或者更好的是 SQL)数据库,然后通过 AmiBroker 中的 ODBC 插件直接访问数据。

于 2015-09-09T16:40:13.820 回答