qc 0.5.6 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +22 -3
- data/automator/open-qc-results.workflow/Contents/Info.plist +8 -0
- data/automator/open-qc-results.workflow/Contents/QuickLook/Preview.png +0 -0
- data/automator/open-qc-results.workflow/Contents/document.wflow +435 -0
- data/lib/qc/command_runner.rb +33 -6
- data/lib/qc/console.rb +18 -14
- data/lib/qc/quant_connect_proxy.rb +3 -2
- data/lib/qc/version.rb +1 -1
- metadata +5 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5c22c9b2e8145ff0e939d3214848341e0782b3b2
         | 
| 4 | 
            +
              data.tar.gz: 17b4c70a3a44993b71406d0994f45607734e70f4
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 15e0d3601726a5df294eda0a402eec49e4667807e095dd03cfdb54050ed5c17097180dc6b3a90505c974372fd4ed85e32f0b2254c35c1b44f974f81446b6ce1a
         | 
| 7 | 
            +
              data.tar.gz: c741d944839ae9b3f8d8f6abf86e7c7cc01d7ed9b79d9b6244b5703c142d90a09072d9aa64614111ee01a6cee3e02794f371353b72b6cacb35855e0201fc39fd
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -20,7 +20,20 @@ gem install qc | |
| 20 20 |  | 
| 21 21 | 
             
            ## Usage
         | 
| 22 22 |  | 
| 23 | 
            +
            ### Default (no command provided)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            When no command is provided, it will push your changes to QuantConnect, compile the project and run a backtest.
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            ```shell
         | 
| 28 | 
            +
            qc
         | 
| 29 | 
            +
            qc --open # To open the results in QuantConnect
         | 
| 23 30 | 
             
            ```
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            This is equivalent to executing `qc push`, `qc compile` and `qc backtest` in sequence.
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            ### Single commands 
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            ```shell
         | 
| 24 37 | 
             
            qc [command]
         | 
| 25 38 | 
             
            ```
         | 
| 26 39 |  | 
| @@ -34,12 +47,18 @@ The supported commands are: | |
| 34 47 | 
             
            | `qc push` | Send your local files to QuantConnect. It will only send the files that changed since the last time you run the command |
         | 
| 35 48 | 
             
            | `qc compile` | Compile your project in QuantConnect |
         | 
| 36 49 | 
             
            | `qc backtest` | Run the backtest of your algorithm in QuantConnect |
         | 
| 50 | 
            +
            | `qc open` | Open the latest results in QuantConnect (only MacOS)|
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            ### Opening the results in QuantConnect (only MacOS)
         | 
| 37 53 |  | 
| 38 | 
            -
             | 
| 54 | 
            +
            If you pass `--open` when running a backtest, it will open the results in QuantConnect while the backtest is running:
         | 
| 39 55 |  | 
| 40 | 
            -
             | 
| 56 | 
            +
            ```shell
         | 
| 57 | 
            +
            qc --open
         | 
| 58 | 
            +
            qc backtest --open
         | 
| 59 | 
            +
            ```
         | 
| 41 60 |  | 
| 42 | 
            -
             | 
| 61 | 
            +
            **This option only works on MacOS**. quantconnect.com currently doesn't offer an URL endpoint to open backtest results. In MacOS, it will use an Automator workflow that will open the project and show its latest results by simulating a click on the corresponding option. See [this discussion](https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/lean-engine/7AiEl3RVv38/PGnFQzBXAQAJ). 
         | 
| 43 62 |  | 
| 44 63 | 
             
            ## Development
         | 
| 45 64 |  | 
| Binary file | 
| @@ -0,0 +1,435 @@ | |
| 1 | 
            +
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 2 | 
            +
            <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
         | 
| 3 | 
            +
            <plist version="1.0">
         | 
| 4 | 
            +
            <dict>
         | 
| 5 | 
            +
            	<key>AMApplicationBuild</key>
         | 
| 6 | 
            +
            	<string>444.1</string>
         | 
| 7 | 
            +
            	<key>AMApplicationVersion</key>
         | 
| 8 | 
            +
            	<string>2.8</string>
         | 
| 9 | 
            +
            	<key>AMDocumentVersion</key>
         | 
| 10 | 
            +
            	<string>2</string>
         | 
| 11 | 
            +
            	<key>actions</key>
         | 
| 12 | 
            +
            	<array>
         | 
| 13 | 
            +
            		<dict>
         | 
| 14 | 
            +
            			<key>action</key>
         | 
| 15 | 
            +
            			<dict>
         | 
| 16 | 
            +
            				<key>AMAccepts</key>
         | 
| 17 | 
            +
            				<dict>
         | 
| 18 | 
            +
            					<key>Container</key>
         | 
| 19 | 
            +
            					<string>List</string>
         | 
| 20 | 
            +
            					<key>Optional</key>
         | 
| 21 | 
            +
            					<true/>
         | 
| 22 | 
            +
            					<key>Types</key>
         | 
| 23 | 
            +
            					<array>
         | 
| 24 | 
            +
            						<string>com.apple.cocoa.string</string>
         | 
| 25 | 
            +
            					</array>
         | 
| 26 | 
            +
            				</dict>
         | 
| 27 | 
            +
            				<key>AMActionVersion</key>
         | 
| 28 | 
            +
            				<string>2.0.3</string>
         | 
| 29 | 
            +
            				<key>AMApplication</key>
         | 
| 30 | 
            +
            				<array>
         | 
| 31 | 
            +
            					<string>Automator</string>
         | 
