forked from QuantaAlpha/QuantaAlpha
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathrun.sh
More file actions
executable file
·125 lines (109 loc) · 4.28 KB
/
run.sh
File metadata and controls
executable file
·125 lines (109 loc) · 4.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/bash
# QuantaAlpha main experiment runner
#
# Usage:
# ./run.sh "initial direction" # default experiment
# ./run.sh "initial direction" "suffix" # with factor library suffix
# CONFIG=configs/experiment.yaml ./run.sh "direction"
#
# Examples:
# ./run.sh "price-volume factor mining"
# ./run.sh "momentum reversal factors" "exp_momentum"
# =============================================================================
# Locate project root
# =============================================================================
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "${SCRIPT_DIR}"
# =============================================================================
# Load .env configuration
# =============================================================================
if [ -f "${SCRIPT_DIR}/.env" ]; then
set -a
source "${SCRIPT_DIR}/.env"
set +a
else
echo "Error: .env file not found"
echo "Please run: cp configs/.env.example .env"
exit 1
fi
# =============================================================================
# Activate conda environment
# =============================================================================
eval "$(conda shell.bash hook)" 2>/dev/null
conda activate "${CONDA_ENV_NAME:-quantaalpha}" 2>/dev/null
if [ $? -ne 0 ]; then
source activate "${CONDA_ENV_NAME:-quantaalpha}" 2>/dev/null
fi
if ! command -v quantaalpha &> /dev/null; then
echo "Error: quantaalpha command not found. Please install: pip install -e ."
exit 1
fi
echo "Python: $(python --version)"
echo "QuantaAlpha: $(which quantaalpha)"
echo ""
# =============================================================================
# Experiment isolation
# =============================================================================
CONFIG_PATH=${CONFIG_PATH:-"configs/experiment.yaml"}
if [ -z "${EXPERIMENT_ID}" ]; then
EXPERIMENT_ID="exp_$(date +%Y%m%d_%H%M%S)"
fi
export EXPERIMENT_ID
RESULTS_BASE="${DATA_RESULTS_DIR:-./data/results}"
if [ "${EXPERIMENT_ID}" != "shared" ]; then
export WORKSPACE_PATH="${RESULTS_BASE}/workspace_${EXPERIMENT_ID}"
export PICKLE_CACHE_FOLDER_PATH_STR="${RESULTS_BASE}/pickle_cache_${EXPERIMENT_ID}"
mkdir -p "${WORKSPACE_PATH}" "${PICKLE_CACHE_FOLDER_PATH_STR}"
echo "Experiment ID: ${EXPERIMENT_ID}"
echo "Workspace: ${WORKSPACE_PATH}"
fi
# =============================================================================
# Validate Qlib data
# =============================================================================
QLIB_DATA="${QLIB_DATA_DIR:-}"
if [ -z "${QLIB_DATA}" ]; then
echo "Error: QLIB_DATA_DIR not set. Please set Qlib data path in .env"
echo "Example: QLIB_DATA_DIR=/path/to/qlib/cn_data"
exit 1
fi
if [ ! -d "${QLIB_DATA}" ]; then
echo "Error: Qlib data directory does not exist: ${QLIB_DATA}"
echo "Please check QLIB_DATA_DIR path in .env"
exit 1
fi
# Validate required subdirectories
for subdir in calendars features instruments; do
if [ ! -d "${QLIB_DATA}/${subdir}" ]; then
echo "Error: Qlib data directory missing ${subdir}/: ${QLIB_DATA}"
echo "Valid Qlib data dir must contain calendars/, features/, instruments/"
exit 1
fi
done
echo "Qlib data validated: ${QLIB_DATA}"
# Ensure Qlib data symlink
if [ -n "${QLIB_DATA}" ]; then
QLIB_SYMLINK_DIR="$HOME/.qlib/qlib_data"
if [ ! -L "${QLIB_SYMLINK_DIR}/cn_data" ] || [ "$(readlink -f ${QLIB_SYMLINK_DIR}/cn_data 2>/dev/null)" != "$(readlink -f ${QLIB_DATA})" ]; then
mkdir -p "${QLIB_SYMLINK_DIR}"
ln -sfn "${QLIB_DATA}" "${QLIB_SYMLINK_DIR}/cn_data"
fi
fi
# =============================================================================
# Parse arguments and run
# =============================================================================
DIRECTION="$1"
LIBRARY_SUFFIX="$2"
if [ -n "${LIBRARY_SUFFIX}" ]; then
export FACTOR_LIBRARY_SUFFIX="${LIBRARY_SUFFIX}"
fi
echo ""
echo "Starting experiment..."
echo "Config: ${CONFIG_PATH}"
echo "Data: ${QLIB_DATA}"
echo "Results: ${RESULTS_BASE}"
echo "----------------------------------------"
if [ -n "${STEP_N}" ]; then
quantaalpha mine --direction "${DIRECTION}" --step_n "${STEP_N}" --config_path "${CONFIG_PATH}"
else
quantaalpha mine --direction "${DIRECTION}" --config_path "${CONFIG_PATH}"
fi