sabato 12 agosto 2023

Integrale in Python

Integrale in Python senza l'uso di math.

import matplotlib.pyplot as plt
import numpy as np
import math
def sen(x):
    n=10
    rad = x * (3.14159 / 180)  # Converti l'angolo in radianti
    seno = 0
    
    for i in range(n):
        termine = ((-1) ** i) * (rad ** (2 * i + 1)) / math.factorial(2 * i + 1)
        seno += termine
    
    return seno

def f(x):
    return sen(x)

def integral(a, b, n):
    # a e b sono gli estremi di integrazione
    # n è il numero di rettangoli utilizzati per l'approssimazione

    delta_x = (b - a) / n
    result = 0

    for i in range(n):
        x = a + i * delta_x
        result += f(x) * delta_x

    return result

def plot_function_and_integral(a, b, n, r):
    x = np.linspace(a, b, n)
    y = f(x)

    fig, ax = plt.subplots()
    ax.plot(x, y, label='f(x)')
    ax.fill_between(x, y, 0, alpha=0.3, label='Integrale')

    ax.legend()
    ax.grid(True)
    plt.title(f'Integrale {r}')

    plt.show()

# Esempio di utilizzo
a = 0
b = 400
n = 1000
r =  integral(a, b, n)
plot_function_and_integral(a, b, n,r)

domenica 6 agosto 2023

Grafico MACD e prezzo


import requests
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from datetime import datetime

def get_binance_data(symbol, interval, limit):
    url = f"https://api.binance.com/api/v3/klines?symbol={symbol}&interval={interval}&limit={limit}"
    response = requests.get(url)
    data = response.json()
    df = pd.DataFrame(data)
    df.columns = ['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore']
    df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
    df['close'] = df['close'].astype(float)
    return df

def calculate_moving_average(data, window):
    return data['close'].rolling(window=window).mean()

def calculate_macd(data, fast_period, slow_period, signal_period):
    macd = data['close'].ewm(span=fast_period, adjust=False).mean() - data['close'].ewm(span=slow_period, adjust=False).mean()
    signal = macd.ewm(span=signal_period, adjust=False).mean()
    histogram = macd - signal
    return macd, signal, histogram

def plot_chart(data, ma_50, ma_99, macd, signal, histogram):
    fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(12, 8))

    ax1.plot(data['timestamp'], data['close'], label='Close')
    ax1.plot(data['timestamp'], ma_50, label='MA 50')
    ax1.plot(data['timestamp'], ma_99, label='MA 99')
    ax1.legend()

    ax2.plot(data['timestamp'], macd, label='MACD')
    ax2.plot(data['timestamp'], signal, label='Signal')
    ax2.bar(data['timestamp'], histogram, label='Histogram', color='gray')
    ax2.legend()

    plt.xlabel('Timestamp')
    plt.show()

symbol = 'BTCUSDT'
interval = '1d'
limit = 500

data = get_binance_data(symbol, interval, limit)
ma_50 = calculate_moving_average(data, 50)
ma_99 = calculate_moving_average(data, 99)
macd, signal, histogram = calculate_macd(data, 12, 26, 9)

plot_chart(data, ma_50, ma_99, macd, signal, histogram)

mercoledì 2 agosto 2023

Regressione Lineare IA

La regressione lineare è una tecnica statistica utilizzata per studiare la relazione tra una variabile dipendente (o target) e una o più variabili indipendenti (o feature). Lo scopo della regressione lineare è quello di trovare una linea retta che rappresenti al meglio la relazione tra le variabili.

La regressione lineare viene utilizzata principalmente per due scopi:

1. Predizione: una volta stabilita la relazione tra le variabili, è possibile utilizzare il modello per fare previsioni sulla variabile dipendente, dato un valore delle variabili indipendenti. Ad esempio, se si ha un dataset contenente informazioni sulle dimensioni delle case (variabili indipendenti) e sui prezzi (variabile dipendente), è possibile utilizzare la regressione lineare per fare previsioni sui prezzi delle case, date le loro dimensioni.

2. Analisi della relazione: la regressione lineare permette di capire se e in che modo le variabili indipendenti influenzano la variabile dipendente. Attraverso l'analisi dei coefficienti della regressione, è possibile determinare l'entità e la direzione dell'effetto che ogni variabile indipendente ha sulla variabile dipendente. Ad esempio, se si utilizza la regressione lineare per analizzare la relazione tra l'età e il reddito, è possibile determinare se c'è una correlazione positiva o negativa tra le due variabili.

Per calcolare la regressione lineare, si utilizza l'algoritmo dei minimi quadrati. L'obiettivo dell'algoritmo è quello di minimizzare la somma dei quadrati delle differenze tra i valori osservati della variabile dipendente e i valori predetti dal modello. In altre parole, si cerca di trovare la linea retta che minimizza l'errore di previsione.

La regressione lineare può essere applicata a diversi tipi di dati, sia numerici che categorici. Nel caso di variabili categoriche, è necessario utilizzare una codifica appropriata, come la codifica one-hot.

Python offre diverse librerie per eseguire la regressione lineare, come scikit-learn e statsmodels. Queste librerie forniscono funzioni per addestrare il modello di regressione lineare, fare previsioni e analizzare i risultati.

In conclusione, la regressione lineare è uno strumento statistico fondamentale per analizzare la relazione tra variabili e fare previsioni. È ampiamente utilizzata in molti campi, come l'economia, la finanza, la medicina e l'ingegneria.
Qui sotto il link da dove scaricare liberamente il file .py che esegue predizioni su Bitcoin. Ricordo che le previsioni di questo programma non sono affidabili, ma solo un esempio di regressione lineare.
https://drive.google.com/file/d/19dtKuD7OjQMKGP0KiVnsnhawVBN4IzoC/view?usp=drivesdk