| 32 | 
            +
            				</array>
         | 
| 33 | 
            +
            				<key>AMParameterProperties</key>
         | 
| 34 | 
            +
            				<dict>
         | 
| 35 | 
            +
            					<key>COMMAND_STRING</key>
         | 
| 36 | 
            +
            					<dict/>
         | 
| 37 | 
            +
            					<key>CheckedForUserDefaultShell</key>
         | 
| 38 | 
            +
            					<dict/>
         | 
| 39 | 
            +
            					<key>inputMethod</key>
         | 
| 40 | 
            +
            					<dict/>
         | 
| 41 | 
            +
            					<key>shell</key>
         | 
| 42 | 
            +
            					<dict/>
         | 
| 43 | 
            +
            					<key>source</key>
         | 
| 44 | 
            +
            					<dict/>
         | 
| 45 | 
            +
            				</dict>
         | 
| 46 | 
            +
            				<key>AMProvides</key>
         | 
| 47 | 
            +
            				<dict>
         | 
| 48 | 
            +
            					<key>Container</key>
         | 
| 49 | 
            +
            					<string>List</string>
         | 
| 50 | 
            +
            					<key>Types</key>
         | 
| 51 | 
            +
            					<array>
         | 
| 52 | 
            +
            						<string>com.apple.cocoa.string</string>
         | 
| 53 | 
            +
            					</array>
         | 
| 54 | 
            +
            				</dict>
         | 
| 55 | 
            +
            				<key>ActionBundlePath</key>
         | 
| 56 | 
            +
            				<string>/System/Library/Automator/Run Shell Script.action</string>
         | 
| 57 | 
            +
            				<key>ActionName</key>
         | 
| 58 | 
            +
            				<string>Run Shell Script</string>
         | 
| 59 | 
            +
            				<key>ActionParameters</key>
         | 
| 60 | 
            +
            				<dict>
         | 
| 61 | 
            +
            					<key>COMMAND_STRING</key>
         | 
| 62 | 
            +
            					<string>url = "https://www.quantconnect.com/terminal/#open/#{ARGV[0]}"
         | 
| 63 | 
            +
            system "open -a Safari '#{url}'"</string>
         | 
| 64 | 
            +
            					<key>CheckedForUserDefaultShell</key>
         | 
| 65 | 
            +
            					<true/>
         | 
| 66 | 
            +
            					<key>inputMethod</key>
         | 
| 67 | 
            +
            					<integer>1</integer>
         | 
| 68 | 
            +
            					<key>shell</key>
         | 
| 69 | 
            +
            					<string>/usr/bin/ruby</string>
         | 
| 70 | 
            +
            					<key>source</key>
         | 
| 71 | 
            +
            					<string></string>
         | 
| 72 | 
            +
            				</dict>
         | 
| 73 | 
            +
            				<key>BundleIdentifier</key>
         | 
| 74 | 
            +
            				<string>com.apple.RunShellScript</string>
         | 
| 75 | 
            +
            				<key>CFBundleVersion</key>
         | 
| 76 | 
            +
            				<string>2.0.3</string>
         | 
| 77 | 
            +
            				<key>CanShowSelectedItemsWhenRun</key>
         | 
| 78 | 
            +
            				<false/>
         | 
| 79 | 
            +
            				<key>CanShowWhenRun</key>
         | 
| 80 | 
            +
            				<true/>
         | 
| 81 | 
            +
            				<key>Category</key>
         | 
| 82 | 
            +
            				<array>
         | 
| 83 | 
            +
            					<string>AMCategoryUtilities</string>
         | 
| 84 | 
            +
            				</array>
         | 
| 85 | 
            +
            				<key>Class Name</key>
         | 
| 86 | 
            +
            				<string>RunShellScriptAction</string>
         | 
| 87 | 
            +
            				<key>InputUUID</key>
         | 
| 88 | 
            +
            				<string>803207A7-9E90-4479-8038-63F8CF7B7B10</string>
         | 
| 89 | 
            +
            				<key>Keywords</key>
         | 
| 90 | 
            +
            				<array>
         | 
| 91 | 
            +
            					<string>Shell</string>
         | 
| 92 | 
            +
            					<string>Script</string>
         | 
| 93 | 
            +
            					<string>Command</string>
         | 
| 94 | 
            +
            					<string>Run</string>
         | 
| 95 | 
            +
            					<string>Unix</string>
         | 
| 96 | 
            +
            				</array>
         | 
| 97 | 
            +
            				<key>OutputUUID</key>
         | 
| 98 | 
            +
            				<string>4E28DFAE-BD6B-4084-833B-27E1A8669878</string>
         | 
| 99 | 
            +
            				<key>UUID</key>
         | 
| 100 | 
            +
            				<string>8EFDAC89-B363-45F0-9074-E09474C526E7</string>
         | 
| 101 | 
            +
            				<key>UnlocalizedApplications</key>
         | 
| 102 | 
            +
            				<array>
         | 
| 103 | 
            +
            					<string>Automator</string>
         | 
| 104 | 
            +
            				</array>
         | 
| 105 | 
            +
            				<key>arguments</key>
         | 
| 106 | 
            +
            				<dict>
         | 
| 107 | 
            +
            					<key>0</key>
         | 
| 108 | 
            +
            					<dict>
         | 
| 109 | 
            +
            						<key>default value</key>
         | 
| 110 | 
            +
            						<integer>0</integer>
         | 
| 111 | 
            +
            						<key>name</key>
         | 
