作者 karlet

feat:更新仓位

... ... @@ -124,7 +124,22 @@ class CmBroker
}
}
if (isset($data['e']) && $data['e'] == 'ACCOUNT_UPDATE') {
if (isset($data['a']) && isset($data['a']['P'])) {
$positions = $data['a']['P'];
foreach ($positions as $key => $value) {
$wsDataPos = WsDataPos::TransferBinancePos($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
});
$this->positions[$wsDataPos->symbol . "_" . $wsDataPos->posSide] = $pos;
$wsData = new WsData($this->plat, 'pos', $trade = null, $pos = $wsDataPos);
$onData($wsData);
}
foreach ($this->positions as $key => $value) {
if ($value['qty'] == 0) {
unset($this->positions[$key]);
}
}
}
}
}
//处理欧意账户相关数据监听
... ...
... ... @@ -55,4 +55,20 @@ class WsDataPos
$pnl = (float)$data['upl'];
return new WsDataPos($symbol, $posSide, $qty, $lot, $avgPrice, false, $pnl);
}
public static function TransferBinancePos($data, $symbolInfos, callable $toSymbolSt): WsDataPos|null
{
$symbol = call_user_func($toSymbolSt, $data['s']);
/** @var SymbolInfo $symbolInfo */
$symbolInfo = $symbolInfos[$symbol] ?? null;
if ($symbolInfo === null) {
return null;
}
$posSide = strtoupper($data['ps']);
$qty = (float)$data['pa'];
$lot = $qty;
$avgPrice = (float)$data['ep'];
$pnl = (float)$data['up'];
return new WsDataPos($symbol, $posSide, $qty, $lot, $avgPrice, false, $pnl);
}
}
... ...