以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  爱好delphi的朋友吗,有个例子,可以用delphi玩下金字塔的dll  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=6451)

--  作者:volersky
--  发布时间:2011/5/8 16:07:54
--  爱好delphi的朋友吗,有个例子,可以用delphi玩下金字塔的dll

经本人测试,ok没问题


unit FxjFunc;

interface

uses Types;

type

///////////////////////////////////////////////////////////////////////////
//分析周期
TDataType = (
    TICK_DATA=2,     //分笔成交
    MIN1_DATA,       //1分钟线
    MIN5_DATA,       //5分钟线
    MIN15_DATA,      //15分钟线
    MIN30_DATA,      //30分钟线
    MIN60_DATA,      //60分钟线
    DAY_DATA,        //日线
    WEEK_DATA,       //周线
    MONTH_DATA,      //月线
    MULTI_DATA       //多日线
);

///////////////////////////////////////////////////////////////////////////
//基本数据

PStkData = ^TStkData;
TStkData = packed record
    Time: LongWord;    //时间,UCT
    Open: Single;   //开盘
    High: Single;   //最高
    Low: Single;    //最低
    Close: Single;   //收盘
    Volume: Single;   //成交量
    Amount: Single;   //成交额
    Advance: Word;   //上涨家数(仅大盘有效)
    Decline: Word;   //下跌家数(仅大盘有效)
end;

////////////////////////////////////////////////////////////////////////////
//基本数据 [数组]

PStkDataArray = ^TStkDataArray;
TStkDataArray = array[0..$EFFF] of TStkData;


////////////////////////////////////////////////////////////////////////////
//扩展数据,用于描述分笔成交数据的买卖盘

PStkDataEx = ^TStkDataEx;
TStkDataEx = packed record
    case Integer of
        0: (
            BuyPrice: array[0..2] of Single;   //买1--买3价
            BuyVol:   array[0..2] of Single;   //买1--买3量
            SellPrice:array[0..2] of Single;   //卖1--卖3价
            SellVol:  array[0..2] of Single;   //卖1--卖3量
        );
        1: (
            DataEx:  array[0..11] of Single;    //保留
        );
end;

 

/////////////////////////////////////////////////////////////////////////////
//函数数据结构

TSingleArray = array[0..$EFFF] of Single;
PSingleArray = ^TSingleArray;
PCalcInfo = ^TCalcInfo;
TCalcInfo = packed record
    Size: DWORD;     //结构大小
    Version: DWORD;    //调用软件版本(V2.10 : 0x210)
    Serial: DWORD;     //调用软件序列号
    StkLabel: PChar;    //股票代码
    Index: LongBool;     //大盘

    NumData: Integer;     //数据数量(pData,pDataEx,pResultBuf数据数量)
    Data: PStkDataArray;     //常规数据,注意:当m_nNumData==0时可能为 NULL
    DataEx: PStkDataEx;     //扩展数据,分笔成交买卖盘,注意:可能为 NULL

    Param1Start: Integer;    //参数1有效位置
    Param1: PSingle;     //调用参数1
    Param2: PSingle;     //调用参数2
    Param3: PSingle;     //调用参数3
    Param4: PSingle;     //调用参数4

    ResultBuf: PSingleArray;    //结果缓冲区
    DataType: TDataType;     //数据类型
    FinData: PSingle;    //财务数据
end;


implementation

var

    pr :   array[0..$EFFF] of Tpr;
     prNum, duNum : integer;

 

 

//============================================================================
// 将数据拷贝到 pr数组中

procedure CopyDataTo_Pr(data: PCalcInfo);
var
    i:integer;
begin
    prNum := data.NumData;

    for i := 0 to prNum-1 do
    begin
        pr[i].hprice := data.Data[i].High;
        pr[i].lprice := data.Data[i].Low;
        pr[i].Time   := data.Data[i].Time;
    end;
end;

 

  

//=============================================================================
function xx1(data: PCalcInfo):integer;stdcall;
  CopyDataTo_Pr(data);

//这里直接调用pr数组当K线数组用就行了 
end;

 

 

function xx2(Data:PCalcInfo):integer;stdcall;
end;

 

 


exports

    xx1,xx2;


end.

[此贴子已经被作者于2011-5-8 16:12:24编辑过]

--  作者:volersky
--  发布时间:2011/5/8 16:09:34
--  
另再补充一个,关于参数的问题,if (@pData.m_pfParam1 <> nil) and (@pData.m_pfParam2 <> nil) then
采用如是方式
--  作者:volersky
--  发布时间:2011/5/8 16:49:37
--  
不好意思,再补充下,ResultBuf: PSingleArray;  通过这个返回序列值
--  作者:王锋
--  发布时间:2011/5/8 17:04:52
--  

不错