| 112 | 
            +
            						<string>inputMethod</string>
         | 
| 113 | 
            +
            						<key>required</key>
         | 
| 114 | 
            +
            						<string>0</string>
         | 
| 115 | 
            +
            						<key>type</key>
         | 
| 116 | 
            +
            						<string>0</string>
         | 
| 117 | 
            +
            						<key>uuid</key>
         | 
| 118 | 
            +
            						<string>0</string>
         | 
| 119 | 
            +
            					</dict>
         | 
| 120 | 
            +
            					<key>1</key>
         | 
| 121 | 
            +
            					<dict>
         | 
| 122 | 
            +
            						<key>default value</key>
         | 
| 123 | 
            +
            						<string></string>
         | 
| 124 | 
            +
            						<key>name</key>
         | 
| 125 | 
            +
            						<string>source</string>
         | 
| 126 | 
            +
            						<key>required</key>
         | 
| 127 | 
            +
            						<string>0</string>
         | 
| 128 | 
            +
            						<key>type</key>
         | 
| 129 | 
            +
            						<string>0</string>
         | 
| 130 | 
            +
            						<key>uuid</key>
         | 
| 131 | 
            +
            						<string>1</string>
         | 
| 132 | 
            +
            					</dict>
         | 
| 133 | 
            +
            					<key>2</key>
         | 
| 134 | 
            +
            					<dict>
         | 
| 135 | 
            +
            						<key>default value</key>
         | 
| 136 | 
            +
            						<false/>
         | 
| 137 | 
            +
            						<key>name</key>
         | 
| 138 | 
            +
            						<string>CheckedForUserDefaultShell</string>
         | 
| 139 | 
            +
            						<key>required</key>
         | 
| 140 | 
            +
            						<string>0</string>
         | 
| 141 | 
            +
            						<key>type</key>
         | 
| 142 | 
            +
            						<string>0</string>
         | 
| 143 | 
            +
            						<key>uuid</key>
         | 
| 144 | 
            +
            						<string>2</string>
         | 
| 145 | 
            +
            					</dict>
         | 
| 146 | 
            +
            					<key>3</key>
         | 
| 147 | 
            +
            					<dict>
         | 
| 148 | 
            +
            						<key>default value</key>
         | 
| 149 | 
            +
            						<string></string>
         | 
| 150 | 
            +
            						<key>name</key>
         | 
| 151 | 
            +
            						<string>COMMAND_STRING</string>
         | 
| 152 | 
            +
            						<key>required</key>
         | 
| 153 | 
            +
            						<string>0</string>
         | 
| 154 | 
            +
            						<key>type</key>
         | 
| 155 | 
            +
            						<string>0</string>
         | 
| 156 | 
            +
            						<key>uuid</key>
         | 
| 157 | 
            +
            						<string>3</string>
         | 
| 158 | 
            +
            					</dict>
         | 
| 159 | 
            +
            					<key>4</key>
         | 
| 160 | 
            +
            					<dict>
         | 
| 161 | 
            +
            						<key>default value</key>
         | 
| 162 | 
            +
            						<string>/bin/sh</string>
         | 
| 163 | 
            +
            						<key>name</key>
         | 
| 164 | 
            +
            						<string>shell</string>
         | 
| 165 | 
            +
            						<key>required</key>
         | 
| 166 | 
            +
            						<string>0</string>
         | 
| 167 | 
            +
            						<key>type</key>
         | 
| 168 | 
            +
            						<string>0</string>
         | 
| 169 | 
            +
            						<key>uuid</key>
         | 
| 170 | 
            +
            						<string>4</string>
         | 
| 171 | 
            +
            					</dict>
         | 
| 172 | 
            +
            				</dict>
         | 
| 173 | 
            +
            				<key>isViewVisible</key>
         | 
| 174 | 
            +
            				<true/>
         | 
| 175 | 
            +
            				<key>location</key>
         | 
| 176 | 
            +
            				<string>1089.000000:185.000000</string>
         | 
| 177 | 
            +
            				<key>nibPath</key>
         | 
| 178 | 
            +
            				<string>/System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib</string>
         | 
| 179 | 
            +
            			</dict>
         | 
| 180 | 
            +
            			<key>isViewVisible</key>
         | 
| 181 | 
            +
            			<true/>
         | 
| 182 | 
            +
            		</dict>
         | 
| 183 | 
            +
            		<dict>
         | 
| 184 | 
            +
            			<key>action</key>
         | 
| 185 | 
            +
            			<dict>
         | 
| 186 | 
            +
            				<key>AMAccepts</key>
         | 
| 187 | 
            +
            				<dict>
         | 
| 188 | 
            +
            					<key>Container</key>
         | 
| 189 | 
            +
            					<string>List</string>
         | 
| 190 | 
            +
            					<key>Optional</key>
         | 
| 191 | 
            +
            					<true/>
         | 
| 192 | 
            +
            					<key>Types</key>
         | 
| 193 | 
            +
            					<array/>
         | 
| 194 | 
            +
            				</dict>
         | 
| 195 | 
            +
            				<key>AMActionVersion</key>
         | 
| 196 | 
            +
            				<string>2.0.2</string>
         | 
| 197 | 
            +
            				<key>AMApplication</key>
         | 
| 198 | 
            +
            				<array>
         | 
| 199 | 
            +
            					<string>Automator</string>
         | 
| 200 | 
            +
            				</array>
         | 
| 201 | 
            +
            				<key>AMParameterProperties</key>
         | 
