詹姆斯·鲁斯52 / tinkoffinvest
Tinkoff Invest PHP客户端
1.2.3
2021-08-18 13:11 UTC
Requires
- php: >=5.6
- ext-curl: *
- ext-json: *
- james.rus52/websocket: ^1.3
Requires (Dev)
- phpunit/phpunit: ^9.0
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