作者 karlet

feat:完成成交监听

... ... @@ -261,15 +261,6 @@ class CmBroker
// 处理订单和成交数据
if (isset($data['arg']) && $data['arg']['channel'] == 'orders') {
foreach ($data['data'] as $value) {
// 处理成交数据
$wsDataTrade = WsDataTrade::TransferBitgetOrder($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
});
if ($wsDataTrade) {
$wsData = new WsData($this->plat, 'trade', $wsDataTrade);
$onData($wsData);
}
// 处理订单数据
$wsDataOrder = WsDataOrder::TransferBitgetOrder($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
... ... @@ -281,6 +272,18 @@ class CmBroker
}
return;
}
//处理成交数据
if (isset($data['arg']) && $data['arg']['channel'] == 'fill') {
foreach ($data['data'] as $value) {
$wsDataTrade = WsDataTrade::TransferBitgetOrder($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
});
if ($wsDataTrade) {
$wsData = new WsData($this->plat, 'trade', $wsDataTrade);
$onData($wsData);
}
}
}
// 处理账户和持仓数据
if (isset($data['arg']) && $data['arg']['channel'] == 'account') {
... ...
... ... @@ -141,33 +141,30 @@ class WsDataTrade
}
public static function TransferBitgetOrder(array $data, array $symbolInfos, callable $toSymbolSt): WsDataTrade|null
{
if ($data['status'] != 'filled' && $data['status'] != 'partial-filled') {
return null;
}
$symbol = call_user_func($toSymbolSt, $data['symbol']);
/** @var SymbolInfo $symbolInfo */
$symbolInfo = $symbolInfos[$symbol] ?? null;
if ($symbolInfo === null) {
return null;
}
return new WsDataTrade(
'bitget',
'BOTH',
$symbol,
strtoupper($data['side']),
(float)$data['fillPrice'],
(float)$data['fillQuantity'],
(float)$data['fillQuantity'],
0,
(float)$data['fee'],
(float)$data['fillPrice'] * (float)$data['fillQuantity'],
(int)($data['cTime']),
$data['tradeId'],
$data['orderId'],
$data['clientOid'],
1
);
$plat = 'bitget';
$side = strtoupper($data['side']);
$price = (float)$data['price'];
$qty = (float)$data['baseVolume'];
$lot = $qty;
$fee = (float)$data['feeDetail'][0]['totalFee'];
$pnl = (float)$data['profit'];
if (($pnl == 0 && $side == "BUY") || ($pnl != 0 && $side == "SELL")) {
$posSide = "LONG";
} else {
$posSide = "SHORT";
}
$quoteVol = (float)$data['quoteVolume'];
$ts = $data['uTime'];
$tradeId = $data['tradeId'];
$ordId = $data['orderId'];
$cliOrdId = $data['clientOid'];
$lever = 0;
return new WsDataTrade($plat, $posSide, $symbol, $side, $price, $qty, $lot, $pnl, $fee, $quoteVol, $ts, $tradeId, $ordId, $cliOrdId, $lever);
}
}
... ...