| 202 | 
            +
            				<dict>
         | 
| 203 | 
            +
            					<key>pauseDuration</key>
         | 
| 204 | 
            +
            					<dict/>
         | 
| 205 | 
            +
            					<key>pauseUnit</key>
         | 
| 206 | 
            +
            					<dict/>
         | 
| 207 | 
            +
            				</dict>
         | 
| 208 | 
            +
            				<key>AMProvides</key>
         | 
| 209 | 
            +
            				<dict>
         | 
| 210 | 
            +
            					<key>Container</key>
         | 
| 211 | 
            +
            					<string>List</string>
         | 
| 212 | 
            +
            					<key>Types</key>
         | 
| 213 | 
            +
            					<array/>
         | 
| 214 | 
            +
            				</dict>
         | 
| 215 | 
            +
            				<key>ActionBundlePath</key>
         | 
| 216 | 
            +
            				<string>/System/Library/Automator/Pause.action</string>
         | 
| 217 | 
            +
            				<key>ActionName</key>
         | 
| 218 | 
            +
            				<string>Pause</string>
         | 
| 219 | 
            +
            				<key>ActionParameters</key>
         | 
| 220 | 
            +
            				<dict>
         | 
| 221 | 
            +
            					<key>pauseDuration</key>
         | 
| 222 | 
            +
            					<integer>6</integer>
         | 
| 223 | 
            +
            					<key>pauseUnit</key>
         | 
| 224 | 
            +
            					<integer>0</integer>
         | 
| 225 | 
            +
            				</dict>
         | 
| 226 | 
            +
            				<key>BundleIdentifier</key>
         | 
| 227 | 
            +
            				<string>com.apple.Automator.Pause</string>
         | 
| 228 | 
            +
            				<key>CFBundleVersion</key>
         | 
| 229 | 
            +
            				<string>2.0.2</string>
         | 
| 230 | 
            +
            				<key>CanShowSelectedItemsWhenRun</key>
         | 
| 231 | 
            +
            				<true/>
         | 
| 232 | 
            +
            				<key>CanShowWhenRun</key>
         | 
| 233 | 
            +
            				<false/>
         | 
| 234 | 
            +
            				<key>Category</key>
         | 
| 235 | 
            +
            				<array>
         | 
| 236 | 
            +
            					<string>AMCategoryUtilities</string>
         | 
| 237 | 
            +
            				</array>
         | 
| 238 | 
            +
            				<key>Class Name</key>
         | 
| 239 | 
            +
            				<string>PauseAction</string>
         | 
| 240 | 
            +
            				<key>InputUUID</key>
         | 
| 241 | 
            +
            				<string>13F8393F-3AE0-485C-BC50-9947DD89D9A6</string>
         | 
| 242 | 
            +
            				<key>Keywords</key>
         | 
| 243 | 
            +
            				<array>
         | 
| 244 | 
            +
            					<string>Time</string>
         | 
| 245 | 
            +
            					<string>Wait</string>
         | 
| 246 | 
            +
            				</array>
         | 
| 247 | 
            +
            				<key>OutputUUID</key>
         | 
| 248 | 
            +
            				<string>6B821AB3-A83C-4993-AA7A-458495D3BD1C</string>
         | 
| 249 | 
            +
            				<key>UUID</key>
         | 
| 250 | 
            +
            				<string>37995717-CB54-44AC-BBC1-688255F6E471</string>
         | 
| 251 | 
            +
            				<key>UnlocalizedApplications</key>
         | 
| 252 | 
            +
            				<array>
         | 
| 253 | 
            +
            					<string>Automator</string>
         | 
| 254 | 
            +
            				</array>
         | 
| 255 | 
            +
            				<key>arguments</key>
         | 
| 256 | 
            +
            				<dict>
         | 
| 257 | 
            +
            					<key>0</key>
         | 
| 258 | 
            +
            					<dict>
         | 
| 259 | 
            +
            						<key>default value</key>
         | 
| 260 | 
            +
            						<integer>0</integer>
         | 
| 261 | 
            +
            						<key>name</key>
         | 
| 262 | 
            +
            						<string>pauseUnit</string>
         | 
| 263 | 
            +
            						<key>required</key>
         | 
| 264 | 
            +
            						<string>0</string>
         | 
| 265 | 
            +
            						<key>type</key>
         | 
| 266 | 
            +
            						<string>0</string>
         | 
| 267 | 
            +
            						<key>uuid</key>
         | 
| 268 | 
            +
            						<string>0</string>
         | 
| 269 | 
            +
            					</dict>
         | 
| 270 | 
            +
            					<key>1</key>
         | 
| 271 | 
            +
            					<dict>
         | 
| 272 | 
            +
            						<key>default value</key>
         | 
| 273 | 
            +
            						<integer>0</integer>
         | 
| 274 | 
            +
            						<key>name</key>
         | 
| 275 | 
            +
            						<string>pauseDuration</string>
         | 
| 276 | 
            +
            						<key>required</key>
         | 
| 277 | 
            +
            						<string>0</string>
         | 
| 278 | 
            +
            						<key>type</key>
         | 
| 279 | 
            +
            						<string>0</string>
         | 
| 280 | 
            +
            						<key>uuid</key>
         | 
| 281 | 
            +
            						<string>1</string>
         | 
| 282 | 
            +
            					</dict>
         | 
| 283 | 
            +
            				</dict>
         | 
| 284 | 
            +
            				<key>isViewVisible</key>
         | 
| 285 | 
            +
            				<true/>
         | 
