⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initdata.pas

📁 这是一个股票盘后数据分析系统基础底层,已经实现了基本的K线图的重现,RIS线,均线图的重现, 是在一个台湾高手发布的原码上修改的,现在支持通达信的股票数据格式.
💻 PAS
字号:
unit InitData;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, TFlatGaugeUnit, StdCtrls, DB, ADODB, IdBaseComponent,
  IdAntiFreezeBase, IdAntiFreeze, fdef, Buttons;

type
  TInitDataForm = class(TForm)
    Label1: TLabel;
    FlatGauge1: TFlatGauge;
    Label2: TLabel;
    FlatGauge2: TFlatGauge;
    StatusBar1: TStatusBar;
    IdAntiFreeze1: TIdAntiFreeze;
    WorkQuery: TADOQuery;
    MC: TADOConnection;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    FStockName: string;
    procedure SetStockName(const Value: string);
    { Private declarations }
  public
    StkDataFile: IDataFile;
    property StockName: string read FStockName write SetStockName;
  end;

var
  InitDataForm: TInitDataForm;

implementation
uses Math, fUtils, UCommon, Main;
{$R *.dfm}
{ TInitDataForm }
procedure TInitDataForm.SetStockName(const Value: string);
begin
  if (StkDataFile = nil) or (Value <> FStockName) then
  begin
    FStockName := Value;
    StkDataFile := TDataFile.Create(FStockName);
  end;
end;

procedure TInitDataForm.BitBtn1Click(Sender: TObject);
var
  SQL_Str : string;
  Head, RecSize: Word;
  ZCode, Code, Name: string;
  Buffer  : ^string;
  MS      : TMemoryStream;
  Max, I  : Integer;
  P, Q    : PStkDataRec;
  dao     : OleVariant;
