added griffins shit
This commit is contained in:
65
src/griffin-stuff/backtester/main.py
Normal file
65
src/griffin-stuff/backtester/main.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import json
|
||||
import logging
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
from indicators import calculate_indicator_signals
|
||||
from evaluation import evaluate_indicator_accuracy
|
||||
|
||||
def setup_logging(log_path):
|
||||
os.makedirs(os.path.dirname(log_path), exist_ok=True)
|
||||
logging.basicConfig(
|
||||
filename=log_path,
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s'
|
||||
)
|
||||
|
||||
def load_config(config_path="config.json"):
|
||||
with open(config_path, 'r') as f:
|
||||
config = json.load(f)
|
||||
return config
|
||||
|
||||
def load_data(csv_path, date_col, price_col):
|
||||
df = pd.read_csv(csv_path)
|
||||
df[date_col] = pd.to_datetime(df[date_col])
|
||||
df = df.sort_values(date_col).reset_index(drop=True)
|
||||
df = df.dropna(subset=[date_col, price_col])
|
||||
return df
|
||||
|
||||
if __name__ == "__main__":
|
||||
config = load_config("config.json")
|
||||
setup_logging(config["evaluation"]["log_file"])
|
||||
|
||||
# Load data
|
||||
df = load_data(config["data"]["input_csv"],
|
||||
config["data"]["date_column"],
|
||||
config["data"]["price_column"])
|
||||
|
||||
# Calculate indicators and signals, evaluate accuracy
|
||||
all_results = []
|
||||
for category, indicators in config["indicators"].items():
|
||||
for ind_name in indicators:
|
||||
params = config["parameters"].get(ind_name, {})
|
||||
|
||||
signals_df = calculate_indicator_signals(
|
||||
df.copy(),
|
||||
indicator_name=ind_name,
|
||||
params=params,
|
||||
price_col=config["data"]["price_column"],
|
||||
high_col=config["data"]["high_column"],
|
||||
low_col=config["data"]["low_column"],
|
||||
volume_col=config["data"]["volume_column"]
|
||||
)
|
||||
|
||||
accuracy = evaluate_indicator_accuracy(
|
||||
signals_df,
|
||||
price_col=config["data"]["price_column"],
|
||||
horizon=config["evaluation"]["prediction_horizon"]
|
||||
)
|
||||
|
||||
logging.info(f"Category: {category}, Indicator: {ind_name}, Accuracy: {accuracy:.4f}")
|
||||
all_results.append((category, ind_name, accuracy))
|
||||
|
||||
# Print results to console as well
|
||||
for category, ind_name, acc in all_results:
|
||||
print(f"Category: {category}, Indicator: {ind_name}, Accuracy: {acc:.4f}")
|
||||
Reference in New Issue
Block a user