品种增加每点价值字段,PNL计算支持不同品种差异化配置

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
fish
2026-07-28 09:49:37 +08:00
parent 5018eb2083
commit 833491b8d0
8 changed files with 66 additions and 18 deletions
+3 -1
View File
@@ -48,6 +48,7 @@ def admin_page(request: Request, db: Session = Depends(get_db)):
"code": p.code,
"name": p.name,
"exchange": p.exchange,
"point_value": p.point_value,
"contracts": contract_list,
})
@@ -71,11 +72,12 @@ def create_product(
code: str = Form(...),
name: str = Form(...),
exchange: str = Form(...),
point_value: int = Form(20),
db: Session = Depends(get_db),
):
existing = db.query(Product).filter(Product.code == code.upper()).first()
if not existing:
p = Product(code=code.upper(), name=name, exchange=exchange)
p = Product(code=code.upper(), name=name, exchange=exchange, point_value=point_value)
db.add(p)
db.commit()
return RedirectResponse("/admin/?tab=product", status_code=303)
+13 -2
View File
@@ -67,7 +67,12 @@ def open_trade(
):
code = contract_code.upper()
contract = db.query(Contract).filter(Contract.code == code).first()
product_code = contract.product.code if contract else code[:2]
if contract:
product = contract.product
else:
product = db.query(Product).filter(Product.code == code[:2]).first()
product_code = product.code if product else code[:2]
point_value = product.point_value if product else 20
t = OptionTrade(
product_code=product_code,
@@ -78,6 +83,7 @@ def open_trade(
open_date=date.fromisoformat(open_date),
open_price=open_price,
open_fee=open_fee,
point_value=point_value,
status="open",
)
db.add(t)
@@ -124,7 +130,12 @@ def edit_trade(
if t:
code = contract_code.upper()
contract = db.query(Contract).filter(Contract.code == code).first()
t.product_code = contract.product.code if contract else code[:2]
if contract:
product = contract.product
else:
product = db.query(Product).filter(Product.code == code[:2]).first()
t.product_code = product.code if product else code[:2]
t.point_value = product.point_value if product else 20
t.contract_code = code
t.option_type = option_type
t.direction = direction
+13 -2
View File
@@ -74,7 +74,12 @@ def open_trade(
):
code = contract_code.upper()
contract = db.query(Contract).filter(Contract.code == code).first()
product_code = contract.product.code if contract else code[:2]
if contract:
product = contract.product
else:
product = db.query(Product).filter(Product.code == code[:2]).first()
product_code = product.code if product else code[:2]
point_value = product.point_value if product else 20
t = Trade(
product_code=product_code,
@@ -83,6 +88,7 @@ def open_trade(
open_date=date.fromisoformat(open_date),
open_price=open_price,
open_fee=open_fee,
point_value=point_value,
status="open",
)
db.add(t)
@@ -127,7 +133,12 @@ def edit_trade(
if t:
code = contract_code.upper()
contract = db.query(Contract).filter(Contract.code == code).first()
t.product_code = contract.product.code if contract else code[:2]
if contract:
product = contract.product
else:
product = db.query(Product).filter(Product.code == code[:2]).first()
t.product_code = product.code if product else code[:2]
t.point_value = product.point_value if product else 20
t.contract_code = code
t.direction = direction
t.open_date = date.fromisoformat(open_date)