Delphi 计算火币网KDJ指标数值

原创 2016年08月28日 18:25:18

感谢七爷的无私帮助和纠正。
为了尽可能地提高数据复用,可能给多个指标运算。所以获取的周期K线数据保存到了一个数组。定义如下:

  //存储K线数据的结构
  TKline=record
    Open  :Extended;
    High  :Extended;
    Low   :Extended;
    Close :Extended;
    Amount:Extended;
  end;
  TKlineArray = array of TKline;
  //一些拖沓的常量
const
  KLINE_PERIOD_1MINUTE_CODE  = '001';
  KLINE_PERIOD_5MINUTE_CODE  = '005';
  KLINE_PERIOD_15MINUTE_CODE = '015';
  KLINE_PERIOD_30MINUTE_CODE = '030';
  KLINE_PERIOD_1HOUR_CODE    = '060';
  KLINE_PERIOD_1DAY_CODE     = '100';
  KLINE_PERIOD_1MONTH_CODE   = '200';
  KLINE_PERIOD_1YEAR_CODE    = '300';
  KLINE_PERIOD_1MINUTE       = 1;
  KLINE_PERIOD_5MINUTE       = 2;
  KLINE_PERIOD_15MINUTE      = 3;
  KLINE_PERIOD_30MINUTE      = 4;
  KLINE_PERIOD_1HOUR         = 5;
  KLINE_PERIOD_1DAY          = 6;
  KLINE_PERIOD_1MONTH        = 7;
  KLINE_PERIOD_1YEAR         = 8;

获取15分周期到数组

{ 获取火币K线数据 
    Exp:
         var klinearr:TKlineArray;
         klinearr := GetHuobiKLine(KLINE_PERIOD_15MINUTE);
}
function GetHuobiKLine(KLINE_PERIOD:Integer):TKlineArray;
var
  sPeriodCode:string;
  sURL,sSource:string;
  jo:ISuperObject;
  arrKline:TSuperArray;
  i:Integer;
begin
  SetLength(Result,0);
  case KLINE_PERIOD of
    KLINE_PERIOD_1MINUTE:  sPeriodCode := KLINE_PERIOD_1MINUTE_CODE;
    KLINE_PERIOD_5MINUTE:  sPeriodCode := KLINE_PERIOD_5MINUTE_CODE;
    KLINE_PERIOD_15MINUTE: sPeriodCode := KLINE_PERIOD_15MINUTE_CODE;
    KLINE_PERIOD_30MINUTE: sPeriodCode := KLINE_PERIOD_30MINUTE_CODE;
    KLINE_PERIOD_1HOUR:    sPeriodCode := KLINE_PERIOD_1HOUR_CODE;
    KLINE_PERIOD_1DAY:     sPeriodCode := KLINE_PERIOD_1DAY_CODE;
    KLINE_PERIOD_1MONTH:   sPeriodCode := KLINE_PERIOD_1MONTH_CODE;
    KLINE_PERIOD_1YEAR:    sPeriodCode := KLINE_PERIOD_1YEAR_CODE;
  end;
  sURL    := 'http://api.huobi.com/staticmarket/btc_kline_'+sPeriodCode+'_json.js';
  sSource := GetPageSrc(sURL);
  if pos('[[', sSource) <> 0 then
  begin
    jo := SO(sSource);
    if Assigned(jo) then
    begin
      arrKline := jo.AsArray;
      SetLength(Result,arrKline.Length);
      for i :=0 to arrKline.Length-1 do
      begin
        Result[i].Open    := arrKline[i].AsArray[1].AsDouble;
        Result[i].High    := arrKline[i].AsArray[2].AsDouble;
        Result[i].Low     := arrKline[i].AsArray[3].AsDouble;
        Result[i].Close   := arrKline[i].AsArray[4].AsDouble;
        Result[i].Amount  := arrKline[i].AsArray[5].AsDouble;
      end;
    end;
  end;
end;

KDJ数据结构和计算

type
{ K线数据结构 }
  TKDJ=record
    K : Extended;
    D : Extended;
    J : Extended;
    PDK : Extended;
    PDD : Extended;
    PDJ : Extended;
  end;
  TKDJArray = array of TKDJ;