begin
  SQL_Str := 'Select TOP 3 * From BaseInfo Where (日期=' + '#' + DateToStr(Date) + '#' + ')';
  WorkQuery.Active := false;
  WorkQuery.SQL.Clear;
  WorkQuery.SQL.ADD(SQL_Str);
  WorkQuery.Open;
  if (WorkQuery.Recordcount <= 0) then
  begin
    //因为没有读入过所以要进行读入
    Head := 41;
    RecSize := 250;
    MS := TMemoryStream.Create;
    MS.LoadFromFile('szex.tnf');
    MS.Position := 50;
    I := 0;
    Max := (MS.Size - 50) div 250;
    FlatGauge1.Progress := 0;
    FlatGauge1.Visible := True;
    while MS.Position < MS.Size - 4 do
    begin
      GetMem(Buffer, MS.Size);
      MS.ReadBuffer(Buffer^, 6);
      Code := trim(string(Buffer));
      SQL_Str := 'Select Top 1 * From BASEINFO Where (股票代号=' + #39 + Copy(Code, 1, 6) + #39 + ')';
      WorkQuery.Active := false;
      WorkQuery.SQL.Clear;
      WorkQuery.SQL.ADD(SQL_Str);
      WorkQuery.Open;
      MS.Position := MS.Position + 18;
      MS.Read(Buffer^, 8);
      Name := TrimLeft(string(Buffer));

      MS.Position := MS.Position + 209;
      MS.Read(Buffer^, 4);
      ZCode := trim(string(Buffer));

      StockName := '.\Vipdoc\sz\lday\sz' + Copy(Code, 1, 6) + '.day';
      begin
        try
          Q := PStkDataRec(StkDataFile.getData(1));
          if Q <> nil then
          begin
            if (INtToStr(Q.CP) <> '') then
            begin
              P := PStkDataRec(StkDataFile.getData(0));
              if (WorkQuery.Recordcount > 0) then
              begin
                WorkQuery.Edit;
                WorkQuery.FieldByName('股票名称').AsString := Copy(Name, 1, 8);
                WorkQuery.FieldByName('昨收价').AsFloat := Q.CP / 100;
                WorkQuery.FieldByName('现价').AsFloat := P.CP / 100;
                WorkQuery.FieldByName('开盘价').AsFloat := P.OP / 100;
                WorkQuery.FieldByName('最高价').AsFloat := P.HP / 100;
                WorkQuery.FieldByName('最低价').AsFloat := P.LP / 100;
                WorkQuery.FieldByName('升跌额').AsFloat := (P.CP / 100) - (Q.CP / 100);
                WorkQuery.FieldByName('成交量').AsFloat := P.VOL / 100;
                WorkQuery.FieldByName('涨幅').AsFloat := (P.CP - Q.CP) / Q.CP * 100;
                WorkQuery.FieldByName('日期').AsDateTime := Date;
                WorkQuery.Post;
              end
              else
              begin
                WorkQuery.Append;
                WorkQuery.FieldByName('股票代号').AsString := Copy(Code, 1, 6);
                WorkQuery.FieldByName('标志').AsString := '3';
                WorkQuery.FieldByName('股票名称').AsString := Copy(Name, 1, 8);
                WorkQuery.FieldByName('助记码').AsString := Copy(ZCode, 1, 4);
                WorkQuery.FieldByName('昨收价').AsFloat := Q.CP / 100;
                WorkQuery.FieldByName('现价').AsFloat := P.CP / 100;
                WorkQuery.FieldByName('开盘价').AsFloat := P.OP / 100;
                WorkQuery.FieldByName('最高价').AsFloat := P.HP / 100;
                WorkQuery.FieldByName('最低价').AsFloat := P.LP / 100;
                WorkQuery.FieldByName('升跌额').AsFloat := (P.CP / 100) - (Q.CP / 100);
                WorkQuery.FieldByName('成交量').AsFloat := P.VOL / 100;
                WorkQuery.FieldByName('涨幅').AsFloat := (P.CP - Q.CP) / Q.CP * 100;
                WorkQuery.FieldByName('日期').AsDateTime := Date;
                WorkQuery.Post;
              end;
            end;
          end;
        except

        end;
      end;
      MS.Position := MS.Position + 5;
      I := I + 1;
      FlatGauge1.Progress := Round(I / Max * 100);
    end;
    MS.Free;
    //===================================================
    //  在此做上海股标
    //===================================================
    MS := TMemoryStream.Create;
    MS.LoadFromFile('shex.tnf');
    MS.Position := 50;
    I := 0;
    Max := (MS.Size - 50) div 250;
    FlatGauge2.Progress := 0;
    FlatGauge2.Visible := True;
    while MS.Position < MS.Size - 4 do
    begin
      GetMem(Buffer, MS.Size);
      MS.ReadBuffer(Buffer^, 6);
      Code := trim(string(Buffer));

      MS.Position := MS.Position + 18;
      MS.Read(Buffer^, 8);
      Name := TrimLeft(string(Buffer));

      MS.Position := MS.Position + 209;
      MS.Read(Buffer^, 4);
      ZCode := trim(string(Buffer));

      StockName := '.\Vipdoc\sh\lday\sh' + Copy(Code, 1, 6) + '.day';
      begin
        try
          Q := PStkDataRec(StkDataFile.getData(1));
          if Q <> nil then
          begin
            if (INtToStr(Q.CP) <> '') then
            begin
              P := PStkDataRec(StkDataFile.getData(0));
              SQL_Str := 'Select Top 1 * From BASEINFO Where (股票代号=' + #39 + Copy(Code, 1, 6) + #39 + ')';
              WorkQuery.Active := false;
              WorkQuery.SQL.Clear;
              WorkQuery.SQL.ADD(SQL_Str);
              WorkQuery.Open;
              if (Copy(Code, 1, 1) <> '0') then
              begin
                if (WorkQuery.Recordcount > 0) then
                begin
                  WorkQuery.Edit;
                  WorkQuery.FieldByName('股票名称').AsString := Copy(Name, 1, 8);
                  WorkQuery.FieldByName('昨收价').AsFloat := Q.CP / 100;
                  WorkQuery.FieldByName('现价').AsFloat := P.CP / 100;
                  WorkQuery.FieldByName('开盘价').AsFloat := P.OP / 100;
                  WorkQuery.FieldByName('最高价').AsFloat := P.HP / 100;
                  WorkQuery.FieldByName('最低价').AsFloat := P.LP / 100;
                  WorkQuery.FieldByName('升跌额').AsFloat := (P.CP / 100) - (Q.CP / 100);
                  WorkQuery.FieldByName('成交量').AsFloat := P.VOL / 100;
                  WorkQuery.FieldByName('涨幅').AsFloat := (P.CP - Q.CP) / Q.CP * 100;
                  WorkQuery.FieldByName('日期').AsDateTime := Date;
                  WorkQuery.Post;
                end
                else
                begin
                  WorkQuery.Append;
                  WorkQuery.FieldByName('股票代号').AsString := Copy(Code, 1, 6);
                  WorkQuery.FieldByName('标志').AsString := '3';
                  WorkQuery.FieldByName('股票名称').AsString := Copy(Name, 1, 8);
                  WorkQuery.FieldByName('助记码').AsString := Copy(ZCode, 1, 4);
                  WorkQuery.FieldByName('昨收价').AsFloat := Q.CP / 100;
                  WorkQuery.FieldByName('现价').AsFloat := P.CP / 100;
                  WorkQuery.FieldByName('开盘价').AsFloat := P.OP / 100;
                  WorkQuery.FieldByName('最高价').AsFloat := P.HP / 100;
                  WorkQuery.FieldByName('最低价').AsFloat := P.LP / 100;
                  WorkQuery.FieldByName('升跌额').AsFloat := (P.CP / 100) - (Q.CP / 100);
                  WorkQuery.FieldByName('成交量').AsFloat := P.VOL / 100;
                  WorkQuery.FieldByName('涨幅').AsFloat := (P.CP - Q.CP) / Q.CP * 100;
                  WorkQuery.FieldByName('日期').AsDateTime := Date;
                  WorkQuery.Post;
                end;
              end;
            end;
          end;
        except

        end;
      end;
      MS.Position := MS.Position + 5;
      I := I + 1;
      FlatGauge2.Progress := Round(I / Max * 100);

    end;
  end;
  Self.Close;

end;

procedure TInitDataForm.FormPaint(Sender: TObject);
begin
  Self.BitBtn1.Click;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -