Yair Altman Undocumented Matlab Altmany@gmail

2y ago
35 Views
2 Downloads
837.74 KB
25 Pages
Last View : 4m ago
Last Download : 2m ago
Upload by : Axel Lin
Transcription

Real-time trading in MATLABYair AltmanUndocumented Matlab.comaltmany@gmail.com Yair AltmanUndocumentedMatlab.com1

A common algo-trading challenge Trading platforms are relatively closedo Difficult to develop automated trading platformso Vendor lock-in – algos are often un-portableo Internal algo customizability usually limited Common solutions:o Use Excel with trading-platform plugino Use limited internal programmability (MT4, TS)o Develop custom C /Java applications Yair AltmanUndocumentedMatlab.com2

Why use MATLAB? Numerous out-of-the-box analysis functionalityo Much more functionality than Excel or C /Java Dedicated toolboxes for specific useso Financial, Data-feed, Statistics, Econometrics, Optimization, Trading, Tried-and-testedo Prevents risk of losses due to computational bugso Most functions have editable source code – no secretso Reduces total cost of ownership (develop/test/maintain) Easy learning curve – engineering power without needing tobe a software developer Excellent at exactly the task taking most time/cost to develop:the algo strategy/modelo All other components are usually far easier to develop mathworks.com/discovery/algorithmic-trading.html Yair AltmanUndocumentedMatlab.com3

However MATLAB could not until recently complete thetrading loop – Send automated trade orders to brokerModify/cancel open ordersTrack trade executionsReceive portfolio/account info Yair AltmanUndocumentedMatlab.com4

Solutions MATLAB 8.1 (R2013a): new Trading Toolboxo Windows onlyo Bloomberg EMSXo Trading Technologies X TRADERo R2013b: Added CQG IB interfaceso mathworks.com/products/trading MATLAB 7.1 (R14 SP3) onward: IB-MATLABo Windows, Mac, Linuxo Interactive Brokers onlyo UndocumentedMatlab.com/ib-matlab Yair AltmanUndocumentedMatlab.com5

General trading application design Yair AltmanUndocumentedMatlab.com6

Deployment in large institutionsFIXor APIDeployment serverCompiled code (MCC, Linux);Java, or .NET MATLABProduction Server client;.C or HDL (FPGA) viaMATLAB Code GeneratorTradingStrategyDevelopment& AutomatedBack-Testing Yair AltmanUndocumentedMatlab.comOrder Management System,Crossing NetworkData feed server7

Today’s demoTradeordersMarket dataPortfolioExecutions Yair AltmanUndocumentedMatlab.com8

Live demo Yair AltmanUndocumentedMatlab.com9

Interactive Brokers (IB) Low-cost online broker Consistently ranked Best Online Broker by Barron'sooooocommissionsexecution pricesfeaturesexchangesreports Widely used worldwide Fully documented APIinteractivebrokers.com/en/software/ibapi.php Yair AltmanUndocumentedMatlab.com10

IB-MATLAB Connects MATLAB to IBooooooooReceive account data (portfolio, cash, limits)Receive market data feed (historic, snapshot, streaming quotes)Send trade orders to marketModify/cancel open ordersTrack executions (MATLAB callback functions)Synchronous asynchronous modesFully supports IB’s API5-10 mS latency for IB events Works on all MATLAB platforms, Java-based API Hundreds of installations, trades 100M/day Yair AltmanUndocumentedMatlab.com11

IB-MATLAB: getting portfolio data data IBMatlab('action','PORTFOLIO')data 1x12 struct array with fields:symbollocalSymbol. data(1)ans erageCost:contract: Yair 800186.5169.03183335[1x1 struct]UndocumentedMatlab.com12

IB-MATLAB: getting market data data IBMatlab('action','QUERY', 'symbol','GOOG')data ick:bidSize:askSize:lastSize:contractDetails: Yair Altman22209874'02-Dec-2010 00:47:23''02-Dec-2010 55.71562.4571.57-1368910.01330[1x1 struct]UndocumentedMatlab.com13

