bug fixes
This commit is contained in:
parent
1af35000ab
commit
bcf4447cb6
@ -16,6 +16,10 @@
|
|||||||
"funding_per_pair": 2000.0,
|
"funding_per_pair": 2000.0,
|
||||||
# ====== Trading Parameters ======
|
# ====== Trading Parameters ======
|
||||||
"price_column": "close",
|
"price_column": "close",
|
||||||
|
"execution_price": {
|
||||||
|
"column": "vwap",
|
||||||
|
"shift": 1,
|
||||||
|
},
|
||||||
"dis-equilibrium_open_trshld": 2.0,
|
"dis-equilibrium_open_trshld": 2.0,
|
||||||
"dis-equilibrium_close_trshld": 1.0,
|
"dis-equilibrium_close_trshld": 1.0,
|
||||||
"training_minutes": 120,
|
"training_minutes": 120,
|
||||||
|
|||||||
@ -16,6 +16,10 @@
|
|||||||
"funding_per_pair": 2000.0,
|
"funding_per_pair": 2000.0,
|
||||||
# ====== Trading Parameters ======
|
# ====== Trading Parameters ======
|
||||||
"price_column": "close",
|
"price_column": "close",
|
||||||
|
"execution_price": {
|
||||||
|
"column": "vwap",
|
||||||
|
"shift": 1,
|
||||||
|
},
|
||||||
"dis-equilibrium_open_trshld": 2.0,
|
"dis-equilibrium_open_trshld": 2.0,
|
||||||
"dis-equilibrium_close_trshld": 0.5,
|
"dis-equilibrium_close_trshld": 0.5,
|
||||||
"training_minutes": 120,
|
"training_minutes": 120,
|
||||||
|
|||||||
@ -417,7 +417,7 @@ class BacktestResult:
|
|||||||
|
|
||||||
# Print pair returns with disequilibrium information
|
# Print pair returns with disequilibrium information
|
||||||
day_return = 0.0
|
day_return = 0.0
|
||||||
if self.pairs_trades_[pair]:
|
if pair in self.pairs_trades_:
|
||||||
|
|
||||||
print(f"{pair}:")
|
print(f"{pair}:")
|
||||||
pair_return = 0.0
|
pair_return = 0.0
|
||||||
|
|||||||
@ -6,6 +6,12 @@ import pandas as pd
|
|||||||
|
|
||||||
|
|
||||||
def load_sqlite_to_dataframe(db_path:str, query:str) -> pd.DataFrame:
|
def load_sqlite_to_dataframe(db_path:str, query:str) -> pd.DataFrame:
|
||||||
|
df: pd.DataFrame = pd.DataFrame()
|
||||||
|
import os
|
||||||
|
if not os.path.exists(db_path):
|
||||||
|
print(f"WARNING: database file {db_path} does not exist")
|
||||||
|
return df
|
||||||
|
|
||||||
try:
|
try:
|
||||||
conn = sqlite3.connect(db_path)
|
conn = sqlite3.connect(db_path)
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -81,6 +81,10 @@ def run_backtest(
|
|||||||
print(f"WARNING: insufficient data files: {datafiles}")
|
print(f"WARNING: insufficient data files: {datafiles}")
|
||||||
return bt_result
|
return bt_result
|
||||||
|
|
||||||
|
if not all([os.path.exists(datafile) for datafile in datafiles]):
|
||||||
|
print(f"WARNING: data file {datafiles} does not exist")
|
||||||
|
return bt_result
|
||||||
|
|
||||||
pairs_trades = []
|
pairs_trades = []
|
||||||
|
|
||||||
pairs = create_pairs(
|
pairs = create_pairs(
|
||||||
@ -138,10 +142,6 @@ def main() -> None:
|
|||||||
instruments = get_instruments(args, config)
|
instruments = get_instruments(args, config)
|
||||||
datafiles = resolve_datafiles(config, args.date_pattern, instruments)
|
datafiles = resolve_datafiles(config, args.date_pattern, instruments)
|
||||||
|
|
||||||
if not datafiles:
|
|
||||||
print("No data files found to process.")
|
|
||||||
return
|
|
||||||
|
|
||||||
days = list(set([day for day, _ in datafiles]))
|
days = list(set([day for day, _ in datafiles]))
|
||||||
print(f"Found {len(datafiles)} data files to process:")
|
print(f"Found {len(datafiles)} data files to process:")
|
||||||
for df in datafiles:
|
for df in datafiles:
|
||||||
@ -154,13 +154,18 @@ def main() -> None:
|
|||||||
|
|
||||||
# Initialize a dictionary to store all trade results
|
# Initialize a dictionary to store all trade results
|
||||||
all_results: Dict[str, Dict[str, Any]] = {}
|
all_results: Dict[str, Dict[str, Any]] = {}
|
||||||
|
is_config_stored = False
|
||||||
|
# Process each data file
|
||||||
|
price_column = config["price_column"]
|
||||||
|
|
||||||
# Store configuration in database for reference
|
for day in sorted(days):
|
||||||
if args.result_db.upper() != "NONE":
|
md_datafiles = [datafile for md_day, datafile in datafiles if md_day == day]
|
||||||
# Get list of all instruments for storage
|
if not all([os.path.exists(datafile) for datafile in md_datafiles]):
|
||||||
|
print(f"WARNING: insufficient data files: {md_datafiles}")
|
||||||
# Remove duplicates while preserving order
|
continue
|
||||||
|
print(f"\n====== Processing {day} ======")
|
||||||
|
|
||||||
|
if not is_config_stored:
|
||||||
store_config_in_database(
|
store_config_in_database(
|
||||||
db_path=args.result_db,
|
db_path=args.result_db,
|
||||||
config_file_path=args.config,
|
config_file_path=args.config,
|
||||||
@ -169,13 +174,7 @@ def main() -> None:
|
|||||||
datafiles=datafiles,
|
datafiles=datafiles,
|
||||||
instruments=instruments,
|
instruments=instruments,
|
||||||
)
|
)
|
||||||
|
is_config_stored = True
|
||||||
# Process each data file
|
|
||||||
price_column = config["price_column"]
|
|
||||||
|
|
||||||
for day in sorted(days):
|
|
||||||
md_datafiles = [datafile for md_day, datafile in datafiles if md_day == day]
|
|
||||||
print(f"\n====== Processing {day} ======")
|
|
||||||
|
|
||||||
# Process data for this file
|
# Process data for this file
|
||||||
try:
|
try:
|
||||||
@ -189,6 +188,10 @@ def main() -> None:
|
|||||||
instruments=instruments,
|
instruments=instruments,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if bt_results.trades is None or len(bt_results.trades) == 0:
|
||||||
|
print(f"No trades found for {day}")
|
||||||
|
continue
|
||||||
|
|
||||||
# Store results with day name as key
|
# Store results with day name as key
|
||||||
filename = os.path.basename(day)
|
filename = os.path.basename(day)
|
||||||
all_results[filename] = {
|
all_results[filename] = {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user