作者 karlet

feat:正负处理

@@ -198,6 +198,10 @@ class CmBroker @@ -198,6 +198,10 @@ class CmBroker
198 }); 198 });
199 if ($wsDataPos) { 199 if ($wsDataPos) {
200 $pos = Pos::transferWsDataPos($wsDataPos); 200 $pos = Pos::transferWsDataPos($wsDataPos);
  201 + if ($this->posMode != self::MODE_ONE_SIDE) {
  202 + $pos->qty = abs($pos->qty); // 统一为正
  203 + $pos->lot = abs($pos->lot); // 统一为正
  204 + }
201 $positions[$wsDataPos->symbol . "_" . $wsDataPos->posSide] = $pos; 205 $positions[$wsDataPos->symbol . "_" . $wsDataPos->posSide] = $pos;
202 $wsData = new WsData($this->plat, 'pos', $trade = null, $pos = $wsDataPos); 206 $wsData = new WsData($this->plat, 'pos', $trade = null, $pos = $wsDataPos);
203 $onData($wsData); 207 $onData($wsData);
@@ -650,12 +654,20 @@ class CmBroker @@ -650,12 +654,20 @@ class CmBroker
650 $item = Pos::transferOkxPos($value, $this->symbolInfos, function ($symbol) { 654 $item = Pos::transferOkxPos($value, $this->symbolInfos, function ($symbol) {
651 return $this->getSymbolSt($symbol); 655 return $this->getSymbolSt($symbol);
652 }); 656 });
  657 + if ($this->posMode != self::MODE_ONE_SIDE) {
  658 + $item->qty = abs($item->qty);
  659 + $item->lot = abs($item->lot);
  660 + }
653 $newPositions[$item->symbol . "_" . $item->posSide] = $item; 661 $newPositions[$item->symbol . "_" . $item->posSide] = $item;
654 } 662 }
655 if ($this->plat == self::PLAT_BINANCE) { 663 if ($this->plat == self::PLAT_BINANCE) {
656 $item = Pos::transferBinancePos($value, $this->symbolInfos, function ($symbol) { 664 $item = Pos::transferBinancePos($value, $this->symbolInfos, function ($symbol) {
657 return $this->getSymbolSt($symbol); 665 return $this->getSymbolSt($symbol);
658 }); 666 });
  667 + if ($this->posMode != self::MODE_ONE_SIDE) {
  668 + $item->qty = abs($item->qty);
  669 + $item->lot = abs($item->lot);
  670 + }
659 $newPositions[$item->symbol . "_" . $item->posSide] = $item; 671 $newPositions[$item->symbol . "_" . $item->posSide] = $item;
660 } 672 }
661 } 673 }
@@ -49,7 +49,7 @@ class Pos @@ -49,7 +49,7 @@ class Pos
49 /** @var SymbolInfo $symbolInfo */ 49 /** @var SymbolInfo $symbolInfo */
50 $symbolInfo = $symbolInfos[$symbol]; 50 $symbolInfo = $symbolInfos[$symbol];
51 $posSide = strtoupper($pos['posSide']); 51 $posSide = strtoupper($pos['posSide']);
52 - $lot = abs($pos['pos']); 52 + $lot = $pos['pos'];
53 $qty = round($lot * $symbolInfo->ctVal, $symbolInfo->qtyPrec); 53 $qty = round($lot * $symbolInfo->ctVal, $symbolInfo->qtyPrec);
54 $avgPrice = $pos['avgPx']; 54 $avgPrice = $pos['avgPx'];
55 $pnl = $pos['upl']; 55 $pnl = $pos['upl'];
@@ -68,7 +68,7 @@ class Pos @@ -68,7 +68,7 @@ class Pos
68 /** @var SymbolInfo $symbolInfo */ 68 /** @var SymbolInfo $symbolInfo */
69 $symbolInfo = $symbolInfos[$symbol]; 69 $symbolInfo = $symbolInfos[$symbol];
70 $posSide = strtoupper($pos['positionSide']); 70 $posSide = strtoupper($pos['positionSide']);
71 - $qty = abs($pos['positionAmt']); 71 + $qty = $pos['positionAmt'];
72 $lot = round($qty / $symbolInfo->ctVal, $symbolInfo->qtyPrec); 72 $lot = round($qty / $symbolInfo->ctVal, $symbolInfo->qtyPrec);
73 $avgPrice = -1; 73 $avgPrice = -1;
74 $pnl = $pos['unrealizedProfit']; 74 $pnl = $pos['unrealizedProfit'];