Add logic for inserting data into the backtest results table and example usage

This commit is contained in:
moshferatu 2024-01-09 11:39:40 -08:00
parent 4228d95711
commit dd771a07c1
3 changed files with 56 additions and 0 deletions

View File

@ -0,0 +1 @@
from .insert import insert

View File

@ -0,0 +1,17 @@
import json
import pandas as pd
from dotenv import load_dotenv
from os import getenv
from sqlalchemy import create_engine
load_dotenv()
def insert(backtest_data: pd.DataFrame):
backtest_data['Spreads'] = backtest_data['Spreads'].apply(lambda x: json.dumps(x) if isinstance(x, list) else x)
database_url = (
f"postgresql+psycopg2://{getenv('DATABASE_USER')}:{getenv('DATABASE_PASSWORD')}"
f"@{getenv('DATABASE_HOST')}:{getenv('DATABASE_PORT')}/{getenv('DATABASE_NAME')}"
)
engine = create_engine(database_url)
backtest_data.to_sql('Backtest', engine, if_exists='append', index=False, method='multi')

View File

@ -0,0 +1,38 @@
import pandas as pd
from database.backtest import insert
backtest_data = {
'Date': ['2024-01-08'],
'Symbol': ['SPX'],
'Strategy': ['Iron Condor @ Market Open'],
'Entry Time': [pd.Timestamp('2024-01-08 09:30:00')],
'Exit Time': [pd.Timestamp('2024-01-08 16:00:00')],
'Spreads': [
[
{
'Legs': [
{'Action': 'BUY', 'Strike': 150, 'Type': 'CALL'},
{'Action': 'SELL', 'Strike': 155, 'Type': 'CALL'}
],
'Open': 1.5,
'High': 2.0,
'Low': 1.0,
'Close': 1.8
},
{
'Legs': [
{'Action': 'SELL', 'Strike': 160, 'Type': 'PUT'},
{'Action': 'BUY', 'Strike': 155, 'Type': 'PUT'}
],
'Open': 2.5,
'High': 3.0,
'Low': 2.0,
'Close': 2.8
}
]
],
'Profit': [100.00]
}
insert(pd.DataFrame(backtest_data))