搜索
查看: 29423|回复: 38

飞狐转GET数据公式源代码 第2测试版

[复制链接]
发表于 2004-9-9 16:32 | 显示全部楼层

飞狐转GET数据公式源代码 第2测试版

来自:MACD论坛(bbs.macd.cn) 作者:月魂之魄 浏览:29423 回复:38

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
飞狐转GET数据公式源代码详细说明:
这是一个飞狐公式的源代码,是利用VBScript脚本语言编写的可以在本地D盘Ascii Data目录(没有目录的话软件自动创建)下创建GET软件的ASII数据格式的工具。本次发布的是第一次创作的版本。特点
1。自动创建d:\ascii data目录及子目录
2。在不同的分析画面(日,分时)打开该指标时自动输出日线数据和分钟线数据(伪分时)。
3。各种不同的数据安放在不同的目录中,便于区分。
4。日线数据和分时数据名称代码不一样,便于区分。
以后会听取大家的建议不断的改进该公式,希望大家有什么问题的话可以提出来,以便我对该公式进行优化。
本次修改说明:
1。取消了代码中不必要的周线,月线,年线多余代码(实际上没有用)。
2。取消了分笔,1-30分钟伪分时数据以及相应目录。
3。由于GET数据的原因,将A股日线数据文件名称开头由SH(SZ)修改为A,将60分钟伪分时数据文件名称开头修改为M,这样便于在GET打入证券代码。
4。增加了自动补数据的功能(即在第一次扫描所有股票文件以后,以后扫描只是将新增加的数据增加到前一次的尾部,这样即大大提高了大量数据转换的效率)(希望大家测试,有什么问题就提出来)注意,第一次扫描的时候最好将所有以前的股票数据准备完全,不然转换的时候会有错误。
以下是代码部分(用这个代码创建公式即可)
5。我的电子邮件 tibetmaster@hotmail.com 希望大家和我交流,相关的问题可直接发送到邮件上面。

     _Barpos := BARPOS;
       _Year := YEAR;
      _Month := MONTH;
        _Day := DAY;
   _Datatype := DATATYPE;
_Marketlabel := MARKETLABEL;
    _StkName := STKLABEL;
       _Open := OPEN;
       _High := HIGH;
        _Low := LOW;
      _Close := CLOSE;
        _Vol := VOL;
     _Amount := AMOUNT;  

<%
Dim Marketlabels,Stknames,Datatypes,Opens,Highs,Lows,Closes,Vols,Amounts,Years,Months,Days
     Barposes = ffl.vardata("_Barpos")
        Years = ffl.vardata("_Year")
       Months = ffl.vardata("_Month")
         Days = ffl.vardata("_Day")
    Datatypes = ffl.vardata("_Datatype")
Marketlabels = ffl.vardata("_Marketlabel")
     Stknames = ffl.vardata("_Stkname")
        Opens = ffl.vardata("_Open")
        Highs = ffl.vardata("_High")
         Lows = ffl.vardata("_Low")
       Closes = ffl.vardata("_Close")
         Vols = ffl.vardata("_Vol")
      Amounts = ffl.vardata("_Amount")

If ReportFolderStatus("D:\Ascii Data") = 0 Then CreatFolder()
SelectCreatAsciiDataType(Datatypes)

Function SelectCreatAsciiDataType(Types)
        Select Case Types
                Case 0

                Case 1
                       
                Case 2
                       
                Case 3
                       
                Case 4
                       
                Case 5
                        Call CreateAsciiDataMin("60min")
                Case 6
                        Call CreateAsciiDataDayes()
                Case 7
                       
                Case 8
                       
                Case 9
                       
                Case 10

                Case 11

                Case Else

                End Select
End Function