{ 计算KDJ函数 返回最后一个 }
function GetKDJOriginal(KlineArr: TKlineArray; PERIOD_NUM: Integer): TKDJ;
var
  RSV_P,H9_P,L9_P,PDK,PDD,PDJ:Extended;
  i,j:Integer;
  Arr: TKlineArray;
begin
  FillChar(Result, SizeOf(TKDJ), #0);
//  SetLength(Result,2);
  Arr := KlineArr;
  if High(Arr) <> -1 then
  begin
    PDK := 50;
    PDD := 50;
    for I :=Low(Arr) to High(Arr) do
    begin
      Result.PDK := PDK;
      Result.PDD := PDD;
      Result.PDJ := PDJ;
      if I < PERIOD_NUM then Continue;
      H9_P := 0;
      L9_P := 0;
      for J := (I-PERIOD_NUM+1) to I do
      begin
        if H9_P=0 then H9_P := Arr[J].High;
        if L9_P=0 then L9_P := Arr[J].Low;
        H9_P := Max(H9_P, Arr[J].High);
        L9_P := Min(L9_P, Arr[J].Low);
      end;
      RSV_P := ((Arr[I].Close - L9_P) / (H9_P - L9_P)) * 100;
      Result.K   := 2/3*PDK + 1/3*RSV_P;
      Result.D   := 2/3*PDD + 1/3*Result.K;
      Result.J   := (Result.K*3)-(Result.D*2);
      PDK        := TruncTo(Result.K, 2);
      PDD        := TruncTo(Result.D, 2);
      PDJ        := TruncTo(Result.J, 2);
    end;
    Result.K := TruncTo(Result.K, 2);
    Result.D := TruncTo(Result.D, 2);
    Result.J := TruncTo(Result.J, 2);
  end;
end;

//使用例子
MyKDJ := GetKDJOriginal(klinearr,9);//KDJ(9,3,3)
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

MACD指标详解

MACD由Gerald Appel发明,全称为均线集中分叉(Moving Average Convergence Divergence),是最为简单同时又最为可靠的指标之一。MACD使用滞后性的均线指...

Delphi 计算MACD指标数值

基于上一篇文章Delphi 计算火币网KDJ指标数值的基础。{ MACD单个数据结构 } Type TMACD = record DIF: Extended; DEA: Exten...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

macd 26 12 9

12=2*6 26=4*6+2 9=12*0.75

股市投资指标学习-1-kdj

随机指数(Stochastics,KDJ,有时也称为KD)由George Lane提出,是期货和股票市场常用的技术分析工具。随机指数在设计中综合了动量观念、相对强弱指数和移动平均线的一些优点,在计算过...
  • icu
  • icu
  • 2007-05-22 09:01
  • 768

Delphi 计算火币网KDJ指标数值

感谢七爷的无私帮助和纠正。 为了尽可能地提高数据复用,可能给多个指标运算。所以获取的周期K线数据保存到了一个数组。定义如下: //存储K线数据的结构 TKline=record Ope...

KDJ指标及其应用

KDJ指标又叫随机指标,是根据统计学的原理,通过一个特定的周期(常为9日、9周等)内出现过的最高价、最低价及最后一个计算周期的收盘价,以及这三者之间的比例关系,来计算最后一个计算周期的未成熟随机值RS...

KDJ MACO OBV技术指标

KDJ指标又叫随机指标,是由乔治·蓝恩博士(George Lane)最早提出的,是一种相当新颖、实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用...

KDJ 技术指标实战技巧

行走于股市中的“葵花宝典” KDJ 技术指标实战技巧 “欲练神功,必先自宫。若不自宫,也可成功。若已自宫,未必成功。” 前言: 当今的股票市场中技术分析以以下两种为主:1.图表分析;2.指标分...
  • eqwewr
  • eqwewr
  • 2011-09-10 20:09
  • 1472

股票 KDJ指标形态图解

KDJ指标又叫随机指标         原理:就是用目前股价在近阶段股价分布中的相对位置来预测可能发生的趋势反转。它主要是利用价格波动的真实波幅来反映价格走势的强弱和超买超卖现象,在价格尚未上升或下降...

计算机网络的性能指标

1.速率(网速):主机在数字通信上传送数据的速率(bit(比特:数据量的单位,二进制数据,一个比特是一个二进制数字,0或者1)/s) 2.带宽:本意是指某个信号具有的频带宽度,在计算机网络中...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)