| 286 | 
            +
            				<key>location</key>
         | 
| 287 | 
            +
            				<string>1089.000000:290.000000</string>
         | 
| 288 | 
            +
            				<key>nibPath</key>
         | 
| 289 | 
            +
            				<string>/System/Library/Automator/Pause.action/Contents/Resources/Base.lproj/main.nib</string>
         | 
| 290 | 
            +
            			</dict>
         | 
| 291 | 
            +
            			<key>isViewVisible</key>
         | 
| 292 | 
            +
            			<true/>
         | 
| 293 | 
            +
            		</dict>
         | 
| 294 | 
            +
            		<dict>
         | 
| 295 | 
            +
            			<key>action</key>
         | 
| 296 | 
            +
            			<dict>
         | 
| 297 | 
            +
            				<key>AMAccepts</key>
         | 
| 298 | 
            +
            				<dict>
         | 
| 299 | 
            +
            					<key>Container</key>
         | 
| 300 | 
            +
            					<string>List</string>
         | 
| 301 | 
            +
            					<key>Optional</key>
         | 
| 302 | 
            +
            					<true/>
         | 
| 303 | 
            +
            					<key>Types</key>
         | 
| 304 | 
            +
            					<array>
         | 
| 305 | 
            +
            						<string>com.apple.applescript.object</string>
         | 
| 306 | 
            +
            					</array>
         | 
| 307 | 
            +
            				</dict>
         | 
| 308 | 
            +
            				<key>AMActionVersion</key>
         | 
| 309 | 
            +
            				<string>1.0.2</string>
         | 
| 310 | 
            +
            				<key>AMApplication</key>
         | 
| 311 | 
            +
            				<array>
         | 
| 312 | 
            +
            					<string>Automator</string>
         | 
| 313 | 
            +
            				</array>
         | 
| 314 | 
            +
            				<key>AMParameterProperties</key>
         | 
| 315 | 
            +
            				<dict>
         | 
| 316 | 
            +
            					<key>source</key>
         | 
| 317 | 
            +
            					<dict/>
         | 
| 318 | 
            +
            				</dict>
         | 
| 319 | 
            +
            				<key>AMProvides</key>
         | 
| 320 | 
            +
            				<dict>
         | 
| 321 | 
            +
            					<key>Container</key>
         | 
| 322 | 
            +
            					<string>List</string>
         | 
| 323 | 
            +
            					<key>Types</key>
         | 
| 324 | 
            +
            					<array>
         | 
| 325 | 
            +
            						<string>com.apple.applescript.object</string>
         | 
| 326 | 
            +
            					</array>
         | 
| 327 | 
            +
            				</dict>
         | 
| 328 | 
            +
            				<key>ActionBundlePath</key>
         | 
| 329 | 
            +
            				<string>/System/Library/Automator/Run AppleScript.action</string>
         | 
| 330 | 
            +
            				<key>ActionName</key>
         | 
| 331 | 
            +
            				<string>Run AppleScript</string>
         | 
| 332 | 
            +
            				<key>ActionParameters</key>
         | 
| 333 | 
            +
            				<dict>
         | 
| 334 | 
            +
            					<key>source</key>
         | 
| 335 | 
            +
            					<string>tell application "Safari"
         | 
| 336 | 
            +
            	do JavaScript "$('.algorithm-menu-row:first').click()" in document 1
         | 
| 337 | 
            +
            end tell</string>
         | 
| 338 | 
            +
            				</dict>
         | 
| 339 | 
            +
            				<key>BundleIdentifier</key>
         | 
| 340 | 
            +
            				<string>com.apple.Automator.RunScript</string>
         | 
| 341 | 
            +
            				<key>CFBundleVersion</key>
         | 
| 342 | 
            +
            				<string>1.0.2</string>
         | 
| 343 | 
            +
            				<key>CanShowSelectedItemsWhenRun</key>
         | 
| 344 | 
            +
            				<false/>
         | 
| 345 | 
            +
            				<key>CanShowWhenRun</key>
         | 
| 346 | 
            +
            				<true/>
         | 
| 347 | 
            +
            				<key>Category</key>
         | 
| 348 | 
            +
            				<array>
         | 
| 349 | 
            +
            					<string>AMCategoryUtilities</string>
         | 
| 350 | 
            +
            				</array>
         | 
| 351 | 
            +
            				<key>Class Name</key>
         | 
| 352 | 
            +
            				<string>RunScriptAction</string>
         | 
| 353 | 
            +
            				<key>InputUUID</key>
         | 
| 354 | 
            +
            				<string>4052A4D4-F223-4FB2-96DE-291ADC6AB13F</string>
         | 
| 355 | 
            +
            				<key>Keywords</key>
         | 
| 356 | 
            +
            				<array>
         | 
| 357 | 
            +
            					<string>Run</string>
         | 
| 358 | 
            +
            				</array>
         | 
| 359 | 
            +
            				<key>OutputUUID</key>
         | 
| 360 | 
            +
            				<string>38B7583B-A6D8-4665-84A6-776F0AB2202A</string>
         | 
| 361 | 
            +
            				<key>UUID</key>
         | 
| 362 | 
            +
            				<string>AE4AD43D-277C-4949-88AC-D594E6A469C1</string>
         | 
| 363 | 
            +
            				<key>UnlocalizedApplications</key>
         | 
| 364 | 
            +
            				<array>
         | 
| 365 | 
            +
            					<string>Automator</string>
         | 
| 366 | 
            +
            				</array>
         | 
