Nouvelle version Zeus_8_3_2_B_4_2.py
This commit is contained in:
69
tools/chute.py
Normal file
69
tools/chute.py
Normal file
@@ -0,0 +1,69 @@
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def detect_btc_crashes_and_rebounds(df, drop_threshold=-10, rebound_threshold=5):
|
||||
"""
|
||||
Identifie les plus grosses chutes du BTC et le rebond suivant.
|
||||
|
||||
Paramètres :
|
||||
- df : DataFrame contenant une colonne 'close' avec les prix du BTC.
|
||||
- drop_threshold : Seuil de chute en % (ex: -10 pour une chute > 10%).
|
||||
- rebound_threshold : Seuil de rebond en % après la chute.
|
||||
|
||||
Retourne :
|
||||
- Une liste des chutes avec le pourcentage de rebond correspondant.
|
||||
"""
|
||||
df['return'] = df['close'].pct_change() * 100 # Variation en %
|
||||
crashes = []
|
||||
|
||||
in_crash = False
|
||||
crash_start, crash_end, bottom, rebound_end = None, None, None, None
|
||||
|
||||
for i in range(1, len(df)):
|
||||
change = df.loc[i, 'return']
|
||||
|
||||
# Début d'une chute
|
||||
if change < drop_threshold and not in_crash:
|
||||
crash_start = i - 1
|
||||
in_crash = True
|
||||
|
||||
# En pleine chute, trouver le creux
|
||||
if in_crash:
|
||||
if bottom is None or df.loc[i, 'close'] < df.loc[bottom, 'close']:
|
||||
bottom = i
|
||||
|
||||
# Fin de la chute et début du rebond
|
||||
if in_crash and change > 0:
|
||||
crash_end = i
|
||||
|
||||
# Identifier un rebond
|
||||
if in_crash and crash_end:
|
||||
rebound_percent = (df.loc[i, 'close'] - df.loc[bottom, 'close']) / df.loc[bottom, 'close'] * 100
|
||||
if rebound_percent > rebound_threshold:
|
||||
rebound_end = i
|
||||
crashes.append({
|
||||
'crash_start': df.index[crash_start],
|
||||
'crash_end': df.index[crash_end],
|
||||
'bottom': df.index[bottom],
|
||||
'rebound_end': df.index[rebound_end],
|
||||
'drop_percent': (df.loc[bottom, 'close'] - df.loc[crash_start, 'close']) / df.loc[
|
||||
crash_start, 'close'] * 100,
|
||||
'rebound_percent': rebound_percent
|
||||
})
|
||||
in_crash = False # Reset pour détecter une nouvelle chute
|
||||
|
||||
return crashes
|
||||
|
||||
import yfinance as yf
|
||||
|
||||
df = yf.download("BTC-USD", start="2020-01-01", end="2025-01-01", interval="1d")
|
||||
df.to_csv("btc_prices.csv")
|
||||
print("Données enregistrées !")
|
||||
|
||||
|
||||
# Exemple d'utilisation avec un DataFrame BTC (OHLCV)
|
||||
df = pd.read_csv("btc_prices.csv", parse_dates=["date"], index_col="date")
|
||||
crashes = detect_btc_crashes_and_rebounds(df)
|
||||
|
||||
for crash in crashes:
|
||||
print(crash)
|
||||
Reference in New Issue
Block a user