大智慧日K线的数据结构.docx

上传人:b****2 文档编号:592017 上传时间:2023-04-29 格式:DOCX 页数:15 大小:18.64KB
下载 相关 举报
大智慧日K线的数据结构.docx_第1页
第1页 / 共15页
大智慧日K线的数据结构.docx_第2页
第2页 / 共15页
大智慧日K线的数据结构.docx_第3页
第3页 / 共15页
大智慧日K线的数据结构.docx_第4页
第4页 / 共15页
大智慧日K线的数据结构.docx_第5页
第5页 / 共15页
大智慧日K线的数据结构.docx_第6页
第6页 / 共15页
大智慧日K线的数据结构.docx_第7页
第7页 / 共15页
大智慧日K线的数据结构.docx_第8页
第8页 / 共15页
大智慧日K线的数据结构.docx_第9页
第9页 / 共15页
大智慧日K线的数据结构.docx_第10页
第10页 / 共15页
大智慧日K线的数据结构.docx_第11页
第11页 / 共15页
大智慧日K线的数据结构.docx_第12页
第12页 / 共15页
大智慧日K线的数据结构.docx_第13页
第13页 / 共15页
大智慧日K线的数据结构.docx_第14页
第14页 / 共15页
大智慧日K线的数据结构.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

大智慧日K线的数据结构.docx

《大智慧日K线的数据结构.docx》由会员分享,可在线阅读,更多相关《大智慧日K线的数据结构.docx(15页珍藏版)》请在冰点文库上搜索。

大智慧日K线的数据结构.docx

大智慧日K线的数据结构

1大智慧日K线的数据结构

大智慧日K线的数据结构

  大智慧股票行情软件是目前应用广泛的一个炒股工具,有时我们需要自编炒股的算法进行研究,如提取某只股票的收盘价,成交量等,这时候如果能直接读大智慧股票分析系统的数据格式,将对软件的编制带来极大的方便。

(注:

大智慧用的钱龙数据格式,本文适用于钱龙股票行情软件中的日k线数据)。

本文主要描述了在Delphi下大智慧日K线的数据结构,和以动态数组方式提取数据的方法。

  一、数据文件和数据结构:

  大智慧数据文件和数据结构:

(假设大智慧股票行情软件安装在D:

dzh目录下)

  上海日线存储路径为:

D:

dzhDATASHaseDay,文件扩展名为:

.day

  上海周线存储路径为:

D:

dzhDATASHaseweek,文件扩展名为:

.wek

  上海月线存储路径为:

D:

dzhDATASHasemonth,文件扩展名为:

.mnt

  深圳日线存储路径为:

D:

dzhDATASZnseDay

  深圳周线存储路径为:

D:

dzhDATASZnseweek

  深圳月线存储路径为:

D:

dzhDATASZnsemonth

  周线,月线格式与日线格式一致.

  以深发展日线为例:

  1A76:

0100D6CD2F0152070100-5207010052070100

  1A76:

011052070100860F0000-4D02000000000000

  1A76:

01200000000000000000-D7CD2F0160030100

  1A76:

01306003010060030100-6003010082050000

  1A76:

0140D400000000000000-0000000000000000 

每一条记录的长度为40字节:

1-4字节为日期,D6CD2F01转换为十进制是:

19910102

5-8字节=开盘价(元)*1000

9-12字节=最高价(元)*1000

13-16字节=最低价(元)*1000

17-20字节=收盘价(元)*1000

21-24字节=成交金额(元)/1000

25-28字节=成交量(手)

其余12字节未使用

实现步骤:

1、先定义日线数据结构数组

2、再以实际记录数分配动态数组空间

3、然后把数据读入相应数组中

Procedure  TFormKXianMain.ReadData(Sender:

Tobject);//读取日k线数据文件中的开盘价、最高价、最低价、收盘价、成交金额、成交量

VarI:

Integer;

VarFileName:

String;//日k线数据文件

VarDataFile:

File;