IB-MATLAB: getting historical data data IBMatlab('action','HISTORY', 'symbol','IBM', .'barSize','1 hour', 'useRTH',1)data dateNum: [1x7 double]dateTime: {1x7 cell}open: [161.08 160.95 161.66 161.17 161.57 161.75 162.07]high: [161.35 161.65 161.70 161.60 161.98 162.09 162.34]low: [160.86 160.89 161.00 161.13 161.53 161.61 161.89]close: [160.93 161.65 161.18 161.60 161.74 162.07 162.29]volume: [5384 6332 4580 2963 4728 4465 10173]count: [2776 4387 2990 1921 2949 2981 6187]WAP: [161.07 161.25 161.35 161.31 161.79 161.92 162.14]hasGaps: [0 0 0 0 0 0 0] data.dateTimeans '20110225 16:30:00' '20110225 17:00:00' '20110225 18:00:00''20110225 19:00:00' '20110225 20:00:00' '20110225 21:00:00''20110225 22:00:00' Yair AltmanUndocumentedMatlab.com14

IB-MATLAB: sending orders to market% Alternative #1: using a MATLAB structparamsStruct [];paramsStruct.action 'BUY';paramsStruct.symbol 'GOOG';paramsStruct.quantity 100;paramsStruct.limitPrice 850;orderId IBMatlab(paramsStruct);% Alternative #2: using name/value pairsorderId IBMatlab('action','BUY', 'symbol','GOOG', .'quantity',100, 'limitPrice',850); Yair AltmanUndocumentedMatlab.com15

IB-MATLAB: processing execution events% Set the callback function for IB trade execution eventsorderId IBMatlab('action','BUY', 'symbol','GOOG', .'quantity',1, 'limitPrice',850, .'CallbackExecDetails',@myExecDetailsFcn);% Sample event callback functionfunction myExecDetailsFcn(hObject, eventData)% Extract the basic event data componentscontractData eventData.contract;executionData eventData.execution;% Now do something useful with this information.end Yair AltmanUndocumentedMatlab.com16

Some design considerations(in no particular order) Build or buyData feed provider (IB / IQFeed / eSignal / )Synchronous (periodic) or asynchronous (reactive)Latency/frequency streaming quotes or periodic historical data requests perhaps we need to use C / FPGA code (for µS latency) Level of robustness, failsafe mechanisms GUI or GUI-less Semi or fully automated Yair AltmanUndocumentedMatlab.com17

Example for a very simple application design% Main application entry pointfunction tradingApplication()tradeSymbol('CLX3', 15*60, @timerCallbackFunction);tradeSymbol('GOOG', 10*60, @timerCallbackFunction);tradeSymbol('DAX',5*60, @timerCallbackFunction);tradeSymbol('FTSE', 1*60, @timerCallbackFunction);%@15%@10% @5% @1minsminsminsminend% Start an endless timer at the specified frequency that will% run the specified callbackFunc upon each invocationfunction hTimer tradeSymbol(symbolName, period, callbackFunc)% Create the timer objecthTimer timer('ExecutionMode','fixedRate', .'Period',period, .'TimerFcn',{callbackFunc,symbolName});% Start the timerstart(hTimer);end% tradeSymbol Yair AltmanUndocumentedMatlab.com18

Example for a very simple application designfunction timerCallbackFunction(hTimer, eventData, symbolName)try% Load previously-stored data for the specified contractpersistentData load(symbolName);% Get the latest data for this contractlatestData getLatestData(symbolName);% Process the data (secret sauce – algo strategy)[tradeParams, persistentData] processData(latestData, .persistentData);% Process trade signals (send orders to IB)IBMatlab(tradeParams{:});% Save decision-making data for next timer rocessError(lasterror);endend Yair AltmanUndocumentedMatlab.com19

Some additional bells & whistles Main engine (non-GUI)ooooRisk (open positions) managementAsynchronous trade execution trackingFIX connection (rather than API)Alerts via email/SMS (text-message) Graphical User Interface (GUI)o Open positionso Real-time market graph TA indicators/bands, OHLC bars/candles, trade signalso Trades/executions logo P&L updateso Manual overrides (“panic button”) Yair AltmanUndocumentedMatlab.com20