Function CreateAsciiDataMin(FolderName)
        Const ForReading = 1, ForWriting = 2, ForAppending = 8
        Const TristateTrue = -1,TristateFalse = 0,TristateUseDefault = -2
        Dim Fso,FileName,TextStream,LineData,ArrayLast,LastDate,AforeDate,AforeYear,AforeMonth,AforeDay
        Set Fso = CreateObject("Scripting.FileSystemObject")
        FileName = "D:\Ascii Data\" & FolderName & "\" & "M" & StkNames & ".dat"
        Set TextStream = Fso.OpenTextFile(FileName, ForWriting, True)
        ArrayLast = Ubound(Barposes)
        LastDate = Years(ArrayLast) & "-" & Months(ArrayLast) & "-" & Days(ArrayLast)
        For i = 0 To ArrayLast
                AforeDate = DateAdd("d",(i-ArrayLast),LastDate)
                AforeYear = Year(AforeDate)
                AforeMonth = Month(AforeDate)
                If Len(AforeMonth) = 1 Then AforeMonth = "0" & AforeMonth
                AforeDay = Day(AforeDate)
                If Len(AforeDay) = 1 Then AforeDay = "0" & AforeDay
                Opens(i) = FormatNumber(Opens(i),3,,,TristateFalse)
                Highs(i) = FormatNumber(Highs(i),3,,,TristateFalse)
                Lows(i) = FormatNumber(Lows(i),3,,,TristateFalse)
                Closes(i) = FormatNumber(Closes(i),3,,,TristateFalse)
            Vols(i) = FormatNumber(Vols(i),3,,,TristateFalse)
                Amounts(i) = FormatNumber(Amounts(i),3,,,TristateFalse)
                LineData = AforeYear & AforeMonth & AforeDay & " " & Opens(i) & " " & Highs(i) & " " & Lows(i) & " " & Closes(i) & " " & Vols(i) & " " & Amounts(i)
                TextStream.WriteLine LineData
        Next
        TextStream.Close
End Function

Function CreateAsciiDataDayes()
        Const ForReading = 1, ForWriting = 2, ForAppending = 8
        Const TristateTrue = -1,TristateFalse = 0,TristateUseDefault = -2
        Dim i,Fso,FileName,TextStream,LineData,AforeLast,ArrayLast
        Set Fso = CreateObject("Scripting.FileSystemObject")
        FileName = "D:\Ascii Data\Dayes\" & "A" & StkNames & ".dat"
        IF ReportFileStatus(FileName) = 0 Then
                Set TextStream = Fso.OpenTextFile(FileName,ForWriting,True)
                ArrayLast = Ubound(Barposes)
                For i = 0 To ArrayLast
                        If Len(Months(i)) = 1 Then Months(i) = "0" & Months(i)
                        If Len(Days(i)) = 1 Then Days(i) = "0" & Days(i)
                        Opens(i) = FormatNumber(Opens(i),3,,,TristateFalse)
                        Highs(i) = FormatNumber(Highs(i),3,,,TristateFalse)
                        Lows(i) = FormatNumber(Lows(i),3,,,TristateFalse)
                        Closes(i) = FormatNumber(Closes(i),3,,,TristateFalse)
                        Vols(i) = FormatNumber(Vols(i),3,,,TristateFalse)
                        Amounts(i) = FormatNumber(Amounts(i),3,,,TristateFalse)
                        LineData = Years(i) & Months(i) & Days(i) & " " & Opens(i) & " " & Highs(i) & " " & Lows(i) & " " & Closes(i) & " " & Vols(i) & " " & Amounts(i)
                        TextStream.WriteLine LineData
                Next
                TextStream.Close
        ElseIf ReportFileStatus(FileName) = 1 Then
                AforeLast = 0
                Set TextStream = Fso.OpenTextFile(FileName, ForReading, False)
                Do Until TextStream.AtEndOfStream = True
                TextStream.ReadLine
                AforeLast = AforeLast+1
                Loop
                TextStream.Close
                Set TextStream = Fso.OpenTextFile(FileName,ForAppending,False)
                ArrayLast = Ubound(Barposes)
                For i = AforeLast To ArrayLast
                        If Len(Months(i)) = 1 Then Months(i) = "0" & Months(i)
                        If Len(Days(i)) = 1 Then Days(i) = "0" & Days(i)
                        Opens(i) = FormatNumber(Opens(i),3,,,TristateFalse)
                        Highs(i) = FormatNumber(Highs(i),3,,,TristateFalse)
                        Lows(i) = FormatNumber(Lows(i),3,,,TristateFalse)
                        Closes(i) = FormatNumber(Closes(i),3,,,TristateFalse)
                        Vols(i) = FormatNumber(Vols(i),3,,,TristateFalse)
                        Amounts(i) = FormatNumber(Amounts(i),3,,,TristateFalse)
                        LineData = Years(i) & Months(i) & Days(i) & " " & Opens(i) & " " & Highs(i) & " " & Lows(i) & " " & Closes(i) & " " & Vols(i) & " " & Amounts(i)
                        TextStream.WriteLine LineData
                Next
                TextStream.Close
        End If       
