作者 karlet

feat:完成成交监听

@@ -261,15 +261,6 @@ class CmBroker @@ -261,15 +261,6 @@ class CmBroker
261 // 处理订单和成交数据 261 // 处理订单和成交数据
262 if (isset($data['arg']) && $data['arg']['channel'] == 'orders') { 262 if (isset($data['arg']) && $data['arg']['channel'] == 'orders') {
263 foreach ($data['data'] as $value) { 263 foreach ($data['data'] as $value) {
264 - // 处理成交数据  
265 - $wsDataTrade = WsDataTrade::TransferBitgetOrder($value, $this->symbolInfos, function ($symbol) {  
266 - return $this->getSymbolSt($symbol);  
267 - });  
268 - if ($wsDataTrade) {  
269 - $wsData = new WsData($this->plat, 'trade', $wsDataTrade);  
270 - $onData($wsData);  
271 - }  
272 -  
273 // 处理订单数据 264 // 处理订单数据
274 $wsDataOrder = WsDataOrder::TransferBitgetOrder($value, $this->symbolInfos, function ($symbol) { 265 $wsDataOrder = WsDataOrder::TransferBitgetOrder($value, $this->symbolInfos, function ($symbol) {
275 return $this->getSymbolSt($symbol); 266 return $this->getSymbolSt($symbol);
@@ -281,6 +272,18 @@ class CmBroker @@ -281,6 +272,18 @@ class CmBroker
281 } 272 }
282 return; 273 return;
283 } 274 }
  275 + //处理成交数据
  276 + if (isset($data['arg']) && $data['arg']['channel'] == 'fill') {
  277 + foreach ($data['data'] as $value) {
  278 + $wsDataTrade = WsDataTrade::TransferBitgetOrder($value, $this->symbolInfos, function ($symbol) {
  279 + return $this->getSymbolSt($symbol);
  280 + });
  281 + if ($wsDataTrade) {
  282 + $wsData = new WsData($this->plat, 'trade', $wsDataTrade);
  283 + $onData($wsData);
  284 + }
  285 + }
  286 + }
284 287
285 // 处理账户和持仓数据 288 // 处理账户和持仓数据
286 if (isset($data['arg']) && $data['arg']['channel'] == 'account') { 289 if (isset($data['arg']) && $data['arg']['channel'] == 'account') {
@@ -141,33 +141,30 @@ class WsDataTrade @@ -141,33 +141,30 @@ class WsDataTrade
141 } 141 }
142 public static function TransferBitgetOrder(array $data, array $symbolInfos, callable $toSymbolSt): WsDataTrade|null 142 public static function TransferBitgetOrder(array $data, array $symbolInfos, callable $toSymbolSt): WsDataTrade|null
143 { 143 {
144 - if ($data['status'] != 'filled' && $data['status'] != 'partial-filled') {  
145 - return null;  
146 - }  
147 -  
148 $symbol = call_user_func($toSymbolSt, $data['symbol']); 144 $symbol = call_user_func($toSymbolSt, $data['symbol']);
149 /** @var SymbolInfo $symbolInfo */ 145 /** @var SymbolInfo $symbolInfo */
150 $symbolInfo = $symbolInfos[$symbol] ?? null; 146 $symbolInfo = $symbolInfos[$symbol] ?? null;
151 if ($symbolInfo === null) { 147 if ($symbolInfo === null) {
152 return null; 148 return null;
153 } 149 }
154 -  
155 - return new WsDataTrade(  
156 - 'bitget',  
157 - 'BOTH',  
158 - $symbol,  
159 - strtoupper($data['side']),  
160 - (float)$data['fillPrice'],  
161 - (float)$data['fillQuantity'],  
162 - (float)$data['fillQuantity'],  
163 - 0,  
164 - (float)$data['fee'],  
165 - (float)$data['fillPrice'] * (float)$data['fillQuantity'],  
166 - (int)($data['cTime']),  
167 - $data['tradeId'],  
168 - $data['orderId'],  
169 - $data['clientOid'],  
170 - 1  
171 - ); 150 + $plat = 'bitget';
  151 + $side = strtoupper($data['side']);
  152 + $price = (float)$data['price'];
  153 + $qty = (float)$data['baseVolume'];
  154 + $lot = $qty;
  155 + $fee = (float)$data['feeDetail'][0]['totalFee'];
  156 + $pnl = (float)$data['profit'];
  157 + if (($pnl == 0 && $side == "BUY") || ($pnl != 0 && $side == "SELL")) {
  158 + $posSide = "LONG";
  159 + } else {
  160 + $posSide = "SHORT";
  161 + }
  162 + $quoteVol = (float)$data['quoteVolume'];
  163 + $ts = $data['uTime'];
  164 + $tradeId = $data['tradeId'];
  165 + $ordId = $data['orderId'];
  166 + $cliOrdId = $data['clientOid'];
  167 + $lever = 0;
  168 + return new WsDataTrade($plat, $posSide, $symbol, $side, $price, $qty, $lot, $pnl, $fee, $quoteVol, $ts, $tradeId, $ordId, $cliOrdId, $lever);
172 } 169 }
173 } 170 }