File Exchange

## Automated Trading with MATLAB - 2012

version 1.2.0.1 (7.47 MB) by
Files from the Automated Trading webinar showing X_Trader and QuickFIX/J integration.

Updated 01 Sep 2016

Files used in the webinar - Automated Trading with MATLAB broadcast on August 21, 2012. This webinar can be viewed at www.mathworks.com/videos/automated-trading-with-matlab-81911.html
Specific topics include:
* Data gathering options, including daily historic, intraday, and real-time data
* Model building and prototyping in MATLAB
* Backtesting and calibrating a model
* Interacting with existing libraries and software for trade execution (X_Trader, QuickFIX/J, messaging queues)

It is recommended that you watch the webinar to see the "live" system running.

### Cite As

Stuart Kozola (2021). Automated Trading with MATLAB - 2012 (https://www.mathworks.com/matlabcentral/fileexchange/37932-automated-trading-with-matlab-2012), MATLAB Central File Exchange. Retrieved .

### Comments and Ratings (24)

Stuart Kozola

If we did this,

trades = [0; diff(signal(1:end)] (recall diff returns N-1 elements from N input, which is why we pad with 0 at the front)

we would be trading simultaneously with the signal that tells us to trade, which can't happen as that would be trading before our signal is actually realized from the close of the current tick.

The diff(1:end-1) returns N-2 vector, so the two zeros are required to keep the trades vector the same size of N. The padding of zeros in the front of the array is moving the trades variable forward in time by 1 period, the other 0 is needed for diff operation. This in effect makes sure we count trades in the next time period from which the signal is telling us to start a trade.

This is line 29 of Demo1_intro,

trades = [0; 0; diff(signal(1:end-1))]; % shift trading by 1 period

can someone please tell me how this shifts the trading period by 1? Thanks

Sinan Islam

obsenspictor

Is the executor.bat file missing from quickFix/j version 1.6? I'm trying to figure out how to run the line system('C:\sandbox\java\quickfixj\bin\executor.bat&'). Is it necessary to switch to version 1.5?

cyan

Xin LIU

Thanks. Great job!

Anthøny Salazar

thanks for share it help me a lot, if we continue on this motion, everyone will be rich.

cyril

nice work, @Stuart is there so much a need to use GA for finding the best rule? there are 3*2+3*2^2*3+2^3*3^2 possibilities of rules with the scheme you did, so it's not a big deal to test them 1 by 1

Hello Stuart,

I am having trouble with starting banzai on my computer. I know it has to probably deal with not having the the config file on the correct path.
I am receiving the error that SessionSettings is a undefined function. I am not sure where to put the correct file and what files to put there. Thank you!

Frank Weissbach

@Stuart,

I solved the issue. It was indeed a path issue. If classes depend on other .jar then those need to be added to the javaclasspath as well.
Following the quickfix installation guide the following 4 jar files need to be in the path:

quickfixj-all.jar(includes core and message JARs)
mina-core-1.1.0.jar
slf4j-api.jar
slf4j-jdk14.jar

Frank Weissbach

Hello Stuart,

1) The Banzai example is running correctly on my system.
2) The javaclasspath is set correct.
I'm successful calling (and creating the output objects in Matlab) other classes from the same quickfixj-all jar files.

Stuart Kozola

@Frank

The error is telling you it can not find the SocketInitiator method. This error is likely due to one of these reasons:
1) the required library is not on the javaclasspath
2) a mis-match in required java libraries

When you download and install quickfix/j, run the banzai example outside of MATLAB to make sure your system has all of the required java libraries. If it runs correctly, then the problem is in the importing/classpath.txt reference to the required java libraries, which you can fix by importing the libraries from the same directory as the installation of quikcfix/j.

Frank Weissbach

I have an error when I trying to execute 'Demo7b_QuickFIXExample.m'

Everything works fine up to the line:
initiator = SocketInitiator(application,storeFactory,settings,logFactory,messageFactory);

which gives me the error:
Undefined function 'SocketInitiator' for input arguments of type
'quickfix.examples.banzai.BanzaiApplication'.

Operating System: Microsoft Windows 7 Version 6.1 (Build 7601: Service Pack 1)
Java VM Version: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode

Frank Weissbach

I'm working on Windows 7:
Operating System: Microsoft Windows 7 Version 6.1 (Build 7601: Service Pack 1)
Java VM Version: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode

Mark

Thank you for this collection. On a cursory read of the code, if I am correct there is an issue with the logic employed in tradeSignal if I have understood it correctly. Specifically, the input 'ind' and logical 'AND'. As I understand it, 'ind' is normalized such that 0 = sell, 0.5 = "skip", 1 = buy. If you logically AND 0 & 1 (sell and buy) the result is a 0 (sell) however this is not the desired result. I'm posting this in the spirit of others trying to review this code and welcome any correction on my understanding.

nicholas

amazing!

Piment

Stuart Kozola

Hi Goryn,

Did you try inputStream = java.io.FileInputStream('C:\\MATLAB_CODES\\Automated_Trading\\banzai.cfg');

settings = SessionSettings(inputStream);

It is a JAVA path issue, not MATLAB. Try this and it should work.

Goryn

Thank you for your answer, Stuart. But it is another error. Firstly, I've tried to run Demo7b_QuickFIXExample.m and it writes:

Java exception occurred:
quickfix.ConfigError: banzai.cfg (The system cannot find the file
specified)

at quickfix.SessionSettings.<init>(SessionSettings.java:110)

Error in Demo7b_QuickFIXExample (line 23)
settings = SessionSettings('banzai.cfg');

Stuart Kozola

This error occurs when trying to reference a file path on Windows that is not a valid URL. See http://sourceforge.net/tracker/index.php?func=detail&aid=3506051&group_id=176742&atid=878458 for an example.

You can either:
1) Run the commands with banzai.cfg in the current working directory

OR

2) change the MATLAB file to accept inputStreams:

settings = SessionSettings(inputStream);

Goryn

I have an error when I trying to execute 'Demo7b_QuickFIXExample.m' script:
- firstly I've added path to 'classpath.txt'
- then after loading quickfix packages I try to execute 'settings = SessionSettings('banzai.cfg');' it writes me:
Java exception occurred:
quickfix.ConfigError: banzai.cfg (Cannot find) at quickfix.SessionSettings.<init>(SessionSettings.java:110)

If I try to execute a line of code with full path, like "settings = SessionSettings('c:\MATLAB_CODES\Automated_Trading\banzai.cfg');" it writes:

Java exception occurred:
java.lang.IllegalArgumentException: name

at sun.misc.URLClassPath.findResource(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at quickfix.SessionSettings.<init>(SessionSettings.java:105)

##### MATLAB Release Compatibility
Created with R2012a
Compatible with any release
##### Platform Compatibility
Windows macOS Linux
##### Acknowledgements

Inspired by: Algorithmic Trading with MATLAB - 2010

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!