新增交易记录功能,支持开平仓和盈亏计算
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+27
-1
@@ -119,4 +119,30 @@ class Position(Base):
|
||||
locked_count: Mapped[int] = mapped_column(Integer, default=0)
|
||||
opened_at: Mapped[date] = mapped_column(Date)
|
||||
|
||||
round: Mapped["Round"] = relationship(back_populates="positions")
|
||||
round: Mapped["Round"] = relationship(back_populates="positions")
|
||||
|
||||
|
||||
class Trade(Base):
|
||||
__tablename__ = "trades"
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
product_code: Mapped[str] = mapped_column(String(10))
|
||||
contract_code: Mapped[str] = mapped_column(String(10), index=True)
|
||||
direction: Mapped[str] = mapped_column(String(4))
|
||||
open_date: Mapped[date] = mapped_column(Date)
|
||||
open_price: Mapped[int] = mapped_column(Integer)
|
||||
open_fee: Mapped[int | None] = mapped_column(Integer, nullable=True, default=0)
|
||||
close_date: Mapped[date | None] = mapped_column(Date, nullable=True)
|
||||
close_price: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
||||
close_fee: Mapped[int | None] = mapped_column(Integer, nullable=True, default=0)
|
||||
status: Mapped[str] = mapped_column(String(10), default="open")
|
||||
|
||||
@property
|
||||
def pnl(self) -> int | None:
|
||||
if self.close_price is None:
|
||||
return None
|
||||
mul = 20 # glass futures point value
|
||||
if self.direction == "long":
|
||||
return (self.close_price - self.open_price) * mul - (self.open_fee or 0) - (self.close_fee or 0)
|
||||
else:
|
||||
return (self.open_price - self.close_price) * mul - (self.open_fee or 0) - (self.close_fee or 0)
|
||||
Reference in New Issue
Block a user