End Function

Function ReportFileStatus(Filespec)
        Dim Fso, Status
        Set Fso = CreateObject("Scripting.FileSystemObject")
        If (Fso.FileExists(Filespec)) Then
                Status = 1
        Else
                Status = 0
        End If
        ReportFileStatus = Status
End Function

Function ReportFolderStatus(FolderDir)
        Dim Fso, Status
        Set Fso = CreateObject("Scripting.FileSystemObject")
        If (Fso.FolderExists(FolderDir)) Then
                Status = 1
        Else
                Status = 0
        End If
        ReportFolderStatus = Status
End Function

Function CreatFolder()
        Dim Fso
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Dim Folder
        Set Folder = Fso.CreateFolder("D:\Ascii Data")
        Set Folder = Fso.CreateFolder("D:\Ascii Data\Dayes")
        Set Folder = Fso.CreateFolder("D:\Ascii Data\60min")
End Function
%>
0;
金币:
奖励:
热心:
注册时间:
2004-8-21

回复 使用道具 举报

发表于 2004-9-9 22:34 | 显示全部楼层
好象不行,请问数据格式是否能改变,最好是TXT格式,包括日期.最好能有分时(60,30,15,5)这样还可以给别的软件用.
金币:
奖励:
热心:
注册时间:
2003-4-14

回复 使用道具 举报

发表于 2004-9-9 23:41 | 显示全部楼层
这是输出的沪铜CU12的60min数据
20010429 16690.000 16690.000 16690.000 16690.000 .000 4.000
20010430 16690.000 16690.000 16690.000 16690.000 .000 4.000
20010501 16690.000 16690.000 16690.000 16690.000 .000 4.000
20010502 16690.000 16690.000 16690.000 16690.000 .000 4.000
20010503 16690.000 16840.000 16690.000 16690.000 .000 4.000

经测试,情况如下:
1.只有日线和60min能输出数据,其它的连目录都不能创建。日线数据输出功能对于飞狐来说是多余的。
2.输出日期没有分割符----“.”    “-”    “/”  , get不能识别。应该是YYYY-MM-DD格式。
3.小数点位过多,除了外汇其它的用不上,最多两位小数足矣。现在的国内期货甚至没有小数位,所以能否根据数据输出相应的小数点位呢?
成交量和持仓量(或者金额)没有必要用小数点。
4.成交量和持仓量有的只有小数点后面的数据,属于比较严重的错误,get会有提示出现。

5.get默认的ASCII文本为PRN格式的文本数据,而目前普遍使用的是txt文本数据。这两种格式望考虑。

暂时考虑这么多,供参考吧:)
金币:
奖励:
热心:
注册时间:
2002-12-15

回复 使用道具 举报

