import numpy as np
import pandas as pd
from sklearn.linear_model import LassoCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
Veri yükleme ve ön işleme
data = pd.read_csv("eth_usdt_price_data.csv") # ETH/USDT yüksek/düşük fiyat verisi
Özellik mühendisliği
data['log_high'] = np.log(data['High'])
data['log_low'] = np.log(data['Low'])
data['log_diff'] = data['log_high'] - data['log_low']
Zaman dilimine göre özellikler
for window in [1, 5, 10, 30]:
data[f'rolling_max_{window}'] = data['High'].rolling(window).max()
data[f'rolling_min_{window}'] = data['Low'].rolling(window).min()
data[f'rolling_range_{window}'] = data[f'rolling_max_{window}'] - data[f'rolling_min_{window}']
Hedef değişken: 1 dakikalık log-log maksimum mutlak fark
future_window = 1
llmad = data['log_high'].shift(-future_window) - data['log_low'].shift(-future_window)
data['LLMAD'] = np.abs(llmad)
NaN değerlerin temizlenmesi
data = data.dropna()
Girdi ve hedef değişkenlerin ayrılması
X = data.drop(['LLMAD', 'High', 'Low', 'log_high', 'log_low'], axis=1)
y = data['LLMAD']
Eğitim ve test verisinin ayrılması
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Modelin eğitimi (Lasso)
model = LassoCV(cv=5, random_state=42).fit(X_train, y_train)
Tahmin ve değerlendirme
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
print(f"Mean Absolute Error (MAE): {mae}")
Dinamik ücret hesaplama
def calculate_dynamic_fee(volatility):
base_fee = 0.003 # Temel ücret (ör. %0.3)
dynamic_multiplier = min(volatility / 0.01, 5) # Maksimum 5x artış
return base_fee * dynamic_multiplier
Örnek ücret hesaplama
example_volatility = 0.015
fee = calculate_dynamic_fee(example_volatility)
print(f"Calculated Fee: {fee:.5f}")
Modelin kaydedilmesi
import joblib
joblib.dump(model, "dynamic_fee_model.pkl")