| 367 | 
            +
            				<key>arguments</key>
         | 
| 368 | 
            +
            				<dict>
         | 
| 369 | 
            +
            					<key>0</key>
         | 
| 370 | 
            +
            					<dict>
         | 
| 371 | 
            +
            						<key>default value</key>
         | 
| 372 | 
            +
            						<string>on run {input, parameters}
         | 
| 373 | 
            +
            	
         | 
| 374 | 
            +
            	(* Your script goes here *)
         | 
| 375 | 
            +
            	
         | 
| 376 | 
            +
            	return input
         | 
| 377 | 
            +
            end run</string>
         | 
| 378 | 
            +
            						<key>name</key>
         | 
| 379 | 
            +
            						<string>source</string>
         | 
| 380 | 
            +
            						<key>required</key>
         | 
| 381 | 
            +
            						<string>0</string>
         | 
| 382 | 
            +
            						<key>type</key>
         | 
| 383 | 
            +
            						<string>0</string>
         | 
| 384 | 
            +
            						<key>uuid</key>
         | 
| 385 | 
            +
            						<string>0</string>
         | 
| 386 | 
            +
            					</dict>
         | 
| 387 | 
            +
            				</dict>
         | 
| 388 | 
            +
            				<key>isViewVisible</key>
         | 
| 389 | 
            +
            				<true/>
         | 
| 390 | 
            +
            				<key>location</key>
         | 
| 391 | 
            +
            				<string>1089.000000:536.000000</string>
         | 
| 392 | 
            +
            				<key>nibPath</key>
         | 
| 393 | 
            +
            				<string>/System/Library/Automator/Run AppleScript.action/Contents/Resources/Base.lproj/main.nib</string>
         | 
| 394 | 
            +
            			</dict>
         | 
| 395 | 
            +
            			<key>isViewVisible</key>
         | 
| 396 | 
            +
            			<true/>
         | 
| 397 | 
            +
            		</dict>
         | 
| 398 | 
            +
            	</array>
         | 
| 399 | 
            +
            	<key>connectors</key>
         | 
| 400 | 
            +
            	<dict>
         | 
| 401 | 
            +
            		<key>9CB01A8F-420B-4B46-BE6C-FC0DFBBC4554</key>
         | 
| 402 | 
            +
            		<dict>
         | 
| 403 | 
            +
            			<key>from</key>
         | 
| 404 | 
            +
            			<string>8EFDAC89-B363-45F0-9074-E09474C526E7 - 8EFDAC89-B363-45F0-9074-E09474C526E7</string>
         | 
| 405 | 
            +
            			<key>to</key>
         | 
| 406 | 
            +
            			<string>37995717-CB54-44AC-BBC1-688255F6E471 - 37995717-CB54-44AC-BBC1-688255F6E471</string>
         | 
| 407 | 
            +
            		</dict>
         | 
| 408 | 
            +
            		<key>CF91E606-48EE-4B06-9063-07F6EF82AEE4</key>
         | 
| 409 | 
            +
            		<dict>
         | 
| 410 | 
            +
            			<key>from</key>
         | 
| 411 | 
            +
            			<string>37995717-CB54-44AC-BBC1-688255F6E471 - 37995717-CB54-44AC-BBC1-688255F6E471</string>
         | 
| 412 | 
            +
            			<key>to</key>
         | 
| 413 | 
            +
            			<string>AE4AD43D-277C-4949-88AC-D594E6A469C1 - AE4AD43D-277C-4949-88AC-D594E6A469C1</string>
         | 
| 414 | 
            +
            		</dict>
         | 
| 415 | 
            +
            	</dict>
         | 
| 416 | 
            +
            	<key>variables</key>
         | 
| 417 | 
            +
            	<array>
         | 
| 418 | 
            +
            		<dict>
         | 
| 419 | 
            +
            			<key>UUID</key>
         | 
| 420 | 
            +
            			<string>444BF03B-11E2-45A9-BB12-8F841BFAB582</string>
         | 
| 421 | 
            +
            			<key>identifier</key>
         | 
| 422 | 
            +
            			<string>com.apple.Automator.Variable.Text</string>
         | 
| 423 | 
            +
            			<key>name</key>
         | 
| 424 | 
            +
            			<string>Text</string>
         | 
| 425 | 
            +
            			<key>value</key>
         | 
| 426 | 
            +
            			<string>Text</string>
         | 
| 427 | 
            +
            		</dict>
         | 
| 428 | 
            +
            	</array>
         | 
| 429 | 
            +
            	<key>workflowMetaData</key>
         | 
| 430 | 
            +
            	<dict>
         | 
| 431 | 
            +
            		<key>workflowTypeIdentifier</key>
         | 
| 432 | 
            +
            		<string>com.apple.Automator.workflow</string>
         | 
| 433 | 
            +
            	</dict>
         | 
| 434 | 
            +
            </dict>
         | 
| 435 | 
            +
            </plist>
         | 
    
        data/lib/qc/command_runner.rb
    CHANGED
    
    | @@ -2,16 +2,17 @@ module Qc | |
| 2 2 | 
             
              class CommandRunner
         | 
| 3 3 | 
             
                DEFAULT_FILE_EXTENSIONS = 'cs,py'
         | 
| 4 4 |  | 
| 5 | 
            -
                SUPPORTED_COMMANDS =%i(login logout init push compile backtest)
         | 
| 5 | 
            +
                SUPPORTED_COMMANDS =%i(login logout init push compile backtest open)
         | 
