作者 karlet

feat:更新仓位

@@ -124,7 +124,22 @@ class CmBroker @@ -124,7 +124,22 @@ class CmBroker
124 } 124 }
125 } 125 }
126 if (isset($data['e']) && $data['e'] == 'ACCOUNT_UPDATE') { 126 if (isset($data['e']) && $data['e'] == 'ACCOUNT_UPDATE') {
127 - 127 + if (isset($data['a']) && isset($data['a']['P'])) {
  128 + $positions = $data['a']['P'];
  129 + foreach ($positions as $key => $value) {
  130 + $wsDataPos = WsDataPos::TransferBinancePos($value, $this->symbolInfos, function ($symbol) {
  131 + return $this->getSymbolSt($symbol);
  132 + });
  133 + $this->positions[$wsDataPos->symbol . "_" . $wsDataPos->posSide] = $pos;
  134 + $wsData = new WsData($this->plat, 'pos', $trade = null, $pos = $wsDataPos);
  135 + $onData($wsData);
  136 + }
  137 + foreach ($this->positions as $key => $value) {
  138 + if ($value['qty'] == 0) {
  139 + unset($this->positions[$key]);
  140 + }
  141 + }
  142 + }
128 } 143 }
129 } 144 }
130 //处理欧意账户相关数据监听 145 //处理欧意账户相关数据监听
@@ -55,4 +55,20 @@ class WsDataPos @@ -55,4 +55,20 @@ class WsDataPos
55 $pnl = (float)$data['upl']; 55 $pnl = (float)$data['upl'];
56 return new WsDataPos($symbol, $posSide, $qty, $lot, $avgPrice, false, $pnl); 56 return new WsDataPos($symbol, $posSide, $qty, $lot, $avgPrice, false, $pnl);
57 } 57 }
  58 +
  59 + public static function TransferBinancePos($data, $symbolInfos, callable $toSymbolSt): WsDataPos|null
  60 + {
  61 + $symbol = call_user_func($toSymbolSt, $data['s']);
  62 + /** @var SymbolInfo $symbolInfo */
  63 + $symbolInfo = $symbolInfos[$symbol] ?? null;
  64 + if ($symbolInfo === null) {
  65 + return null;
  66 + }
  67 + $posSide = strtoupper($data['ps']);
  68 + $qty = (float)$data['pa'];
  69 + $lot = $qty;
  70 + $avgPrice = (float)$data['ep'];
  71 + $pnl = (float)$data['up'];
  72 + return new WsDataPos($symbol, $posSide, $qty, $lot, $avgPrice, false, $pnl);
  73 + }
58 } 74 }