莫斯科交易所 ISS 客户端

维护者

详细信息

github.com/slavaWins/moex

源代码

dev-master 2023-02-24 18:01 UTC

This package is auto-updated.

Last update: 2024-09-24 21:19:16 UTC


README

Build Status codecov Coverage Status

一个 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