| 6 6 | 
             
                COMPILE_POLLING_DELAY_IN_SECONDS = 2
         | 
| 7 7 | 
             
                BACKTEST_DELAY_IN_SECONDS = 3
         | 
| 8 8 |  | 
| 9 | 
            -
                attr_reader :quant_connect_proxy
         | 
| 9 | 
            +
                attr_reader :quant_connect_proxy, :options
         | 
| 10 10 | 
             
                attr_accessor :project_settings
         | 
| 11 11 |  | 
| 12 | 
            -
                def initialize(quant_connect_proxy)
         | 
| 12 | 
            +
                def initialize(quant_connect_proxy, options = OpenStruct.new)
         | 
| 13 13 | 
             
                  @quant_connect_proxy = quant_connect_proxy
         | 
| 14 14 | 
             
                  @project_settings = read_project_settings
         | 
| 15 | 
            +
                  @options = options
         | 
| 15 16 | 
             
                end
         | 
| 16 17 |  | 
| 17 18 | 
             
                def run(command)
         | 
| @@ -102,7 +103,7 @@ module Qc | |
| 102 103 | 
             
                end
         | 
| 103 104 |  | 
| 104 105 | 
             
                def run_push
         | 
| 105 | 
            -
                  show_title | 
| 106 | 
            +
                  show_title 'Push files'
         | 
| 106 107 |  | 
| 107 108 | 
             
                  return false unless validate_initialized_project!
         | 
| 108 109 |  | 
| @@ -112,7 +113,7 @@ module Qc | |
| 112 113 | 
             
                end
         | 
| 113 114 |  | 
| 114 115 | 
             
                def run_compile
         | 
| 115 | 
            -
                  show_title | 
| 116 | 
            +
                  show_title 'Compile'
         | 
| 116 117 | 
             
                  return false unless validate_initialized_project!
         | 
| 117 118 |  | 
| 118 119 | 
             
                  compile = quant_connect_proxy.create_compile project_settings.project_id
         | 
| @@ -134,7 +135,7 @@ module Qc | |
| 134 135 | 
             
                end
         | 
| 135 136 |  | 
| 136 137 | 
             
                def run_backtest
         | 
| 137 | 
            -
                  show_title | 
| 138 | 
            +
                  show_title 'Run backtest'
         | 
| 138 139 | 
             
                  return false unless validate_initialized_project!
         | 
| 139 140 |  | 
| 140 141 | 
             
                  unless project_settings.last_compile_id
         | 
| @@ -145,6 +146,21 @@ module Qc | |
| 145 146 | 
             
                  do_run_backtest
         | 
| 146 147 | 
             
                end
         | 
| 147 148 |  | 
| 149 | 
            +
                def run_open
         | 
| 150 | 
            +
                  show_title 'Open backtest results'
         | 
| 151 | 
            +
                  return open_results_in_quant_connect
         | 
| 152 | 
            +
                end
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                def open_results_in_quant_connect
         | 
| 155 | 
            +
                  return false unless validate_initialized_project!
         | 
| 156 | 
            +
                  return false unless validate_on_mac!
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                  open_workflow_file = ::File.expand_path ::File.join(__dir__, '..', '..', 'automator', 'open-qc-results.workflow')
         | 
| 159 | 
            +
                  open_command = "automator -i #{project_settings.project_id} #{open_workflow_file}"
         | 
| 160 | 
            +
                  puts "Opening backtest results for project #{project_settings.project_id}"
         | 
| 161 | 
            +
                  system open_command
         | 
| 162 | 
            +
                end
         | 
| 163 | 
            +
             | 
| 148 164 | 
             
                def do_run_default
         | 
| 149 165 | 
             
                  return false unless validate_initialized_project!
         | 
| 150 166 |  | 
| @@ -165,6 +181,7 @@ module Qc | |
| 165 181 | 
             
                def do_run_backtest
         | 
| 166 182 | 
             
                  backtest = quant_connect_proxy.create_backtest project_settings.project_id, project_settings.last_compile_id, "backtest-#{project_settings.last_compile_id}"
         | 
| 167 183 | 
             
                  puts "Backtest for compile #{project_settings.last_compile_id} sent to the queue with id #{backtest.id}"
         | 
| 184 | 
            +
                  open_results_in_quant_connect if options.open_results
         | 
| 168 185 |  | 
| 169 186 | 
             
                  begin
         | 
| 170 187 | 
             
                    if backtest.started?
         | 
| @@ -259,6 +276,16 @@ module Qc | |
| 259 276 | 
             
                  initialized_project?
         | 
| 260 277 | 
             
                end
         | 
| 261 278 |  | 
| 279 | 
            +
                def validate_on_mac!
         | 
| 280 | 
            +
                  puts "This command is only supported in macos" unless macos?
         | 
| 281 | 
            +
                  macos?
         | 
| 282 | 
            +
                end
         | 
| 283 | 
            +
             | 
| 284 | 
            +
                def macos?
         | 
| 285 | 
            +
                  host_os = RbConfig::CONFIG['host_os']
         | 
| 286 | 
            +
                  host_os =~ /darwin|mac os/
         | 
| 287 | 
            +
                end
         | 
| 288 | 
            +
             | 
| 262 289 | 
             
                def initialized_project?
         | 
| 263 290 | 
             
                  project_settings.project_id
         | 
| 264 291 | 
             
                end
         | 
    
        data/lib/qc/console.rb
    CHANGED
    
    | @@ -4,10 +4,10 @@ module Qc | |
