作者 karlet

feat:监听account

... ... @@ -14,6 +14,7 @@ use trader\struct\WsDataTrade;
use trader\struct\WsDataPos;
use trader\struct\SymbolInfo;
use trader\struct\WsDataOrder;
use trader\struct\WsDataAccount;
use trader\struct\Pos;
use \Exception;
use function jytools\timeFormat;
... ... @@ -93,6 +94,12 @@ class CmBroker
$this->positions = $positions;
return;
}
if (isset($data['arg']) && $data['arg']['channel'] == 'account') {
$wsDataAccount = WsDataAccount::TransferOkxAccount($data['data']);
$wsData = new WsData($this->plat, 'account', $trade = null, $pos = null, $order = null, $account = $wsDataAccount);
$onData($wsData);
return;
}
$this->msg("okx 无处理ws数据实现", $data);
}
});
... ...
... ... @@ -75,6 +75,13 @@ class Api
$method = 'POST';
return $this->request($path, $method, $param, $this->apiInfo);
}
//查看账户余额
public function accountBalance($param)
{
$path = '/api/v5/account/balance';
$method = 'GET';
return $this->request($path, $method, $param, $this->apiInfo);
}
//-------------------------------------
... ...
... ... @@ -135,6 +135,10 @@ class ExBroker
'channel' => 'positions',
'instType' => 'SWAP',
],
[
'channel' => 'account',
'ccy' => 'USDT',
]
];
$this->wsAcc->push(json_encode($subData));
}
... ...
... ... @@ -7,6 +7,7 @@ require_once __DIR__ . '/WsDataTrade.php';
use trader\struct\WsDataTrade;
use trader\struct\WsDataPos;
use trader\struct\WsDataOrder;
use trader\struct\WsDataAccount;
// 综合ws数据
class WsData
... ... @@ -16,15 +17,17 @@ class WsData
public ?WsDataTrade $trade = null;
public ?WsDataPos $pos = null;
public ?WsDataOrder $order = null;
public ?WsDataAccount $account = null;
public function __construct(string $platform, string $dataType, WsDataTrade $trade = null, WsDataPos $pos = null, WsDataOrder $order = null)
public function __construct(string $platform, string $dataType, WsDataTrade $trade = null, WsDataPos $pos = null, WsDataOrder $order = null, $account = null)
{
$this->platform = $platform;
$this->dataType = $dataType;
$this->trade = $trade;
$this->pos = $pos;
$this->order = $order;
$this->account = $account;
}
public function toArray()
... ... @@ -35,6 +38,7 @@ class WsData
'trade' => $this->trade?->toArray(),
'pos' => $this->pos?->toArray(),
'order' => $this->order?->toArray(),
'account' => $this->account?->toArray(),
];
}
}
... ...
<?php
namespace trader\struct;
require_once __DIR__ . '/../autoload.php';
use trader\struct\SymbolInfo;
class WsDataAccount
{
public array $assets;
public static function TransferOkxAccount(array $data): array
{
$ret = [];
foreach ($data as $item) {
$asset = new Asset();
$asset->coin = $item['ccy'];
$asset->totalRight = $item['availBal'];
$asset->avail = $item['availEq'];
$asset->frozen = $item['frozenBal'];
$asset->upl = $item['upl'];
$ret[$asset->coin] = $asset;
}
return $ret; //WsDataAccoun
}
public function toArray(): array
{
$ret = [];
foreach ($this->assets as $asset) {
$ret[$asset->coin] = $asset->toArray();
}
return $ret;
}
}
class Asset
{
public string $coin;
public float $totalRight; //总权益
public float $avail; //可用
public float $frozen; //冻结
public float $upl; //未实现盈亏
public function toArray(): array
{
return [
'coin' => $this->coin,
'totalRight' => $this->totalRight,
'avail' => $this->avail,
'frozen' => $this->frozen,
'upl' => $this->upl,
];
}
}
... ...