詹姆斯·鲁斯52/tinkoffinvest

Tinkoff Invest PHP客户端

1.2.3 2021-08-18 13:11 UTC

This package is auto-updated.

Last update: 2024-09-18 19:59:30 UTC


README

如何安装

composer require james.rus52/tinkoffinvest

或添加到您的 compose.json

{
    "require": {
        "james.rus52/tinkoffinvest": "^1.*"
    }
}

然后

composer install

如何使用

通过自动加载器包含类

require_once 'vendor/autoload.php';

use \jamesRUS52\TinkoffInvest\TIClient;
use \jamesRUS52\TinkoffInvest\TISiteEnum;
use \jamesRUS52\TinkoffInvest\TICurrencyEnum;
use \jamesRUS52\TinkoffInvest\TIInstrument;
use \jamesRUS52\TinkoffInvest\TIPortfolio;
use \jamesRUS52\TinkoffInvest\TIOperationEnum;
use \jamesRUS52\TinkoffInvest\TIIntervalEnum;
use \jamesRUS52\TinkoffInvest\TICandleIntervalEnum;
use \jamesRUS52\TinkoffInvest\TICandle;
use \jamesRUS52\TinkoffInvest\TIOrderBook;
use \jamesRUS52\TinkoffInvest\TIInstrumentInfo;

Tinkoff Invest设置页面 创建用于使用Tinkoff Invest的令牌

为沙盒创建客户端实例

$client = new TIClient("TOKEN",TISiteEnum::SANDBOX);

或真实交易所

$client = new TIClient("TOKEN",TISiteEnum::EXCHANGE);

将钱存入您的沙盒账户(仅限沙盒)

$client->sbCurrencyBalance(500,TICurrencyEnum::USD);

客户端在沙盒上注册(仅限沙盒)

$client->sbRegister();

客户端在沙盒上删除账户(仅限沙盒)

$client->sbRemove();

将股票存入您的沙盒账户(仅限沙盒)

$client->sbPositionBalance(10.4,"BBG000BR37X2");

在沙盒上清除所有持仓(仅限沙盒)

$client->sbClear();

从市场获取所有股票/债券/ETF/货币

$stockes = $client->getStocks();
$instr = $client->getBonds();
$instr = $client->getEtfs();
$instr = $client->getCurrencies();

或使用过滤器

$stockes = $client->getStocks(["V","LKOH"]);
$instr = $client->getBonds(["RU000A0JX3X7"]);
$instr = $client->getEtfs(["FXRU"]);
$instr = $client->getCurrencies(["USD000UTSTOM"]);

按代码获取工具

$instr = $client->getInstrumentByTicker("AMZN");

或按figi获取

$instr = $client->getInstrumentByFigi("BBG000BR37X2");

获取历史OrderBook

$book = $client->getHistoryOrderBook("BBG000BR37X2", 1); 

获取历史蜡烛图

$from = new \DateTime();
$from->sub(new \DateInterval("P7D"));
$to = new \DateTime();
$candles = $client->getHistoryCandles("BBG000BR37X2", $from, $to, TIIntervalEnum::MIN15);

获取账户

$accounts = $client->getAccounts(); 

获取投资组合(如果为null,则使用默认的Tinkoff账户)

$port = $client->getPortfolio(TIAccount $account = null);

获取投资组合余额

print $port->getCurrencyBalance(TICurrencyEnum::RUB);

获取工具的批次数

print $port->getinstrumentLots("PGR");

发送限价订单(默认brokerAccountId = Tinkoff)

$order = $client->sendOrder("BBG000BVPV84", 1, TIOperationEnum::BUY, 1.2);
print $order->getOrderId();

发送市价订单(默认brokerAccountId = Tinkoff)

$order = $client->sendOrder("BBG000BVPV84", 1, TIOperationEnum::BUY);
print $order->getOrderId();

取消订单

$client->cancelOrder($order->getOrderId());

过去10天到30天的操作列表

$from = new \DateTime();
$from->sub(new \DateInterval("P7D"));
$to = new \DateTime();
$operations = $client->getOperations($from, $to);
foreach ($operations as $operation)
  print $operation->getId ().' '.$operation->getFigi (). ' '.$operation->getPrice ().' '.$operation->getOperationType().' '.$operation->getDate()->format('d.m.Y H:i')."\n";

获取工具状态

$status = $client->getInstrumentInfo($sber->getFigi());
print 'Instrument status: '. $status->getTrade_status()."\n";

获取蜡烛图和订单簿

if ($status->getTrade_status()=="normal_trading")
{
        $candle = $client->getCandle($sber->getFigi(), TICandleIntervalEnum::DAY);
        print 'Low: '.$candle->getLow(). ' High: '.$candle->getHigh().' Open: '.$candle->getOpen().' Close: '.$candle->getClose().' Volume: '.$candle->getVolume()."\n";

        $orderbook = $client->getOrderBook($sber->getFigi(),2);
        print 'Price to buy: '.$orderbook->getBestPriceToBuy().' Available lots: '.$orderbook->getBestPriceToBuyLotCount().' Price to Sell: '.$orderbook->getBestPriceToSell().' Available lots: '.$orderbook->getBestPriceToSellLotCount()."\n";
}

您还可以订阅订单簿、蜡烛图或工具信息的变化:首先,创建一个回调函数来管理事件

function action($obj)
{
        print "action\n";
        if ($obj instanceof TICandle)
            print 'Time: '.$obj->getTime ()->format('d.m.Y H:i:s').' Volume: '.$obj->getVolume ()."\n";
        if ($obj instanceof TIOrderBook)
            print 'Price to Buy: '.$obj->getBestPriceToBuy().' Price to Sell: '.$obj->getBestPriceToSell()."\n";
}

然后订阅事件

$client->subscribeGettingCandle($sber->getFigi(), TICandleIntervalEnum::MIN1);
$client->subscribeGettingOrderBook($sber->getFigi(), 2);

并最终开始监听新事件

$client->startGetting("action",20,60);

在这个示例中,我们最多等待20个响应,最多60秒。如果您想取消限制,您应该这样做

$client->startGetting("action");
$client->startGetting("action",null,600);
$client->startGetting("action",1000,null);

要停止监听,请这样做

$client->stopGetting();

###注意 如果您使用订阅,您应该在响应中检查figi,因为您在一个队列中获取所有已订阅的工具

捐赠

请支持我的项目

许可

MIT