AssetPilot OrangePi 5 Pluse Server-First Commit
This commit is contained in:
59
asset_pilot_docker/app/calculator.py
Normal file
59
asset_pilot_docker/app/calculator.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from typing import Dict, Optional
|
||||
|
||||
class Calculator:
|
||||
"""손익 계산 클래스"""
|
||||
|
||||
@staticmethod
|
||||
def calc_pnl(
|
||||
gold_buy_price: float,
|
||||
gold_quantity: float,
|
||||
btc_buy_price: float,
|
||||
btc_quantity: float,
|
||||
current_gold: Optional[float],
|
||||
current_btc: Optional[float]
|
||||
) -> Dict:
|
||||
"""
|
||||
금과 BTC의 손익 계산
|
||||
|
||||
Returns:
|
||||
{
|
||||
"금손익": float,
|
||||
"금손익%": float,
|
||||
"BTC손익": float,
|
||||
"BTC손익%": float,
|
||||
"총손익": float,
|
||||
"총손익%": float
|
||||
}
|
||||
"""
|
||||
result = {
|
||||
"금손익": 0.0,
|
||||
"금손익%": 0.0,
|
||||
"BTC손익": 0.0,
|
||||
"BTC손익%": 0.0,
|
||||
"총손익": 0.0,
|
||||
"총손익%": 0.0
|
||||
}
|
||||
|
||||
# 금 손익 계산
|
||||
if current_gold:
|
||||
cost_gold = gold_buy_price * gold_quantity
|
||||
pnl_gold = gold_quantity * (float(current_gold) - gold_buy_price)
|
||||
result["금손익"] = round(pnl_gold, 0)
|
||||
if cost_gold > 0:
|
||||
result["금손익%"] = round((pnl_gold / cost_gold * 100), 2)
|
||||
|
||||
# BTC 손익 계산
|
||||
if current_btc:
|
||||
cost_btc = btc_buy_price * btc_quantity
|
||||
pnl_btc = btc_quantity * (float(current_btc) - btc_buy_price)
|
||||
result["BTC손익"] = round(pnl_btc, 0)
|
||||
if cost_btc > 0:
|
||||
result["BTC손익%"] = round((pnl_btc / cost_btc * 100), 2)
|
||||
|
||||
# 총 손익 계산
|
||||
result["총손익"] = result["금손익"] + result["BTC손익"]
|
||||
total_cost = (gold_buy_price * gold_quantity) + (btc_buy_price * btc_quantity)
|
||||
if total_cost > 0:
|
||||
result["총손익%"] = round((result["총손익"] / total_cost * 100), 2)
|
||||
|
||||
return result
|
||||
Reference in New Issue
Block a user