发表于 2004-9-9 23:48 | 显示全部楼层
追加数据的思路很好,可是我有一点疑问,伪分时数据是从目前日期倒推的形式排列,而不是从以往的过去某一固定时间向现在延伸,怎么能追加呢?get只能识别1900年至当日的数据,不可以识别这个范围以外的时间数据。
金币:
奖励:
热心:
注册时间:
2002-12-15

回复 使用道具 举报

 楼主| 发表于 2004-9-10 00:16 | 显示全部楼层
WFW:GET数据我没有添加1-30分钟的伪分时数据,已经在说明中表叙过,下一测试版我会添加,日期格式是yyyymmdd 但要在格式中选中打包选项,数据追加只应用在日线数据上(而且以前的日线数据要完整才好),伪分时数据暂时没有考虑追加问题,输出伪分时数据只能是覆盖原数据(重写)。我会考虑您所提出的一系列问题加以改进在第3测试版中,非常感谢您的意见,望多交流。
金币:
奖励:
热心:
注册时间:
2004-8-21

回复 使用道具 举报

发表于 2004-9-10 00:43 | 显示全部楼层
哈,选中打包选项这个我还是听您说才知道。谢谢!
日期格式最好添加分割符,对于使用者来说,get的缺省设置改动的越少也越容易接受。

如能增添飞狐中的2小时和4小时的分时数据输出就能适应更多的需求者。

现在的伪分时时间采用的是倒推的方式,这样有一个问题,就是每次转换数据后,get里面原来的画线和部分指标就不能保持了,需要删除后再重新画线,如能从1900年开始向现在延伸时间,这个问题就可以解决。
对于编程我是绝对的外行,只是从使用者的角度给您挑刺儿:)
暂时想起来的就这些,以后再有想法和您联系。:)
金币:
奖励:
热心:
注册时间:
2002-12-15

回复 使用道具 举报

发表于 2004-9-10 10:43 | 显示全部楼层
:*22*:
金币:
奖励:
热心:
注册时间:
2003-12-8

回复 使用道具 举报

发表于 2004-9-10 10:56 | 显示全部楼层
应该考虑输出的文本格式是国际业界通用的ASICC文件。如Metastock等著名软件采用的格式,Get认可的文本格式是可调的。

飞弧无法调整,所以俺目前不愿用飞弧。
金币:
奖励:
热心:
注册时间:
2003-12-8

回复 使用道具 举报

发表于 2004-9-10 12:21 | 显示全部楼层
飞狐可以输出任意格式的ASCII文本数据,不懂不要否定。
金币:
奖励:
热心:
注册时间:
2002-12-15

回复 使用道具 举报

签到天数: 2 天

发表于 2004-9-10 13:18 | 显示全部楼层
让FH做个DDE,象METATRADER一样,不就什么都解决了?
金币:
奖励:
热心:
注册时间:
2003-5-7

回复 使用道具 举报

发表于 2004-9-10 18:56 | 显示全部楼层

hao

金币:
奖励:
热心:
注册时间:
2002-2-15

回复 使用道具 举报

发表于 2004-9-10 22:39 | 显示全部楼层
Originally posted by wfw at 2004-9-10 12:21:
飞狐可以输出任意格式的ASCII文本数据,不懂不要否定。



很抱歉,严格意义上说,我只是试用过飞狐未注册版。

下图是它的数据转换图,能否解答疑问?


开盘,收盘等可选项全是不可调的吗?
EURUSD 5 MIN.gif
金币:
奖励:
热心:
注册时间:
2003-12-8

回复 使用道具 举报

发表于 2004-9-10 22:54 | 显示全部楼层

Elwave吃文本格式最棒!

Originally posted by wfw at 2004-9-10 12:21:
飞狐可以输出任意格式的ASCII文本数据,不懂不要否定。


下图中所有的域均可调,跟文本文件的列数适应。也就是说,文本有多少列,后面的skip可以自动开放,用户可自由定义。

其实,get适用也好强,如俺从VT考下的外汇数据格式如下,它照读不误。