Sample advanced MATLAB GUI Yair Altmanwww.UndocumentedMatlab.com21

Sample PDF report Yair Altmanwww.UndocumentedMatlab.com22

Backtesting in MATLABtadeveloper.com Yair AltmanUndocumentedMatlab.com23

Conclusion Technology is no longer a barrier to developing arelatively low-cost algorithmic trading engine We no longer need to handle connectivity plumbing We no longer need to prototype in MATLAB, deploy in Co MATLAB can handle entire investment management lifecycleo Simpler development, reduced cost & time-to-market The only major thing left to do is “just” to devise awinning strategyo With the analysis tools available in MATLAB this should beeasier than ever Yair AltmanUndocumentedMatlab.com24

tware/ibapi.phpaltmany@gmail.com Yair AltmanUndocumentedMatlab.com25

relatively low-cost algorithmic trading engine We no longer need to handle connectivity plumbing We no longer need to prototype in MATLAB, deploy in C oMATLAB can handle entire investment management lifecycle oSimpler development, reduced cost & time-to-market The only majo

Related Documents:

MATLAB tutorial . School of Engineering . Brown University . To prepare for HW1, do sections 1-11.6 – you can do the rest later as needed . 1. What is MATLAB 2. Starting MATLAB 3. Basic MATLAB windows 4. Using the MATLAB command window 5. MATLAB help 6. MATLAB ‘Live Scripts’ (for algebra, plotting, calculus, and solving differential .

19 MATLAB Excel Add-in Hadoop MATLAB Compiler Standalone Application MATLAB deployment targets MATLAB Compiler enables sharing MATLAB programs without integration programming MATLAB Compiler SDK provides implementation and platform flexibility for software developers MATLAB Production Server provides the most efficient development path for secure and scalable web and enterprise applications

MATLAB tutorial . School of Engineering . Brown University . To prepare for HW1, do sections 1-11.6 – you can do the rest later as needed . 1. What is MATLAB 2. Starting MATLAB 3. Basic MATLAB windows 4. Using the MATLAB command window 5. MATLAB help 6. MATLAB ‘Live Scripts’ (for

3. MATLAB script files 4. MATLAB arrays 5. MATLAB two‐dimensional and three‐dimensional plots 6. MATLAB used‐defined functions I 7. MATLAB relational operators, conditional statements, and selection structures I 8. MATLAB relational operators, conditional statements, and selection structures II 9. MATLAB loops 10. Summary

foundation of basic MATLAB applications in engineering problem solving, the book provides opportunities to explore advanced topics in application of MATLAB as a tool. An introduction to MATLAB basics is presented in Chapter 1. Chapter 1 also presents MATLAB commands. MATLAB is considered as the software of choice. MATLAB can be used .

I. Introduction to Programming Using MATLAB Chapter 1: Introduction to MATLAB 1.1 Getting into MATLAB 1.2 The MATLAB Desktop Environment 1.3 Variables and Assignment Statements 1.4 Expressions 1.5 Characters and Encoding 1.6 Vectors and Matrices Chapter 2: Introduction to MATLAB Programming 2.1 Algorithms 2.2 MATLAB Scripts 2.3 Input and Output

Compiler MATLAB Production Server Standalone Application MATLAB Compiler SDK Apps Files Custom Toolbox Python With MATLAB Users With People Who Do Not Have MATLAB.lib/.dll .exe . Pricing Risk Analytics Portfolio Optimization MATLAB Production Server MATLAB CompilerSDK Web Application

pihak di bawah koordinasi Kementerian Pendidikan dan Kebudayaan, dan dipergunakan dalam tahap awal penerapan Kurikulum 2013. Buku ini merupakan “dokumen hidup” yang senantiasa diperbaiki, diperbaharui, dan dimutakhirkan sesuai dengan dinamika kebutuhan dan perubahan zaman. Masukan dari berbagai kalangan diharapkan dapat meningkatkan kualitas buku ini. Kontributor Naskah : Suyono . Penelaah .