作者 karlet

feat:获取资金费率

... ... @@ -16,6 +16,7 @@ require_once __DIR__ . '/struct/SymbolInfo.php';
require_once __DIR__ . '/struct/WsDataOrder.php';
require_once __DIR__ . '/struct/WsDataAccount.php';
require_once __DIR__ . '/struct/Pos.php';
require_once __DIR__ . '/struct/Premium.php';
require_once __DIR__ . '/../jytools/func.php';
require_once __DIR__ . '/../jytools/Websocket.php';
... ... @@ -34,6 +35,7 @@ use trader\struct\SymbolInfo;
use trader\struct\WsDataOrder;
use trader\struct\WsDataAccount;
use trader\struct\Pos;
use trader\struct\Premium;
use \Exception;
use function jytools\timeFormat;
use function jytools\getMicrotime;
... ... @@ -679,4 +681,32 @@ class CmBroker
{
$this->positions = $this->getAllPos();
}
//----------公告数据接口--------
//获取所有品种资金费率,返回数据为 Premium[]
public function getPremiumAll(): array
{
$data = [];
if ($this->plat == self::PLAT_OKX) {
foreach ($this->symbolInfos as $key => $value) {
$res = $this->exBroker->getPremium($value->symbolOri);
if (isset($res['data'])) {
$prem = Premium::transferOkx($res['data'][0], function ($symbol) {
return $this->getSymbolSt($symbol);
});
$data[$prem->symbol] = $prem;
}
}
} else if ($this->plat == self::PLAT_BINANCE) {
$res = $this->exBroker->getPremiumAll();
foreach ($res as $key => $value) {
$prem = Premium::transferBinance($value, function ($symbol) {
return $this->getSymbolSt($symbol);
});
$data[$prem->symbol] = $prem;
}
} else {
throw new Exception("获取资金费 该交易所未实现,请先实现代码");
}
return $data;
}
}
... ...
... ... @@ -148,4 +148,14 @@ class ExBroker
}
return $newPositions;
}
//获取资金费率
public function getPremiumAll($symbol = null)
{
$params = [];
if ($symbol) {
$params['symbol'] = $symbol;
}
$res = $this->api->getPremiumIndex($params);
return $res;
}
}
... ...
... ... @@ -390,4 +390,13 @@ class ExBroker
}
return $this->api->klines($param);
}
//获取资金费率
public function getPremium($symbol)
{
$param = [
'instId' => $symbol,
];
$res = $this->api->fundingRate($param);
return $res;
}
}
... ...
<?php
namespace trader\PreOrd;
namespace trader\struct;
class Premium
{
private $symbol;
private $rate;
private $settleTs;
private $settleTime;
public $symbol; //标准交易对
public $symbolOri; //原始交易对
public $rate; //资金费率
public $settleTs; //下次结算时间
public $settlePeriod; //结算周期
public $uts; //最近更新时间
public function __construct($symbol, $rate, $settleTs, $settleTime)
public function __construct($symbol, $symbolOri, $rate, $settleTs, $settlePeriod, $uts)
{
$this->symbol = $symbol;
$this->symbolOri = $symbolOri;
$this->rate = $rate;
$this->settleTs = $settleTs;
$this->settleTime = $settleTime;
$this->settlePeriod = $settlePeriod;
$this->uts = $uts;
}
public function toArray()
{
return [
'symbol' => $this->symbol,
'symbolOri' => $this->symbolOri,
'rate' => $this->rate,
'settleTs' => $this->settleTs,
'settleTime' => $this->settleTime,
'settlePeriod' => $this->settlePeriod,
'uts' => $this->uts,
];
}
public static function transferOkx($data, callable $getSymbolSt): self
{
$symbolOri = $data['instId'];
$symbolSt = $getSymbolSt($symbolOri);
$rate = $data['fundingRate'];
$settleTs = $data['fundingTime'];
$settlePeriod = $data['nextFundingTime'] - $settleTs;
$uts = $data['ts'];
return new self($symbolSt, $symbolOri, $rate, $settleTs, $settlePeriod, $uts);
}
public static function transferBinance($data, callable $getSymbolSt): self
{
$symbolOri = $data['symbol'];
$symbolSt = $getSymbolSt($symbolOri);
$rate = $data['lastFundingRate'];
$settleTs = $data['nextFundingTime'];
$settlePeriod = 0;
$uts = $data['time'];
return new self($symbolSt, $symbolOri, $rate, $settleTs, $settlePeriod, $uts);
}
}
... ...