Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ price-data-new
# Ignore frontend build
**/**/build

# Ignore virtual environments
venv/
.venv/

# Ignore files related to API keys
.env

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ dependencies = [
"jax>=0.4.27",
"jaxlib",
"numpy>=1.21.0",
"pandas>=1.3.6",
"pandas>=2.2",
"flask",
"flask-jwt-extended",
"scipy",
Expand Down
2 changes: 1 addition & 1 deletion quantammsim/core_simulator/windowing_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ def raw_trades_to_trade_array(raw_trades, start_date_string, end_date_string, to
pd.date_range(
start=pd.to_datetime(start_date_string, format="%Y-%m-%d %H:%M:%S"),
end=pd.to_datetime(end_date_string, format="%Y-%m-%d %H:%M:%S"),
freq="T",
freq="min",
).astype(int)
// 10**6
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def plot_line_chart_from_results(
series_dict = {}
for result, series in zip(results_list, series_list):
result_index = pd.date_range(
start=startDateString, periods=len(result), freq="T"
start=startDateString, periods=len(result), freq="min"
)
result_series = pd.Series(result, index=result_index)
series_dict[series] = result_series
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,36 +244,36 @@ def calculate_drawdown_statistics(daily_returns, rf_values):
weekly_max_drawdown = drawdown_weekly.min()

# Monthly maximum drawdown
monthly_returns = daily_returns.resample("M").apply(lambda x: (1 + x).prod() - 1)
monthly_returns = daily_returns.resample("ME").apply(lambda x: (1 + x).prod() - 1)
cumulative_monthly_returns = (1 + monthly_returns).cumprod()
peak_monthly = cumulative_monthly_returns.cummax()
drawdown_monthly = (cumulative_monthly_returns - peak_monthly) / peak_monthly
monthly_max_drawdown = drawdown_monthly.min()

daily_weekly_avg = calculate_average_daily_drawdown(daily_returns, "W")
daily_monthly_avg = calculate_average_daily_drawdown(daily_returns, "M")
daily_monthly_avg = calculate_average_daily_drawdown(daily_returns, "ME")

daily_weekly_max = calculate_max_daily_drawdown(daily_returns, "W")
daily_monthly_max = calculate_max_daily_drawdown(daily_returns, "M")
daily_monthly_max = calculate_max_daily_drawdown(daily_returns, "ME")

ulcer_index = calculate_ulcer_index(daily_returns)

daily_weekly_ulcer = calcuate_period_ulcer_index(daily_returns, "W")
daily_monthly_ulcer = calcuate_period_ulcer_index(daily_returns, "M")
daily_monthly_ulcer = calcuate_period_ulcer_index(daily_returns, "ME")

sterling = calculate_sterling_ratio(daily_returns, rf_values)

daily_weekly_sterling = calcuate_period_sterling_index(
daily_returns, rf_values, "W"
)
daily_monthly_sterling = calcuate_period_sterling_index(
daily_returns, rf_values, "M"
daily_returns, rf_values, "ME"
)

annualized_cDaR = calculate_cdar(daily_returns) * np.sqrt(365)

weekly_cDaR = calculate_monthly_cdar(daily_returns, "W")
monthly_cDaR = calculate_monthly_cdar(daily_returns, "M")
monthly_cDaR = calculate_monthly_cdar(daily_returns, "ME")

return {
"Daily Returns Maximum Drawdown": abs(daily_max_drawdown),
Expand Down Expand Up @@ -500,7 +500,7 @@ def calcuate_period_sterling_index(daily_returns, rf_values, period):
Parameters:
daily_returns (np.array or pd.Series): Daily returns of the portfolio.
rf_values (np.array or pd.Series): Daily risk-free rates.
period (str): Period for resampling (e.g., "M" for monthly).
period (str): Period for resampling (e.g., "ME" for monthly).

Returns:
np.array: Monthly Sterling Ratios.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -752,7 +752,7 @@ def fill_missing_values(target_directory, filename, output_filename):
def calculate_daily_returns(minute_values, startDateString, name):
# Create a pandas Series with minute-level values and a datetime index
num_minutes = len(minute_values)
minute_index = pd.date_range(start=startDateString, periods=num_minutes, freq="T")
minute_index = pd.date_range(start=startDateString, periods=num_minutes, freq="min")
minute_series = pd.Series(minute_values, index=minute_index)
# Resample to daily frequency by taking the last value of each day

Expand Down Expand Up @@ -968,7 +968,7 @@ def retrieve_mc_param_financial_results(run_fingerprint, params, testEndDateStri
minute_index = pd.date_range(
start=run_fingerprint["startDateString"],
periods=len(portfolio_result["value"]),
freq="T",
freq="min",
)
minute_series = pd.Series(portfolio_result["value"], index=minute_index)
minute_series.to_csv("./results/portfolio_result_abs.csv")
Expand Down
2 changes: 1 addition & 1 deletion quantammsim/utils/data_processing/binance_data_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ def report_gaps(concatenated_df, gaps_output_file=None):
pd.date_range(
start=pd.to_datetime(start_unix, unit="ms"),
end=pd.to_datetime(end_unix, unit="ms"),
freq="T",
freq="min",
).astype(int)
// 10**9
)
Expand Down
8 changes: 4 additions & 4 deletions quantammsim/utils/data_processing/historic_data_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@ def update_historic_data_old(token, root):
pd.date_range(
start=pd.to_datetime(csvData.index.min(), unit="ms"),
end=pd.to_datetime(csvData.index.max(), unit="ms"),
freq="T",
freq="min",
).astype(int)
// 10**6
)
Expand Down Expand Up @@ -554,7 +554,7 @@ def update_historic_data_old(token, root):
pd.date_range(
start=pd.to_datetime(hourly_data.index.min(), unit="ms"),
end=pd.to_datetime(hourly_data.index.max(), unit="ms"),
freq="H",
freq="h",
).astype(int)
// 10**6
)
Expand All @@ -566,7 +566,7 @@ def update_historic_data_old(token, root):
pd.date_range(
start=pd.to_datetime(hourly_data.index.min(), unit="ms"),
end=pd.to_datetime(hourly_data.index.max(), unit="ms"),
freq="T",
freq="min",
).astype(int)
// 10**6
)
Expand Down Expand Up @@ -987,7 +987,7 @@ def update_historic_data(token, root):
agg_dict = {k: v for k, v in agg_dict.items() if k in concated_df_hourly.columns}

# Perform resampling
hourly_data = concated_df_hourly.resample("1H").agg(agg_dict).reset_index()
hourly_data = concated_df_hourly.resample("1h").agg(agg_dict).reset_index()

# Save hourly data
hourly_data.to_csv(hourlyPath, index=False)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def expand_daily_to_minute_data(daily_data, scale="ms"):

# Create a date range with minute frequency
minute_range = pd.date_range(
start=daily_data.index.min(), end=daily_data.index.max(), freq="T"
start=daily_data.index.min(), end=daily_data.index.max(), freq="min"
)

# Reindex the daily data to the minute range, forward filling the values
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"jax>=0.4.27",
"jaxlib", # Required for JAX to work
"numpy>=1.21.0",
"pandas>=1.3.0",
"pandas>=2.2",
"flask",
"flask-jwt-extended",
"scipy",
Expand Down
Loading