slavawins / moex
Requires
- php: ^7.3|^8.0
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is auto-updated.
Last update: 2024-09-24 21:19:16 UTC
README
一个 PHP 库,通过其信息与统计服务器(Informational & Statistical Server)提供对莫斯科交易所数据的轻松访问。
安装
通过 Composer 下载
composer require panychek/moex
包含自动加载器
require_once 'vendor/autoload.php';
入门
基本使用模式是实例化一个要交互的 Security
对象。您可以传递任何字符串(俄语或英语) - 库将执行搜索并选择最佳匹配项。
use Panychek\MoEx\Security; use Panychek\MoEx\Exception\ExceptionInterface as MoexException; try { $security = new Security('Sberbank'); $last_price = $security->getLastPrice(); } catch (MoexException $e) { echo $e->getMessage(); }
您还可以通过代码(以井号 # 开头)访问证券。这将稍微快一点,因为您避免了额外的 API 调用来找到它。
$security = new Security('#SBER');
默认语言是 俄语。您可以通过这种方式切换到英语
Exchange::setLanguage('en');
身份验证
如果您订阅了任何付费服务并且想要访问其私有数据,您应该首先使用您的护照账户凭据进行身份验证
Exchange::authenticate($username, $password);
搜索
您可以轻松找到所需的金融工具。此调用将返回一组匹配的证券
$securities = Exchange::findSecurities('Alrosa');
您还可以限制结果
$securities = Exchange::findSecurities('Gazprom', 5);
检索市场数据
股票、货币对和期货
可用方法
从外汇市场获取卢布汇率
如果省略,基础货币默认为美元
$usd_rub = Exchange::getRubleRate(); $eur_rub = Exchange::getRubleRate('EUR');
债券
此外,债券还支持以下方法
指数
可用方法
示例用法
$rtsi = new Security('RTS Index'); $year_to_date_return = $rtsi->getChange('YTD', '%'); $month_to_date_return = $rtsi->getChange('MTD', '%'); $volume_rub = $rtsi->getVolume('RUB'); $volume_usd = $rtsi->getVolume('USD'); $capitalization_rub = $rtsi->getCapitalization('RUB'); $capitalization_usd = $rtsi->getCapitalization('USD');
历史报价
对于特定日期范围
$security = new Security('MICEX Index'); $data = $security->getHistoricalQuotes('2014-01-01', '2014-12-31');
从特定一天开始
$data = $security->getHistoricalQuotes('2017-01-01');
概况
$security = new Security('#GAZP'); $security->setLanguage('en'); $code = $security->getId(); // "GAZP" $name = $security->getName(); // "Gazprom" $short_name = $security->getShortName(); // "Gazprom" $isin_code = $security->getIsin(); // "RU0007661625" $market_title = $security->getMarket()->getTitle(); // "Equities Market" $engine_title = $security->getEngine()->getTitle(); // "Securities Market" $board_title = $security->getBoard()->getTitle(); // "T+: Stocks, DRs" $capitalization = $security->getEngine()->getCapitalization(); // 33015281259414 RUB $issuer_title = $security->getIssuer()->getTitle(); // "Публичное акционерное общество "Газпром"" $indices = $security->getIndices(); foreach ($indices as $index) { $code = $index->getId(); // "MICEX10INDEX", "MICEXBMI", "MICEXINDEXCF", etc. $short_name = $index->getShortName(); // "MICEX10 Index", "Moscow Exchange Broad Market Index", "MICEX Index", etc. }
成交量
交易所总成交量
最后一个可交易日
$exchange = $security->getExchange(); $turnovers_rub = $exchange->getTurnovers('rub'); $turnovers_usd = $exchange->getTurnovers('usd'); $num_trades = $exchange->getNumberOfTrades();
对于特定一天
$christmas_turnovers = $exchange->getTurnovers('usd', '2015-12-25'); $christmas_num_trades = $exchange->getNumberOfTrades('2015-12-25');
特定市场的总成交量
最后一个可交易日
$security = new Security('USDRUB'); $fx_market = $security->getEngine(); $fx_turnovers_rub = $fx_market->getTurnovers('rub'); $fx_turnovers_usd = $security->getEngine()->getTurnovers('usd'); $fx_num_trades = $security->getEngine()->getNumberOfTrades();
对于特定一天
$fx_christmas_turnovers = $fx_market->getTurnovers('usd', '2015-12-25'); $fx_christmas_num_trades = $fx_market->getNumberOfTrades('2015-12-25');
分组
获取最可靠的股票(位于一级报价清单上)
$shares_group = SecurityGroup::getInstance('stock_shares'); $first_level = $shares_group->getCollection('one'); $securities = $first_level->getSecurities();
调试
要查看网络级别的操作情况,定义一个日志回调函数并将其传递给客户端。完成后,它将在每次 API 调用时调用,并提供其统计信息。
$logger = function(\GuzzleHttp\TransferStats $stats) { $request = $stats->getRequest(); $uri = $request->getUri(); $time = $stats->getTransferTime(); $html = 'Request URI: %s<br />Time: %s<br /><br />'; echo sprintf($html, $uri, $time); }; Client::getInstance()->setRequestLogger($logger);
处理错误
在出现任何数据相关错误时,将抛出 Panychek\MoEx\Exception\DataException
异常。以下代码指示失败的原因
FAILED_REQUEST
- 所有网络错误INVALID_RESPONSE
- 响应不是有效的 JSON 字符串或其格式不受支持EMPTY_RESULT
- 响应不包含实际数据
在身份验证失败的情况下,将抛出 Panychek\MoEx\Exception\AuthenticationException
异常。
库抛出的所有异常都实现了 Panychek\MoEx\Exception\ExceptionInterface
接口。
测试
该软件包包含两种类型的测试:单元测试和集成测试。
单元测试针对模拟数据运行,因此开箱即用。要运行它们,请执行以下命令
phpunit --group Unit
集成测试进行实际的 API 调用,并确保响应没有发生变化,因此它们需要网络访问。您可以通过运行以下命令来执行集成测试
phpunit --group Integration