Date        Open        Close        High        Low
10.31.2000 00:00        0.8403        0.8424        0.8424        0.8424
11.01.2000 00:00        0.8424        0.8489        0.8489        0.8489
11.02.2000 00:00        0.8489        0.8608        0.8608        0.8608
11.03.2000 00:00        0.8608        0.8604        0.8604        0.8604
11.04.2000 00:00        0.8604        0.8653        0.8653        0.8653
11.07.2000 00:00        0.8653        0.8606        0.8606        0.8606
11.08.2000 00:00        0.8606        0.8615        0.8615        0.8615
11.09.2000 00:00        0.8615        0.8551        0.8551        0.8551
EURUSD 5 MIN.gif
金币:
奖励:
热心:
注册时间:
2003-12-8

回复 使用道具 举报

发表于 2004-9-11 21:30 | 显示全部楼层
通常来讲,数据的格式指的是数据的后缀名,如ASCII中的txt,CSV,CHT,PRN等。上述各种格式都有其基本的数据排列和数域分割规则。而不是单指个人所需求的任意调整各列间的顺序。

另外,您图示中的飞狐调整方式在我这里也不可以,我用的是正版飞狐。
金币:
奖励:
热心:
注册时间:
2002-12-15

回复 使用道具 举报

发表于 2004-9-11 21:34 | 显示全部楼层
Date                            Open          Close           High             Low
10.31.2000 00:00        0.8403        0.8424        0.8424        0.8424
11.01.2000 00:00        0.8424        0.8489        0.8489        0.8489
11.02.2000 00:00        0.8489        0.8608        0.8608        0.8608

您的GET如果是这种设置“Date   Open   Close  High   Low”的话,可以读取上面的这些数据吗?
金币:
奖励:
热心:
注册时间:
2002-12-15

回复 使用道具 举报

发表于 2004-9-14 00:13 | 显示全部楼层
Originally posted by wfw at 2004-9-11 21:34:
Date                            Open          Close           High             Low
10.31.2000 00:00        0.8403        0.8424        0.8424        0.8424
11.01.2000 00:00        0.8424         ...


没问题呀,Get的Open等关键词可调!

通常认为的那种格式不是唯一get认可的格式。
上面的数据是Vt的外汇日线直接  copy 的,get认。
金币:
奖励:
热心:
注册时间:
2003-12-8

回复 使用道具 举报

发表于 2004-9-14 00:16 | 显示全部楼层
Originally posted by 月魂之魄 at 2004-9-9 16:32:
飞狐转GET数据公式源代码详细说明:
这是一个飞狐公式的源代码,是利用VBScript脚本语言编写的可以在本地D盘Ascii Data目录(没有目录的话软件自动创建)下创建GET软件的ASII数据格式的工具。本次发布的是第一次 ...



请教下面是什么语言?

High1 := Ref(HIGH,-2); High2 := Ref(HIGH,-1);
  High3 := Ref(HIGH,0); High4 := Ref(HIGH,1);  
  High5 := Ref(HIGH,2);  

  Low1 := Ref(LOW,-2);Low2 := Ref(LOW,-1);   
  Low3 := Ref(LOW,0); Low4 := Ref(LOW,1);   
  Low5 := Ref(LOW,2);   

  UpFR:= high3 + mov((high-low)/3,100,S);
  LoFR:= Low3 - mov((high-low)/3,100,S);

{Generator & Paint FRACTAL}
  FR:= If((High3 > High1) AND (High3 > High2)
  AND (High3 >= High4)
  AND (High3 >= High5), UpFR, null);

  FR:= If((Low3 < Low1) AND (Low3 < Low2)            
  AND (Low3 <= Low4)AND (Low3 <= Low5),            
  If(FR = UpFR, null , LoFR), FR);

  {generator LEVEL}
  UP_FR:= If( FR = UpFR, High3, PREV);
  Lo_FR:= If( FR = LoFr, Low3, PREV);
  
  {Paint LEVEL}
  UPLevel:= REF (UP_FR, -1);
  LOLevel:= REF (Lo_FR, -1);