| 4 4 | 
             
                end
         | 
| 5 5 |  | 
| 6 6 | 
             
                def run(argv)
         | 
| 7 | 
            -
                   | 
| 7 | 
            +
                  parsed_options = parse_options(argv)
         | 
| 8 8 |  | 
| 9 9 | 
             
                  command = argv[0]
         | 
| 10 | 
            -
                  client = Qc::CommandRunner.new(quant_connect_proxy)
         | 
| 10 | 
            +
                  client = Qc::CommandRunner.new(quant_connect_proxy, parsed_options)
         | 
| 11 11 | 
             
                  success = begin
         | 
| 12 12 | 
             
                    if command
         | 
| 13 13 | 
             
                      client.run(command.to_sym)
         | 
| @@ -29,31 +29,35 @@ module Qc | |
| 29 29 | 
             
                end
         | 
| 30 30 |  | 
| 31 31 | 
             
                def parse_options(args)
         | 
| 32 | 
            -
                   | 
| 32 | 
            +
                  parsed_options = OpenStruct.new
         | 
| 33 33 |  | 
| 34 | 
            -
                  opt_parser = OptionParser.new do | | 
| 35 | 
            -
                     | 
| 34 | 
            +
                  opt_parser = OptionParser.new do |options|
         | 
| 35 | 
            +
                    options.banner = "Usage: qc [command] [options]"
         | 
| 36 36 |  | 
| 37 | 
            -
                     | 
| 38 | 
            -
                     | 
| 39 | 
            -
                     | 
| 37 | 
            +
                    options.separator ""
         | 
| 38 | 
            +
                    options.separator "Supported commands: #{Qc::CommandRunner::SUPPORTED_COMMANDS.join(', ')}"
         | 
| 39 | 
            +
                    options.separator "When no command provided it will execute: 'push compile backtest' in sequence"
         | 
| 40 40 |  | 
| 41 | 
            -
                     | 
| 42 | 
            -
                     | 
| 41 | 
            +
                    options.separator ""
         | 
| 42 | 
            +
                    options.separator "Common options:"
         | 
| 43 43 |  | 
| 44 | 
            -
                     | 
| 45 | 
            -
                       | 
| 44 | 
            +
                    options.on("-o", "--open", "Open backtest results in QuantConnect. Only for `qc` or `qc backtest` commands.") do
         | 
| 45 | 
            +
                      parsed_options.open_results = true
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    options.on("-h", "--help", "Show this message") do
         | 
| 49 | 
            +
                      puts options
         | 
| 46 50 | 
             
                      exit 0
         | 
| 47 51 | 
             
                    end
         | 
| 48 52 |  | 
| 49 | 
            -
                     | 
| 53 | 
            +
                    options.on("--version", "Show version") do
         | 
| 50 54 | 
             
                      puts Qc::VERSION
         | 
| 51 55 | 
             
                      exit 0
         | 
| 52 56 | 
             
                    end
         | 
| 53 57 | 
             
                  end
         | 
| 54 58 |  | 
| 55 59 | 
             
                  opt_parser.parse!(args)
         | 
| 56 | 
            -
                   | 
| 60 | 
            +
                  parsed_options
         | 
| 57 61 | 
             
                end
         | 
| 58 62 | 
             
              end
         | 
| 59 63 | 
             
            end
         | 
| @@ -74,13 +74,14 @@ module Qc | |
| 74 74 | 
             
                def read_backtest(project_id, backtest_id)
         | 
| 75 75 | 
             
                  response = perform_request :get, '/backtests/read', params: {projectId: project_id, compileId: backtest_id}
         | 
| 76 76 | 
             
                  validate_response! response
         | 
| 77 | 
            -
                   | 
| 77 | 
            +
                  found_backtest_json = response.backtests.find{|backtest_json| backtest_json['backtestId'] == backtest_id}
         | 
| 78 | 
            +
                  create_backtest_from_json_response(OpenStruct.new({success: response.success}.merge(found_backtest_json)))
         | 
| 78 79 | 
             
                end
         | 
| 79 80 |  | 
| 80 81 | 
             
                private
         | 
| 81 82 |  | 
| 82 83 | 
             
                def create_backtest_from_json_response(response)
         | 
| 83 | 
            -
                  Qc::Backtest.new(response.backtestId, response.name, response.completed, response. | 
| 84 | 
            +
                  Qc::Backtest.new(response.backtestId, response.name, response.completed, response.progress.to_f, response.result, response.success)
         | 
| 84 85 | 
             
                end
         | 
| 85 86 |  | 
| 86 87 | 
             
                def create_compile_from_json_response(response)
         | 
    
        data/lib/qc/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: qc
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jorge Manrubia
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017-11- | 
| 11 | 
            +
            date: 2017-11-15 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rest-client
         | 
| @@ -124,6 +124,9 @@ files: | |
| 124 124 | 
             
            - LICENSE.txt
         | 
| 125 125 | 
             
            - README.md
         | 
| 126 126 | 
             
            - Rakefile
         | 
| 127 | 
            +
            - automator/open-qc-results.workflow/Contents/Info.plist
         | 
| 128 | 
            +
            - automator/open-qc-results.workflow/Contents/QuickLook/Preview.png
         | 
| 129 | 
            +
            - automator/open-qc-results.workflow/Contents/document.wflow
         | 
| 127 130 | 
             
            - bin/console
         | 
| 128 131 | 
             
            - bin/qc
         | 
| 129 132 | 
             
            - bin/setup
         |