Untitled

 avatar
unknown
python
5 months ago
1.6 kB
4
Indexable
import numpy as np
from scipy.stats import norm
from datetime import datetime, timedelta
import pytz


def get_probability_crossing(price_start, prce_target, days, sigma = 1):
    # Конвертация дней в годовую долю (предположим, 365 дней в году)
    T_years = days / 365

    # Расчет Z для вероятности пересечения уровня
    ln_ratio = np.log(prce_target / price_start)
    Z = ln_ratio / (sigma * np.sqrt(T_years))

    # Нахождение вероятности пересечения уровня
    if prce_target >= price_start:
        probability_crossing = 2 * (1 - norm.cdf(Z))
    else:
        # Для случая, когда уровень ниже начальной цены
        probability_crossing = 2 * norm.cdf(Z)

    return probability_crossing


if __name__ == "__main__":
    # Заданные параметры
    S_0 = 3205  # начальная цена
    s = 1

    et_timezone = pytz.timezone('US/Eastern')
    now_et = datetime.now(et_timezone)
    end_date_et = et_timezone.localize(datetime(2024, 11, 30, 23, 59))
    days_difference = (end_date_et - now_et).total_seconds() / (24 * 3600)

    print('--------------------- ETH ------------------------')
    for S_t in [2000, 2250, 3500, 3750, 4000]:
        probability_crossing = get_probability_crossing(S_0, S_t, days_difference, s)
        print(f"${S_t} хотя бы раз в течение {days_difference:.1f} дней: {probability_crossing * 100:.4f}%")
Editor is loading...
Leave a Comment