===== Using QuoteLink with MatLab ===== Starting from QuoteLink 0.78.47 it is possible to use QuoteLink using a new interface based on the use of a Matlab MEX function This results is a very good system to get financial data into Matlab - install Matlab 32 or 64 and a matching QuoteLink 32 /64 - in the matlab shell issue the matlab command: pathtool and add the folder: Program Files (x86)\QuoteLink\bin (for a 32 bits setup) or Program Files\QuoteLink\bin (for a 64 bits setup) inside that folder you can find 3 Matlab script examples: last.m, eod.m, clean.m edit them for inspection Issue the commands: last('CSCO') eod('CSCO') These files are matlab script wrappers and are examples that use the general **ql** mex function. The **ql** mex function is used as follows: ql( , , arg1, arg2, ..., argn) ql('KEY=VALUE KEY1=%1 KEY2=%2 ... KEYn=%n', VALUE1, VALUE2, ..., VALUEn) the VALUE1 will replace %1 VALUE2 %2 and so on. If %n is present then VALUEn must appear on the right or an error is reported Example: ql ('TYPE=QUOTES FEED=IQ FIELD=LAST SYMBOL=%1', 'CSCO') A **key=value** pair may also be given in the specification itself like as in **FEED=IQ** or **TYPE=QUOTES** The accepted keys are documented in: [[Worksheet RTD formulae|key pairs]] and are the same already being used for Excel There two new keys specific to Matlab which are **MFROM** and **MTO**. They allow the use of matlab time units directly (without conversions) (see eod.m for an example) When using matlab there is an auxiliary application running named Winql.exe which holds the requests already issued. That way there is no need to reestablished the connections on every invocation. For a streaming feed WinQL maintains a **streaming** connection with the servers even after the mex file returns control to matlab. All this results in a very fast answers for any subsequent requests. The TYPE=CLEAN request (seen in clean.m) lets you empty all the quotes being hold on winql releasing resources. If you don't issue the CLEAN command when the feed limit is attained the older symbols are disconnected. The best way to keep track of what is going on is to keep the log open in verbose mode.The log application in verbose mode shows how many quotes are being monitored/rejected/waiting ==Interrupting== If for any reason the ql command does not respond you may use *Ctrl and C* keys pressed simultaneously (like for M files) *Excel and other apps* You can use use matlab, Excel and .NET applications simultaneously QuoteLink will optimize the connections to the server(s) ==Pre-loading Quotes/Series== The ql MEX command answers synchronously. If you need hundreds of quotes or series it is not efficient to wait for an answer before sending the next as the servers handle much better more than a request at a time. The right way to do that first issue a request containing COMMIT=0 this sends the request but DOES NOT wait for the answer ... ql ('SYMBOL=AMZN FEED=IQ TYPE=SERIES PERIOD=1 MFROM=%1 MTO=%2 *COMMIT=0*', now - 10, now) ql ('SYMBOL=AA FEED=IQ TYPE=SERIES PERIOD=1 MFROM=%1 MTO=%2 COMMIT=0', now - 10, now) ql ('SYMBOL=GOOG FEED=IQ TYPE=SERIES PERIOD=1 MFROM=%1 MTO=%2 COMMIT=0', now - 10, now) ... many more all at once... with COMMIT=0 the answer is immediate but that doesn't mean the data is already in. I might be or not. once all requets sent, issue again the same request but without COMMIT=0 ql ('SYMBOL=AMZN FEED=IQ TYPE=SERIES PERIOD=1 MFROM=%1 MTO=%2', now - 10, now) ... If meanwhile the answer for AMZN came the answer will be instantaneous otherwise the function will wait for the server. To see what is going on and when the different requests terminate it is useful to have the log application opened as some requests (like months of intra-day ...) might take some time. ===== Using QuoteLink with MatLab old version (COM based) ===== (please don't use if you are starting now as the MEX version is much better and this approach will be discontinued at some point) It is possible to import data from QuoteLink into MatLab. Use QuoteLink version ql-0-77-106 or later. for now use MatLab 32 bits edition __commands to use at the MatLab prompt:__ //Create a Link object instance. The Link object represents QuoteLink inside MatLab and you need only to do it once// link = actxserver('QLClient.Link') ===== for Quotes ===== //Synchronous Request L1 quotes// spx = link.Request('SPX.XO', 'IQ') returns a QuoteLink Node object that contains all data for the symbol spx.GetField('LAST').Value() returns last ===== for Series ===== spx = link.Series('SPX.XO', 60, 365, 'IQ', 60000) request 1Minute (=60s) bars, 365 days from IQ feed and use a timeout of 60000 milliseconds cm = spx.Matrix() get a cell array with number of Bars x 6 Colums - where the 6 columns are Time, Open, High, Volume, Close, Volume - time is MatLab serial date m = cell2mat(cm) cell2mat is a MatLab internal function to convert from cell array to a number matrix The data is downloaded and cached locally for subsequent use.