kenoshodigital / chart
计算技术图表分析指标。
2.1.1
2024-08-04 21:22 UTC
Requires
- php: ^8.2
- brick/math: ^0.12
Requires (Dev)
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^11.3
README
通用
- PHP 8.2
- 最小依赖。
- 使用brick/math进行任意精度数字。
- 避免冗余计算,保持整体复杂性低。
- 针对其他库和实际数据进行单元和集成测试。
受众
安装
composer require kenshodigital/chart ^2.1
使用
准备图表
<?php declare(strict_types=1); use Kensho\Chart\Chart\ChartFactory; $chart = ChartFactory::bootstrap([ '2023-01-25' => [ 'open' => '140.8900', 'high' => '142.4300', 'low' => '138.8100', 'close' => '141.8600', 'volume' => '65799349', ], '2023-01-26' => [ 'open' => '143.1700', 'high' => '144.2500', 'low' => '141.9000', 'close' => '143.9600', 'volume' => '54105068', ], // ... ]);
计算指标
SMA (简单移动平均)
$period = 7; $result = $chart->getSMA($period); // '2023-01-25' => null, // '2023-01-26' => null, // ... // '2023-02-02' => '145.0414', // '2023-02-03' => '146.8471', // ...
EMA (指数移动平均)
$period = 7; $result = $chart->getEMA($period); // '2023-01-25' => null, // '2023-01-26' => null, // ... // '2023-02-02' => '145.6779', // '2023-02-03' => '147.8834', // ...
+DI & -DI (正方向 & 负方向指示器)
$period = 7; $result = $chart->getDI($period); // '2023-01-25' => [ // 'DIp' => null, // 'DIm' => null, // ], // '2023-01-26' => [ // 'DIp' => null, // 'DIm' => null, // ], // ... // '2023-02-02' => [ // 'DIp' => '44.1913', // 'DIm' => '3.0372', // ], // '2023-02-03' => [ // 'DIp' => '50.3535', // 'DIm' => '2.1344', // ], // ...
ADX (平均方向指数)
$period = 7; $result = $chart->getADX($period); // '2023-01-25' => null, // '2023-01-26' => null, // ... // '2023-02-10' => '85.4433', // '2023-02-13' => '83.2376', // ...
计算趋势指标
在单次运行中计算所有趋势指标(SMA、EMA、+DI、-DI和ADX)。
$SMAPeriod = 20 $EMAPeriod = 10; $result = $chart->getTrend($SMAPeriod, $EMAPeriod); // '2023-01-25' => [ // 'close' => '141.8600', // 'SMA' => null, // 'EMA' => null, // 'DIp' => null, // 'DIm' => null, // 'ADX' => null, // ], // ... // '2023-02-07' => [ // 'close' => '154.6500', // 'SMA' => null, // 'EMA' => '148.8578', // 'DIp' => '45.1810', // 'DIm' => '1.8100', // 'ADX' => null, // ], // ... // '2023-02-22' => [ // 'close' => '148.9100', // 'SMA' => '149.8000', // 'EMA' => '151.0938', // 'DIp' => '28.7024', // 'DIm' => '18.6931', // 'ADX' => '67.8187', // ], // ...
常见问题解答
为什么数值表示为字符串?
关于浮点数的说明:从浮点数实例化可能不安全,因为浮点数的设计就是非精确的,可能会导致信息丢失。始终优先从字符串实例化,它支持无限数量的数字。