primo commit

This commit is contained in:
fredmaloggia
2026-01-05 19:15:03 +01:00
commit f707b9c95b
61 changed files with 2928 additions and 0 deletions

71
pricer/report.py Normal file
View File

@@ -0,0 +1,71 @@
from typing import List
from .utils import round_to_multiple
def generate_report(
isin: str,
category: str,
fair_value: float,
fair_values: List[int],
ask: float,
bid: float,
num_sims: int,
last_date_price,
) -> None:
rif_prezzo = ask
riferimento = "Ask"
print()
if ask == 0 and bid > 0:
rif_prezzo = bid
riferimento = "Bid"
print(f"Ask = 0, preso come valore di riferimento il Bid: {bid:.2f}")
casi_over_barriera = []
casi_under_barriera = []
casi_over_ask = []
casi_under_ask = []
for value in fair_values:
if value < 100:
casi_under_barriera.append(value)
else:
casi_over_barriera.append(value)
if value >= rif_prezzo:
casi_over_ask.append(value)
else:
casi_under_ask.append(value)
perc_over_barriera = round_to_multiple(100 * len(casi_over_barriera) / len(fair_values), 0.01)
perc_over_ask = round_to_multiple(100 * len(casi_over_ask) / len(fair_values), 0.01)
perc_under_ask = 100 - perc_over_ask
print(f"Caso calcolo Fair value {isin} = {category}")
print(
f"Fair value {isin} ({num_sims} iter.) = {fair_value:.2f} (Bid = {bid}, Ask = {ask}, Last updated on {last_date_price})"
)
print(
f"Sopra {riferimento} nel {perc_over_ask:.2f}% dei casi, sotto {riferimento} nel {perc_under_ask:.2f}% dei casi"
)
media_over_ask = round_to_multiple(sum(casi_over_ask) / len(casi_over_ask) if casi_over_ask else 0.0, 0.01)
media_under_ask = round_to_multiple(sum(casi_under_ask) / len(casi_under_ask) if casi_under_ask else 0.0, 0.01)
print(f"Valore medio casi sopra {riferimento}: {media_over_ask:.2f}")
print(f"Valore medio casi sotto {riferimento}: {media_under_ask:.2f}")
gain_medio = round_to_multiple(media_over_ask - rif_prezzo, 0.01)
loss_medio = round_to_multiple(rif_prezzo - media_under_ask, 0.01)
print(f"Gain medio: {media_over_ask:.2f} - {rif_prezzo:.2f} = {gain_medio:.2f}")
print(f"Loss medio: {rif_prezzo:.2f} - {media_under_ask:.2f} = {loss_medio:.2f}")
perc_media_gain = round_to_multiple(100 * gain_medio / rif_prezzo, 0.01)
perc_media_loss = round_to_multiple(100 * loss_medio / rif_prezzo, 0.01)
print(f"Perc media Gain: {gain_medio:.2f} / {rif_prezzo:.2f} = {perc_media_gain:.2f}%")
print(f"Perc media Loss: {loss_medio:.2f} / {rif_prezzo:.2f} = {perc_media_loss:.2f}%")
valore_atteso = round_to_multiple((perc_over_ask / 100) * gain_medio - (perc_under_ask / 100) * loss_medio, 0.01)
perc_valore_atteso = round_to_multiple(100 * valore_atteso / rif_prezzo, 0.01)
print(f"Valore atteso: {valore_atteso:.2f} ({perc_valore_atteso:.2f}% su {riferimento})")