可以用飞狐或分析家模拟吗?
金币:
奖励:
热心:
注册时间:
2003-12-8

回复 使用道具 举报

发表于 2004-9-14 00:18 | 显示全部楼层
Originally posted by 月魂之魄 at 2004-9-9 16:32:
飞狐转GET数据公式源代码详细说明:
这是一个飞狐公式的源代码,是利用VBScript脚本语言编写的可以在本地D盘Ascii Data目录(没有目录的话软件自动创建)下创建GET软件的ASII数据格式的工具。本次发布的是第一次 ...



请教下面是什么语言?

High1 := Ref(HIGH,-2); High2 := Ref(HIGH,-1);
  High3 := Ref(HIGH,0); High4 := Ref(HIGH,1);  
  High5 := Ref(HIGH,2);  

  Low1 := Ref(LOW,-2);Low2 := Ref(LOW,-1);   
  Low3 := Ref(LOW,0); Low4 := Ref(LOW,1);   
  Low5 := Ref(LOW,2);   

  UpFR:= high3 + mov((high-low)/3,100,S);
  LoFR:= Low3 - mov((high-low)/3,100,S);

{Generator & Paint FRACTAL}
  FR:= If((High3 > High1) AND (High3 > High2)
  AND (High3 >= High4)
  AND (High3 >= High5), UpFR, null);

  FR:= If((Low3 < Low1) AND (Low3 < Low2)            
  AND (Low3 <= Low4)AND (Low3 <= Low5),            
  If(FR = UpFR, null , LoFR), FR);

  {generator LEVEL}
  UP_FR:= If( FR = UpFR, High3, PREV);
  Lo_FR:= If( FR = LoFr, Low3, PREV);
  
  {Paint LEVEL}
  UPLevel:= REF (UP_FR, -1);
  LOLevel:= REF (Lo_FR, -1);

可以用飞狐或分析家模拟吗?
金币:
奖励:
热心:
注册时间:
2003-12-8

回复 使用道具 举报

发表于 2004-9-14 00:22 | 显示全部楼层
<TICKER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>
AUD,20040901,203500,0.7030,0.7031,0.7030,0.7030
AUD,20040901,204000,0.7030,0.7030,0.7029,0.7029
AUD,20040901,204500,0.7029,0.7029,0.7028,0.7028
AUD,20040901,205000,0.7028,0.7030,0.7028,0.7029
AUD,20040901,205500,0.7029,0.7030,0.7028,0.7029

Metastock 的数据格式比较普遍,俺的经验是一个好的支持文本数据的软件应该有调整关键词排例的能力,适用性好。
金币:
奖励:
热心:
注册时间:
2003-12-8

回复 使用道具 举报

发表于 2004-9-15 14:10 | 显示全部楼层
好帖狂顶。
金币:
奖励:
热心:
注册时间:
2004-6-3

回复 使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站声明:1、本站所有广告均与MACD无关;2、MACD仅提供交流平台,网友发布信息非MACD观点与意思表达,因网友发布的信息造成任何后果,均与MACD无关。
MACD俱乐部(1997-2019)官方域名:macd.cn   MACD网校(2006-2019)官方域名:macdwx.com
值班热线[9:00—17:30]:18292674919   24小时网站应急电话:18292674919
找回密码、投诉QQ:89918815 友情链接QQ:95008905 广告商务联系QQ:17017506 电话:18292674919
增值电信业务经营许可证: 陕ICP19026207号—2  陕ICP备20004035号

举报|意见反馈|Archiver|手机版|小黑屋|MACD俱乐部 ( 陕ICP备20004035号 )

GMT+8, 2024-4-24 15:20 , Processed in 0.073897 second(s), 7 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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