//-----------------定义日线数据结构数组----------

VarDataDate:

LongWord;//日期数组

VarDataOpen:

LongWord;//开盘价数组

VarDataHigh:

LongWord;//最高价数组

VarDataLow:

LongWord;//最低价数组

VarDataClose:

LongWord;//收盘价数组

VarDataShuLiang:

LongWord;//成交量数组

VarDataJinE:

LongWord;//成交金额数组

VarDataNoOne:

LongWord;

VarDataNoTwo:

LongWord;

VarDataNoThree:

LongWord;

//----------------------------------------------

Begin

  Try

  DayCount:

=0;

  FileName:

=‘D:

dzhDATASZnseDay001.day‘;//此处根据文件的具体路径填写

  IfFileExists(FileName)Then

  Begin

  AssignFile(DataFile,Filename);

  Reset(DataFile,1);

  //-------以实际记录数分配动态数组空间--------

  DayCount:

=Round(FileSize(DataFile)/40);

  //基本数据

  SetLength(DayData,7);

  ForI:

=Low(DayData)toHigh(DayData)do

    SetLength(DayData[I],DayCount);

  I:

=0;

  //------------------------------------------

  //============把数据读入相应数组中===========

  whilenotEof(DataFile)do

  Begin

      BlockRead(DataFile,DataDate,SizeOf(DataDate));

      DayData[0][I]:

=DataDate;//读取日期数据放入日期数组中

      BlockRead(DataFile,DataOpen,SizeOf(DataOpen));

      DayData[1][I]:

=DataOpen;//读取开盘数据放入开盘数组中

      BlockRead(DataFile,DataClose,SizeOf(DataHigh));

      DayData[4][I]:

=DataClose;//读取收盘数据放入收盘数组中

      BlockRead(DataFile,DataHigh,SizeOf(DataLow));

      DayData[2][I]:

=DataHigh;  //读取最高价数据放入最高价数组中

      BlockRead(DataFile,DataLow,SizeOf(DataClose));

      DayData[3][I]:

=DataLow;//读取最低价数据放入最低价数组中

      BlockRead(DataFile,DataJinE,SizeOf(DataShuLiang));

      DayData[5][I]:

=NotDataJinE;//读取成交金额数据放入成交金额数组中

      BlockRead(DataFile,DataShuLiang,SizeOf(DataJinE));

      DayData[6][I]:

=DataShuLiang;//读取成交量数据放入成交量数组中

      BlockRead(DataFile,DataNoOne,SizeOf(DataNoOne));

      BlockRead(DataFile,DataNoTwo,SizeOf(DataNoTwo));

      BlockRead(DataFile,DataNoThree,SizeOf(DataNoThree));

      I:

=I+1;

  End;

  //========================================

  CloseFile(DataFile);

  End//数据文件存在

  Else

    MessageDlg(‘数据文件不存在,请检查程序中文件路径!

‘,mtInformation,[mbOk],0);

  Except

  MessageDlg(‘文件读写错误,请检查程序中文件路径!

‘,mtInformation,[mbOk],0);

  End;

End;

  二、引用日线数据文件中的数据

  只要在需要的地方进行调用上述定义的数组即可。

部分示例如下:

   

Procedure  TFormKXianMain.DrawLineInIt(Sender:

Tobject);

VarI,FlagExit,x1:

Integer;

Begin

  IfDayCount>0Then

  Begin

    BeginDate:

=0;

    EndDate:

=DayCount-1;

    x1:

=LeftX;

    FlagExit:

=0;

    I:

=DayCount-1;

    While(I>-1)And(FlagExit=0)Do

    Begin

        x1:

=x1+DefaultWidth;

        If(x1+DefaultWidth)>(PaintWidth-RightX)Then

          FlagExit:

=1

        Else

          I:

=I-1;

    End;

    If(I=-1)Then

      LeftDate:

=0

    Else

      LeftDate:

=I;

    RightDate:

=DayCount-1;

    CurrentDate:

=DayCount-1;

    CurrentX:

=x1-Round((DefaultWidth+1)/2);

  End;

End;

Procedure  TFormKXianMain.DrawLine(Sender:

Tobject);

Varkpjg,spjg,zgjg,zdjg:

Integer;

Varx1,x2,y1,y2,x3,y3,x4,y4:

Integer;

VarI,Kheight:

Integer;

VarTempString,OutStr:

String;

VarTempLen,StrLen:

Integer;

Begin

  IfDayCount>0Then

  Begin

    //清空屏幕

    Canvas.Brush.Color:

=clblack;

    Canvas.Brush.style:

=bsSolid;

    Canvas.FillRect(Rect(0,0,PaintWidth,PaintHeight));

    //左边竖直线

    Canvas.Pen.Color:

=clRed;

    Canvas.MoveTo(LeftX-1,0);

    Canvas.LineTo(LeftX-1,PaintHeight);

    //上边水平线

    Canvas.MoveTo(0,TopY);

    Canvas.LineTo(PaintWidth,TopY);

    //右边竖直线

    Canvas.MoveTo(PaintWidth-RightX,TopY);

    Canvas.LineTo(PaintWidth-RightX,PaintHeight);

    //下边水平线

    Canvas.MoveTo(0,PaintHeight-BottomY);

    Canvas.LineTo(PaintWidth-RightX,PaintHeight-BottomY);

    PageTopY:

=PaintHeight-BottomY;

    Canvas.Pen.Style:

=psDot;

    Canvas.Pen.Color:

=clMaroon;

    Canvas.MoveTo(LeftX-1,Round(PageTopY/3));

    Canvas.LineTo(PaintWidth-RightX,Round(PageTopY/3));

    Canvas.MoveTo(LeftX-1,Round(2*PageTopY/3));

    Canvas.LineTo(PaintWidth-RightX,Round(2*PageTopY/3));

    Canvas.Pen.style:

=psSolid;

    //求价格的最大、最小值

    Maxjg:

=DayData[2][LeftDate];

    MinJg:

=DayData[3][LeftDate];

    I:

=LeftDate;

    While(I<RightDate)Or(I=RightDate)Do

    Begin

        IfDayData[2][I]>MaxJgThen

          MaxJg:

=DayData[2][I];

        IfDayData[3][I]<MinJgThen

          MinJg:

=DayData[3][I];

        I:

=I+1;

    End;

    //画右侧成交价格坐标数值

    OutStr:

=‘.‘;

    Canvas.Font.Color:

=clRed;

    Canvas.Brush.Color:

=clBlack;

    Canvas.Font.Size:

=11;

    Canvas.Font.name:

=‘宋体‘;

    Canvas.Brush.style:

=bsSolid;

    Canvas.Pen.color:

=clred;

    TempString:

=IntToStr(Round(MinJg+(MaxJg-MinJg)*2/3));

    TempLen:

=Length(TempString);

    Insert(OutStr,TempString,TempLen-2);

    StrLen:

=Length(TempString);

    IfTempString[StrLen]=‘0‘Then

      TempString[StrLen]:

=‘‘;

    Canvas.TextOut(PaintWidth-RightX+2,Round(PageTopY/3)-9,TempString);

    TempString:

=IntToStr(Round(MinJg+(MaxJg-MinJg)/3));

    TempLen:

=Length(TempString);

    Insert(OutStr,TempString,TempLen-2);

    StrLen:

=Length(TempString);

    IfTempString[StrLen]=‘0‘Then

      TempString[StrLen]:

=‘‘;

    Canvas.TextOut(PaintWidth-RightX+2,Round(PageTopY*2/3)-9,TempString);

    //画K线图

    Kheight:

=PageTopY-TopY-10;

    HeightXiShu:

=(MaxJg-MinJg)/Kheight;

    x1:

=LeftX-DefaultWidth;

    I:

=LeftDate;

    While(I<RightDate)Or  (I=RightDate)Do

    Begin

        kpjg:

