forked from QuantConnect/Lean
-
Notifications
You must be signed in to change notification settings - Fork 0
/
run_docker.sh
120 lines (102 loc) · 4.23 KB
/
run_docker.sh
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
#!/bin/bash
# QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
# Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
full_path=$(realpath $0)
current_dir=$(dirname $full_path)
default_image=quantconnect/lean:latest
default_data_dir=$current_dir/Data
default_results_dir=$current_dir
default_config_file=$current_dir/Launcher/config.json
default_python_dir=$current_dir/Algorithm.Python/
csharp_dll=$current_dir/Launcher/bin/Debug/QuantConnect.Algorithm.CSharp.dll
csharp_pdb=$current_dir/Launcher/bin/Debug/QuantConnect.Algorithm.CSharp.pdb
#If arg is a file process the key values
if [ -f "$1" ]; then
IFS="="
while read -r key value; do
eval "$key='$value'"
done < $1
#If there are in line args, process them
elif [ ! -z "$*" ]; then
for arg in "$@"; do
eval "$arg"
done
#Else query user for settings
else
read -p "Enter docker image [default: $default_image]: " image
read -p "Enter absolute path to Lean config file [default: $default_config_file]: " config_file
read -p "Enter absolute path to Data folder [default: $default_data_dir]: " data_dir
read -p "Enter absolute path to store results [default: $default_results_dir]: " results_dir
read -p "Would you like to debug C#? (Requires mono debugger attachment) [default: N]: " debugging
fi
#Have to reset IFS for cfg files to work properly
IFS=" "
if [ -z "$image" ]; then
image=$default_image
fi
if [ -z "$config_file" ]; then
config_file=$default_config_file
fi
if [ -z "$python_dir" ]; then
python_dir=$default_python_dir
fi
if [ ! -f "$config_file" ]; then
echo "Lean config file $config_file does not exist"
exit 1
fi
if [ -z "$data_dir" ]; then
data_dir=$default_data_dir
fi
if [ ! -d "$data_dir" ]; then
echo "Data directory $data_dir does not exist"
exit 1
fi
if [ -z "$results_dir" ]; then
results_dir=$default_results_dir
fi
if [ ! -d "$results_dir" ]; then
echo "Results directory $results_dir does not exist"
exit 1
fi
#First part of the docker command that is static, then we build the rest
command="docker run --rm --mount type=bind,source=$config_file,target=/Lean/Launcher/config.json,readonly \
--mount type=bind,source=$data_dir,target=/Data,readonly \
--mount type=bind,source=$results_dir,target=/Results \
--name LeanEngine \
-p 5678:5678 "
#If the csharp dll and pdb are present, mount them
if [ ! -f "$csharp_dll" ]; then
echo "Csharp file at '$csharp_dll' does not exist; no CSharp files will be mounted"
else
command+="--mount type=bind,source=$csharp_dll,target=/Lean/Launcher/bin/Debug/QuantConnect.Algorithm.CSharp.dll \
--mount type=bind,source=$csharp_pdb,target=/Lean/Launcher/bin/Debug/QuantConnect.Algorithm.CSharp.pdb "
fi
#If python algorithms are present, mount them
if [ ! -d "$python_dir" ]; then
echo "No Python Algorithm location found at '$python_dir'; no Python files will be mounted"
else
command+="--mount type=bind,source=$python_dir,target=/Lean/Algorithm.Python "
fi
#If debugging is set then set the entrypoint to run mono with a debugger server
shopt -s nocasematch
if [[ "$debugging" == "y" ]]; then
command+="-p 55555:55555 \
--entrypoint mono \
$image --debug --debugger-agent=transport=dt_socket,server=y,address=0.0.0.0:55555,suspend=y \
QuantConnect.Lean.Launcher.exe --data-folder /Data --results-destination-folder /Results --config /Lean/Launcher/config.json"
echo "Docker container starting, attach to Mono process at localhost:55555 to begin"
else
command+="$image --data-folder /Data --results-destination-folder /Results --config /Lean/Launcher/config.json"
fi
#Run built docker command; docker requires sudo privledges by default
eval sudo $command