=DayData[1][I];

        spjg:

=DayData[4][I];

        zgjg:

=DayData[2][I];

        zdjg:

=DayData[3][I];

        x1:

=x1+DefaultWidth;

        x2:

=x1+DefaultWidth-1;

        x3:

=Round((x1+x2)/2);

        x4:

=x3;

        Ifspjg<kpjgThen

        Begin

          Canvas.Pen.Color:

=clAqua;

          Canvas.Brush.Color:

=clAqua;

          Canvas.Brush.style:

=bsSolid;

          y3:

=PageTopY-Round((zgjg-MinJg)/HeightXiShu)-2;

          y1:

=PageTopY-Round((kpjg-MinJg)/HeightXiShu)-2;

          y2:

=PageTopY-Round((spjg-MinJg)/HeightXiShu)-2;

          y4:

=PageTopY-Round((zdjg-MinJg)/HeightXiShu)-2;

          If(y1=y2)Then

            y2:

=y2+1;

          If(zgjg=kpjg)Then

            y3:

=y1;

          If(zdjg=spjg)Then

            y4:

=y2;

          If(zgjg<>kpjg)And(y1=y3)Then

            y3:

=y3-1;

          If(zdjg<>spjg)And(y2=y4)Then

            y4:

=y4+1;

          Canvas.MoveTo(x3,y3);

          Canvas.LineTo(x3,y1);

          Canvas.FillRect(Rect(x1,y1,x2,y2));

          Canvas.MoveTo(x4,y2);

          Canvas.LineTo(x4,y4);

        End//收盘价小于开盘价,阴线

        Else

        Begin

          Canvas.Pen.Color:

=clred;

          x2:

=x2-1;

          y3:

=PageTopY-Round((zgjg-MinJg)/HeightXiShu)-2;

          y1:

=PageTopY-Round((spjg-MinJg)/HeightXiShu)-2;

          y2:

=PageTopY-Round((kpjg-MinJg)/HeightXiShu)-2;

          y4:

=PageTopY-Round((zdjg-MinJg)/HeightXiShu)-2;

          If(y1=y2)And(spjg<>kpjg)Then

            y2:

=y2+1;

          If(zdjg=kpjg)Then

            y4:

=y2;

          If(zgjg=spjg)Then

            y3:

=y1;

          If(zdjg<>kpjg)And(y2=y4)Then

            y4:

=y4+1;

          If(zgjg<>spjg)And(y1=y3)Then

            y3:

=y3-1;

          Canvas.MoveTo(x3,y3);

          Canvas.LineTo(x3,y1);

          Canvas.MoveTo(x1,y1);

          Canvas.LineTo(x2,y1);

          Canvas.LineTo(x2,y2);

          Canvas.LineTo(x1,y2);

          Canvas.LineTo(x1,y1);

          Canvas.MoveTo(x4,y2);

          Canvas.LineTo(x4,y4);

        End;//收盘价大于开盘价,阳线

          I:

=I+1;

    End;//画K线图

    Canvas.Font.Color:

=clRed;

    Canvas.Brush.Color:

=clBlack;

    Canvas.Font.Size:

=11;

    Canvas.Font.name:

=‘宋体‘;

    //输出证券名称

    TempString:

=ZqjcData[ZqRecordNo];

    Canvas.TextOut(1,1,TempString);

    //输出基本信息

    TempString:

=‘代码‘;

    TempString:

=TempString+ZqdmData[ZqRecordNo]+‘‘;

    TempString:

=TempString+‘流通股本‘;

    TempString:

=TempString+IntToStr(ZqltgbData[ZqRecordNo])+‘‘;

    Canvas.TextOut(LeftX+1,1,TempString);

    End;//数据集中数据个数大于0

End;

Procedure  TFormKXianMain.DrawNowLine(Sender:

Tobject);

VarTempStr,OutStr:

String;

VarTempLen,StrLen:

Integer;

Be

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2