<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hack the market &#187; FIX Protocol</title>
	<atom:link href="http://www.puppetmastertrading.com/blog/index.php/category/fix-protocol/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.puppetmastertrading.com/blog</link>
	<description>Algorithmic trading experiences</description>
	<lastBuildDate>Wed, 21 Apr 2010 23:11:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>core arb</title>
		<link>http://www.puppetmastertrading.com/blog/2009/12/15/core-arb/</link>
		<comments>http://www.puppetmastertrading.com/blog/2009/12/15/core-arb/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 15:05:17 +0000</pubDate>
		<dc:creator>tito</dc:creator>
				<category><![CDATA[FIX Protocol]]></category>
		<category><![CDATA[dereferenced]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.puppetmastertrading.com/blog/?p=918</guid>
		<description><![CDATA[Cloud computing looks to have turned yet another interesting corner.   This time the turn leads towards the development of a liquid, fully electronic new marketplace in &#8220;spot instances&#8221;.
&#8216;Spot&#8216; means what you would expect it to in the context of trading: the current pricing for immediate delivery of a commodity.  &#8216;Instance&#8216; is the atomic element [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignleft" style="width: 95px"><img src="/images/core.jpeg" alt="core arbitrage?" width="85" height="127" /><p class="wp-caption-text">FIX interface?</p></div>
<p>Cloud computing looks to have turned yet <a title="Amazon EC2 Spot Instances Blog post" href="http://aws.typepad.com/aws/2009/12/ec2-spot-instances-and-now-how-much-would-you-pay.html" target="_blank">another interesting corner</a>.   This time the turn leads towards the development of a liquid, fully electronic new marketplace in &#8220;spot instances&#8221;.</p>
<p>&#8216;<a title="wikipedia: spot priing" href="http://en.wikipedia.org/wiki/Spot_price" target="_blank"><em>Spot</em></a>&#8216; means what you would expect it to in the context of trading: the current pricing for immediate delivery of a commodity.  &#8216;<em>Instance</em>&#8216; is the atomic element within Amazon&#8217;s cloud environment; an instance is the smallest chunk of computing capability which can be provisioned within the cloud.</p>
<p><strong>Amazon is making markets in <em>cores</em> and they&#8217;re exposing functionality just as a regular exchange would: both through user interface &#8217;screens&#8217; as well as programmable APIs.</strong></p>
<p>From their <a title="spot instances announcement" href="http://aws.amazon.com/ec2/spot-instances/" target="_blank">announcement</a>:<strong><br />
</strong></p>
<blockquote><p>Spot Instances enable you to bid for unused Amazon <span>EC2</span> capacity.  Instances are charged the Spot Price set by Amazon <span>EC2</span>, which fluctuates periodically depending on the supply of and demand for Spot Instance capacity. To use Spot Instances, you place a Spot Instance request, specifying the instance type, the region desired, the number of Spot Instances you want to run, and the maximum price you are willing to pay per instance hour. To determine how that maximum price compares to past Spot Prices, the Spot Price history is available via the Amazon <span>EC2 API</span> and the <span>AWS</span> Management Console. If your maximum price bid exceeds the current Spot Price, your request is fulfilled and your instances will run until either you choose to terminate them or the Spot Price increases above your maximum price (whichever is sooner).</p></blockquote>
<h5>embedded optionality</h5>
<p>While the inclusion of, effectively, a market data service is neat, probably the most interesting aspect of the initial protocol they&#8217;ve designed is that it contains embedded optionality and behaves a bit like <a title="wikipedia: barrier options" href="http://en.wikipedia.org/wiki/Barrier_option" target="_blank">barrier options</a>.  That is, when I setup an &#8216;order&#8217;, I need specify a maximum price I&#8217;m willing to pay.  When the spot price drops below my max, I get &#8220;knocked-into&#8221; a contract and instances are allocated to me.  If the spot price rises above my max while I&#8217;m running, I get &#8220;knocked-out&#8221; of the contract and my jobs get terminated.</p>
<p>The intent is to allow for low-priority jobs to be dynamically run whenever pricing drops below a user&#8217;s threshold, but the (intended?) consequence is that it adds the <em>delicious and malleable tang of path dependency</em> to these instruments&#8230;</p>
<h5>secondary markets, FIX, arbitrage..?</h5>
<p>Amazon currently controls the market entirely, but it&#8217;s not hard to imagine a secondary market evolving.  Given that others are beginning to copy Amazon&#8217;s APIs, one can also imagine markets which operate across providers &#8230;  perhaps accessed via FIX?&#8230;</p>
<p>Who knows?  In the not-too-distant future, we may well be able to implement &#8216;<strong><em>core arb</em></strong>&#8216; strategies&#8230;or make markets in cores&#8230; or find that we can effectively hedge with disciplined exposure to the &#8216;core market&#8217; or &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.puppetmastertrading.com/blog/2009/12/15/core-arb/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>containing a strategy</title>
		<link>http://www.puppetmastertrading.com/blog/2009/08/19/containing-a-strategy/</link>
		<comments>http://www.puppetmastertrading.com/blog/2009/08/19/containing-a-strategy/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 19:46:33 +0000</pubDate>
		<dc:creator>tito</dc:creator>
				<category><![CDATA[EMS Internals]]></category>
		<category><![CDATA[FIX Protocol]]></category>
		<category><![CDATA[portfolio management]]></category>
		<category><![CDATA[strategy development]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.puppetmastertrading.com/blog/?p=543</guid>
		<description><![CDATA[My son recently had his first birthday and amazes me daily with his new feats as he runs around increasingly stably exploring the world around him.  It occurs to me that the system I use to trade every day, Stratbox, is approaching its fourth &#8220;birthday&#8221; in the next few months.  I hadn&#8217;t originally intended to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="margin: 3px 5px;" src="/images/theChase.jpg" alt="" width="240" height="194" />My son recently had his first birthday and amazes me daily with his new feats as he runs around increasingly stably exploring the world around him.  It occurs to me that the system I use to trade every day, Stratbox, is approaching its fourth &#8220;birthday&#8221; in the next few months.  I hadn&#8217;t originally intended to write a system &#8211; an algorithmic trading platform &#8211; but found that existing products were limited, expensive and didn&#8217;t fit my mental model of what they should do.</p>
<p>This isn&#8217;t surprising as I wanted the system to support all of the activities associated with our algorithmic trading.  It turns out that that&#8217;s a lot to ask of a system.  It also turns out that you learn as you go and so the system continues to evolve.  A few years ago I&#8217;d <a title="putting the pieces together" href="http://www.puppetmastertrading.com/blog/2007/10/12/putting-the-pieces-together/" target="_blank">posted</a> about the basics of a strategy container and in this post I&#8217;m going to come back to this topic and describe some of the layers of code and thought developed since then.</p>
<p>First, let&#8217;s consider the role of a strategy container.  Its job is to intermediate between trading strategies and the external environments with which they interact.  It must also provide services that strategies can use (e.g., position management) and that it wouldn&#8217;t make sense for each strategy to re-implement.  In the past I&#8217;ve focused on the former responsibility of adapting strategies to external environments.  Why is this necessary and interesting?  Because it allows us to take the same exact strategy and run it live, or in simulation or in backtest, etc.  Interesting and necessary, but not what I want to focus on this time.  Instead, I want to look at the services provided to strategies; the &#8216;ecosystem&#8217; a strategy container provides in the hope that strategies might flourish within it.</p>
<p><span id="more-543"></span></p>
<p>We&#8217;ll go from the bottom up.  At the bottom you have one or more pipes of market data coming in.  You might also have news feeds, weather feeds or other such things coming in and we&#8217;re just going to conflate them all and say &#8220;market data.&#8221;  Still at the bottom, you also have one or more  two-way pipes with your oms or broker or directly with exchanges or with an exchange simulator.  Within Stratbox we call this abstraction an &#8220;ExecutionPlatform&#8221; because it&#8217;s conceptually where trades get executed.  The lingua franca for execution platforms is FIX, so the baseline object model of a strategy container is likely going to look a lot like messages described by the FIX spec.  Here we have orders, executions and the like.  Within Stratbox we&#8217;ve implemented an exchange simulator, a <a title="QuickFIX: Open source FIX engine" href="http://www.quickfixengine.org/" target="_blank">QuickFIX</a>-based FIX interface and a couple broker-specific APIs and they are all of type ExecutionPlatform.  To a strategy, they all look the same.  Likewise with market data.  Within the strategy container, we provide a publish-subscribe model wherein any kind of market data can be subscribed to regardless of the ultimate source of the data.  The intention is always to intermediate between the strategy and its external environment.</p>
<p><strong>the baseline object model</strong></p>
<p>Great.  But now I want to write a trading strategy.  What&#8217;s that going to look like?   And this is where things get increasingly interesting as we get to decide what kind of facilities we&#8217;re going to provide.  We also need to manage concurrency in some fashion as trading is an intrinsically asynchronous activity.  For this lowest level of strategy, we&#8217;ll say that each market feed is handled by a thread which timestamps and enqueues a &#8220;Quote&#8221; for later consumption and redistribution to relevant subscribers by a MarketDataService within the container.  Likewise, each execution platform will be serviced by a thread who similarly enqueus &#8220;Execution&#8221; objects from exchanges real and simulated.  The threads handling executions should likely have a higher priority than the threads handling market data.  So, the strategy is naturally exposed to the markets&#8217; asynchronicity right off the bat.  What baseline facilities will our strategy have at its disposal?  Well, it needs to be able to manage orders and positions, so it needs some kind of a &#8220;blotter&#8221; facility.  With this in place, a strategy can safely assume that it doesn&#8217;t need to listen to each execution coming in just to have a correct picture of its book.  It needs access to a MarketDataSvc and it likely also needs access to historical data.  But, staying simple, that&#8217;s more or less all we have to provide and we&#8217;re going to provide all of these things to the strategy through a single handle: a strategy context.  By swapping out a strategy&#8217;s context, we can move the strategy among environments (eg, from simulation to live execution).</p>
<p>With these facilities in place, basic algorithms can be implemented within a strategy and you should be able to test and trade them.</p>
<p>But you&#8217;re dealing with very low-level stuff.  You&#8217;ll also find that you&#8217;re writing the same kind of code over and over.  This inspired the introduction of a layer on top of the baseline object model which I&#8217;ve described before: <a title="StratParts" href="http://www.puppetmastertrading.com/blog/2008/04/12/stratparts-a-strategy-component-model/" target="_blank">StratParts</a> &#8211; a strategy component model.</p>
<p><strong>StratParts &#8211; a component model for strategies</strong></p>
<p>With StratParts, we introduced metadata and composition (in the <a title="Composites" href="http://en.wikipedia.org/wiki/Composite_pattern" target="_blank">&#8220;composite pattern&#8221;</a> sense) to our Strategy object model.  A strategy is itself a stratpart which contains other stratparts.  Thus, stratparts introduce a hierarchical structure to a strategy.  Each stratpart publishes a metadata descriptor which is aggregated at the strategy level.  The descriptor contains all of the modifiable characteristics of the strategy and can be changed while a strategy is executing thus giving a sort of grey box capability wherein a trader (or another strategy etc) can modify the behavior of a strategy as it&#8217;s running.  Stratparts also create an effective means of providing scoping within your strategy environment.  Stratparts can &#8220;see&#8221; the activity of other stratparts within the same strategy &#8211; they&#8217;re all peers in this sense.  This scoping can also be used for allocation of resources across different elements of a strategy.  For example, one stratpart might be allocated 80% of the cash available to the strategy while another stratpart manages the remaining 20%.</p>
<p>Stratparts have proved to be very powerful and we&#8217;ve written many of them though we&#8217;ll sometimes write strategies as one monolithic stratpart where it makes sense.</p>
<p>Stratparts have a lot of uses but one thing they don&#8217;t do is help manage the low-level complexity inherent in trading activities.  This was best described by a trader with whom I&#8217;d collaborated.  He&#8217;s a reservist in the IDF and uses military metaphors like I use sports metaphors.  He bemoaned the low-level handling of orders required for a very close-to-the-market strategy we were working on and said that:</p>
<blockquote><p>we need an order like a &#8217;smart&#8217; missile: fire it and forget it</p></blockquote>
<p>He was right and that inspired the next level of abstraction/support that we built into the system.</p>
<p><strong>&#8217;smart&#8217; orders and the tradeflow stratpart</strong></p>
<p>The strategy we were developing was meant to look at a universe of futures spreads and generate all of the &#8216;cycles&#8217; that might result in an arbitrage opportunity.  Since these are rare at best, we were really looking for circumstances where it looked like we had an advantage based on depth-of-market and various heuristics we&#8217;d apply.  Among the functionality that he wanted was an &#8216;order&#8217; which would act as a limit unless some conditions obtained in which case it might pay the spread or otherwise stop being a fixed limit order.  He didn&#8217;t want to handle this inside the strategy but instead wanted to fire these things off and forget about them unless they required attention (eg, if they&#8217;re rejected by the exchange or his firm&#8217;s risk management checks).  Although we ended up calling these smart orders, they&#8217;re really a sort of very localized execution strategy themselves.</p>
<p>To support them, we utilized the same workflow (= state machine) framework we&#8217;d implemented for our ExchangeSimulator as we wanted to ensure that these smart orders had a very well-defined life-cycle with a clear set of states and guarantees about transitions among them.  We embedded this workflow engine into a stratpart which supported smart orders operating within this &#8220;tradeflow&#8221;.  Thus, the extra functionality (and weight/expense) of this functionality is only achieved/incurred when actually required or desired.  This has proven to be a powerful addition to the system and raises the level of services enjoyed by prospective strategies substantially, particularly given the variety of orders we&#8217;ve implemented which stand ready for use by any new strategy that might want to employ them.</p>
<p>At this point, it should be clear that we&#8217;re blurring the lines between the strategies themselves and the container.  Another way of thinking of it is that one container can have a set of pre-made building blocks that can be applied for families of strategies.  Each one provides a particular grammar with which a strategy&#8217;s aims can be expressed.  For very close-to-the-market strategies where very low-level handling of orders is required, the tradeflow stratpart provides a set of really useful facilities, but if I&#8217;m just trading with limits then it might not be so interesting.</p>
<p><strong>portfolio-oriented strategies and beyond<br />
</strong></p>
<p>I&#8217;ve mentioned <a title="portfolio strategy" href="http://www.puppetmastertrading.com/blog/2008/09/13/portfolio-atomic-element-of-a-trading-strategy/" target="_blank">before</a> that I only care to think of strategies that operate on a portfolio.  As such, we&#8217;ve written a good deal of facilities for creating, analyzing and manipulating portfolios within strategies.  By using these facilities within a tradeflow stratpart, I can express quite complex strategies relatively simply by using portfolio analytics to determine my current &#8216;model&#8217; portfolio and then using smart orders to most effectively transition me from my current state to my model state.  For the kind of trading I do, this provides a rich &#8216;vocabulary&#8217; for the development of strategies.  All the same, my brain is having a <em>tip-of-the-tongue moment</em> as I feel that there&#8217;s an entirely different model possible for portfolio-oriented strategies just at the periphery of my imagination&#8230;  oh well, there&#8217;s always something new to explore.</p>
<p>Different trading styles, perspectives or trading problems are undoubtedly better served by different sorts of facilities.  I&#8217;m finding that just as language constrains and shapes thought, the strategy container that you employ shapes and constrains the kinds of strategies that you can implement.</p>
<p>If you have any ideas about such facilities for any kind of trading you do, I&#8217;d love to hear them.</p>
<p>&#8211;</p>
<p><strong>a note about Stratbox</strong></p>
<p><img class="alignright" src="/images/sb.jpg" alt="" width="161" height="161" />Although I&#8217;m talking about our system in this blog, we&#8217;re not marketing the system and happily &#8220;just&#8221; use it for our own trading activities.  We had looked into marketing the system previously but ultimately feel the same about selling stratbox as <a title="pimp that strat" href="http://www.puppetmastertrading.com/blog/2009/03/18/pimp-that-strat/" target="_blank">selling strategies</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.puppetmastertrading.com/blog/2009/08/19/containing-a-strategy/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>using Quantlib from Java</title>
		<link>http://www.puppetmastertrading.com/blog/2008/06/14/using-quantlib-from-java/</link>
		<comments>http://www.puppetmastertrading.com/blog/2008/06/14/using-quantlib-from-java/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 04:26:43 +0000</pubDate>
		<dc:creator>tito</dc:creator>
				<category><![CDATA[FIX Protocol]]></category>
		<category><![CDATA[monte-carlo methods]]></category>
		<category><![CDATA[open-source software]]></category>
		<category><![CDATA[options pricing]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.puppetmastertrading.com/blog-test/?p=3</guid>
		<description><![CDATA[
One of these days I’m going to give an overview of all the excellent open-source software I use on a daily basis.  Until that day comes, I’ll observe that finance remains one of the big areas where open-source software has made relatively limited inroads.
Two production-quality packages fight that unhappy state: QuantLib &#8211; a comprehensive [...]]]></description>
			<content:encoded><![CDATA[<p><img title="A free/open-source library for quantitative finance" src="http://puppetmastertrading.com/images/QL-title.jpg" alt="A free/open-source library for quantitative finance" /></p>
<p>One of these days I’m going to give an overview of all the excellent open-source software I use on a daily basis.  Until that day comes, I’ll observe that finance remains one of the big areas where open-source software has made relatively limited inroads.<img title="Java" src="/images/javabrew.jpg" alt="Java" align="right" /></p>
<p>Two production-quality packages fight that unhappy state: <a title="QuantLib: A free/open-source library for quantitative finance" href="http://quantlib.org" target="_blank">QuantLib</a> &#8211; a comprehensive framework for quantitative finance &#8211; and <a title="QuickFix: Open-source FIX engine" href="http://www.quickfixengine.org/" target="_blank">QuickFix</a> &#8211; a full-featured <a title="Financial Information eXchange" href="http://fixprotocol.org" target="_blank">FIX</a> engine.   Both are C++ libraries and both provide very nice interfaces to facilitate integration with other languages, including Java.  QuantLib is a big and complicated library and integrating it with Java is not totally obvious. Below, I’ll describe how to build and use QuantLib from Java.</p>
<p><a id="more-29"></a> These instructions are based on a unix installation.  I’m not really a windows developer and don’t have all the shiny tools that windows developers use, so it’s not an area of focus for me.  That said, I have managed to build QuantLib under windows by using <a title="MIinGW+MSYS: Linux in a box" href="http://www.mingw.org/" target="_blank">MinGW+MSYS</a> but it wasn’t terribly easy and I don’t currently have a working installation, so I won’t cover that here.  If this is your aim, don’t be dismayed as it is possible and it had all the functionality I enjoy under linux.</p>
<p><strong>Using QuantLib from Java (on linux)</strong></p>
<ul>
<li>Build QuantLib
<ul>
<li>Requires a working version of <a title="Boost C++ Library" href="http://www.boost.org/" target="_blank">Boost</a>.   This may prove to be the hardest step of all and you’ll need to use the ample documentation provided by the Boost team.</li>
<li>Once you have a working copy of Boost, building QuantLib should require little more than</li>
<p><code>sh autogen.sh</code><br />
<code>./configure</code></p>
<p><code>make</code><br />
<code>sudo make install</code></ul>
</li>
<li>Build QuantLib-SWIG
<ul>
<li>Requires a working copy of <a title="SWIG - Simplified Wrapper and Interface Generator" href="http://www.swig.org/" target="_blank">SWIG</a>.  Again, look to the SWIG instructions, but it should be easy.</li>
<li>Once SWIG is available, building the QuantLib/SWIG interfaces should only require:</li>
<p><code>sh autogen.sh</code><br />
<code>./configure \</code></p>
<p>&#8211;with-jdk-include=${JAVA_HOME}/include \<br />
&#8211;with-jdk-system-include=${JAVA_HOME}/include/linux<br />
<code>make -C Java</code><br />
<code>sudo make install</code></ul>
</li>
</ul>
<ul>
<li>Now you’ll have a Jar file with all of the SWIG/JNI stubs in it available in /usr/local/lib/QuantLib.jar.  Add this to your classpath.</li>
<li>Programs which call QuantLib functionality will need to have the <code>LD_LIBRARY_PATH</code> set.  This can be done by invoking the vm with something like:</li>
<p><code>-Djava.library.path=/usr/local/lib </code></ul>
<ul>
<li>Programs which call QuantLib functionality will also need to explicitly load the QuantLib libraries.  This can be done with something like the following static block appearing before your main method:</li>
<p><code> static {  // Load QuantLib<br />
try { System.loadLibrary("QuantLibJNI"); }<br />
catch (RuntimeException e) { e.printStackTrace(); }<br />
} </code></p>
<li>That’s it.  Now test your configuration by running the examples in Quantlib-SWIG/Java/examples.</li>
</ul>
<p>It’s worth understanding how Quantlib is being used from java.  SWIG is creating a JNI interface into those methods within Quantlib which have been exposed through their declaration in the swig *.i files.  These files are found in Quantlib-SWIG/SWIG and they determine what functionality from Quantlib will be available to you.  You’ll likely need to get familiar with a subset of those files that you care about. If you find that some functionality you care about isn’t exposed in those files, you may need to expose it yourself.</p>
<p>There’s a learning curve, but it’s worth traversing so you can get at all the rich functionality so many smart people have put together.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.puppetmastertrading.com/blog/2008/06/14/using-quantlib-from-java/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>finding a niche at trade tech</title>
		<link>http://www.puppetmastertrading.com/blog/2008/03/07/finding-a-niche-at-trade-tech/</link>
		<comments>http://www.puppetmastertrading.com/blog/2008/03/07/finding-a-niche-at-trade-tech/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 14:27:27 +0000</pubDate>
		<dc:creator>tito</dc:creator>
				<category><![CDATA[FIX Protocol]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.puppetmastertrading.com/blog-test/?p=48</guid>
		<description><![CDATA[ This week we spent a few hours at the tradetech conference to see what people in the industry are up to and see some demos.  Their &#8220;certified&#8221; logo inevitably reminded me of an old colleague who would from time to time mimic an old saturday night live skit.  We saw some interesting [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://puppetmastertrading.com/images/tradeTechCertifiedStamp.jpg" alt="" align="left" /> This week we spent a few hours at the tradetech conference to see what people in the industry are up to and see some demos.  Their &#8220;certified&#8221; logo inevitably reminded me of an old colleague who would from time to time mimic an old saturday night live <a title="if it's not Scottish..." href="http://puppetmastertrading.com/images/scottish_crap.mp3" target="_blank">skit</a>.  We saw some interesting things and, most importantly, found that our creative niche remains our own.</p>
<p>The booths we checked out included a few of the big sell-side firms shilling their creatively-named execution quality algos and their white-labeled oms/ems offerings.  They had, by far, the best shwag (I should thank Merrill for their nice umbrella and commend citi for the very knowledgeable lady at their booth) but their algo offerings weren&#8217;t very interesting to me as they aren&#8217;t of the alpha-seeking variety.</p>
<p><span id="more-48"></span> My favorite exhibit from an innovation perspective was actually a <em>hardware</em> offering from a firm named <a title="Tervela" href="http://www.tervela.com" target="_blank">tervela</a> which makes, essentially, a complex-event-processing (CEP) engine implemented in hardware.  Very cool.  I can&#8217;t imagine why any big shop would use any other sort of CEP solution.  I had heard of them before as a guy I knew had joined them before their product had been delivered, so they were already on my radar, but seeing the hardware running was a big next step.  Given the nature of their offering, it actually seems to me to have a bigger market in military than trading applications, but in both spaces it looks pretty compelling.</p>
<p>We looked at a few of the ems/algorithmic trading vendors and they didn&#8217;t offer any surprises but still had points of interest for us.  The three systems we looked at were <a title="Portware" href="http://www.portware.com" target="_blank">portware</a>, <a title="Tethys" href="http://www.tethystech.com" target="_blank">tethys</a>, and <a title="flextrade" href="http://www.flextrade.com" target="_blank">flextrade</a>, and they can all credit themselves with knowledgeable, engaging and enthusiastic presenters in their respective booths.  The platforms each had their own personalities and strengths.  Portware had a very pleasant looking user interface and was, to me, most intuitively laid-out.  The tethys platform seemed to have a real affinity for options and had sophisticated analytics to support that inclination.  And flextrade just seemed like the most solid and mature of the platforms, but it&#8217;s hard to know such things from a trade show drive-by.</p>
<p>I was very interested to see that each platform offered user-interface level programmability via scripting of the sort I&#8217;d spoken of <a title="the problem with easy" href="http://puppetmastertrading.com/blog/2008/02/22/the-problem-with-easy/" target="_blank">here</a> but with a big difference.  Instead of providing a scripting language, portware and flextrade offer users the ability to bring up an editor and add columns to tables via the platform&#8217;s native programming language &#8211; java and c++ respectively.  Whew &#8211; can you imagine your average end-user whipping out some c++ to add a column.  Mutant super users, maybe!</p>
<p>Overall we were very impressed by these trading systems.  In particular we were happy to note that their strengths aren&#8217;t ours.  If you want to use, say, <a title="Lehman Brothers" href="http://www.lehman.com/" target="_blank">lehman&#8217;s </a><em>super-ginsu </em>execution strategy (I&#8217;m making up that name), all of the platforms have the order available as a custom FIX order type which you can easily select from a pull-down menu.  So their integration with a multitude of sell-side execution-quality algorithms is very complete and seems well-done.  But their offerings are very limited compared to our own when it comes to the development and analysis of alpha-seeking strategies.  They&#8217;re really not even close and it seems clear that their emphasis on the resource-intensive efforts of connectivity and broker integration has allowed us to create the class-leading platform for alpha-seeking strategy development.</p>
<p>So it was good to see the state of the industry and it was especially good to see our niche persisting at trade tech.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.puppetmastertrading.com/blog/2008/03/07/finding-a-niche-at-trade-tech/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://puppetmastertrading.com/images/scottish_crap.mp3" length="40541" type="audio/mpeg" />
		</item>
		<item>
		<title>Putting the pieces together</title>
		<link>http://www.puppetmastertrading.com/blog/2007/10/12/putting-the-pieces-together/</link>
		<comments>http://www.puppetmastertrading.com/blog/2007/10/12/putting-the-pieces-together/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 13:37:36 +0000</pubDate>
		<dc:creator>tito</dc:creator>
				<category><![CDATA[EMS Internals]]></category>
		<category><![CDATA[FIX Protocol]]></category>

		<guid isPermaLink="false">http://www.puppetmastertrading.com/blog-test/?p=29</guid>
		<description><![CDATA[
I&#8217;ve zipped through a whole bunch of algorithmic trading stuff over the last several posts.  Judging from the expressions on the faces of some very smart and experienced wall st professionals when I&#8217;ve covered the same material, it&#8217;s not obvious stuff.   So, I&#8217;m going to back-track a bit by describing what each [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="it all fits?" title="it all fits?" src="http://puppetmastertrading.com/blog/images/puzzle.jpg" /></p>
<p>I&#8217;ve zipped through a whole bunch of algorithmic trading <em>stuff</em> over the last several posts.  Judging from the expressions on the faces of some very smart and experienced wall st professionals when I&#8217;ve covered the same material, it&#8217;s not obvious stuff.   So, I&#8217;m going to back-track a bit by describing what each of the pieces are and how they fit together.</p>
<p>We&#8217;ll start with a trading strategy.  What is it in an algorithmic trading context?  Conceptually, it&#8217;s a simple enough thing.  It&#8217;s something that can study market data and can manage positions.  That&#8217;s really it.  Its &#8220;eyes&#8221; monitor one or many sources of market data and its &#8220;hands&#8221; are poised over an Order Management System.  There&#8217;s obvious potential for complexity with this simple definition and we&#8217;re even leaving out potentially important elements, but for now we&#8217;ll take this to be pretty much it.</p>
<p><span id="more-29"></span><br />
The market data might be a simple stream of &#8220;bars&#8221; or &#8220;candles&#8221; representing a summarized  Open-High-Low-Close-Volume (OHLCV) data.  It might be a stream of time and sales tick data.  It might include information on the market depth or order book.  It might be many such streams of compressed or direct data.  Maybe it comprises news as well and maybe some kind of layer &#8211; like a Complex Event Processing (CEP)  engine &#8211; helps make sense of the streams as they arrive.  Whatever.  Conceptually, it&#8217;s one or more streams of data that the strategy receives.  How it uses this data &#8211; whether to annotate a complex pre-existing financial model of the universe or to simply seed a random number generator which flips a conceptual coin on whether to buy, sell, hold or fold &#8211; is not important at this point.</p>
<p>When the strategy decides that it actually wants to do something, it interacts with its OMS.  OMSes predate algorithmic trading and come in a variety of flavors.  On the sell side, an OMS might be a server system which &#8220;listens&#8221; to clients&#8217; orders and routes them to various exchanges or counter-parties and then echoes back executions, cancels, etc when appropriate. I&#8217;ve built and worked around such beasts, and they can be complex and interesting but this isn&#8217;t really what we&#8217;re talking about here.</p>
<p>We&#8217;re more concerned with a buy side OMS which will typically sit on a trader&#8217;s workstation and provide access to one or more markets, a trading blotter, and possibly various ancillary functions including portfolio management and analytics, risk management, reporting, compliance and regulatory functionality and potentially much more.  But the basic function of the OMS is to provide a means of managing positions: entering, cancelling and modifying orders and creating and updating positions on receipt of execution reports.  Such client-side OMSes typically will have a Graphical User Interface (GUI) which is frequently quite sophisticated and might include all sorts of bells and whistles.  Increasingly, OMSes are opening themselves up to programmatic interaction through proprietary Application Programming Interfaces (APIs) or through common standards like the <a target="_blank" title="FIX Protocol" href="http://fixprotocol.org/">FIX Protocol</a>.</p>
<p>This is how the algorithmic trading strategy can interact with the OMS &#8211; through some kind of an API.  This, incidentally, is also how it will interact with the market data &#8211; it will typically subscribe to a set of data and then passively receive notifications of changes &#8211; through an API.  So, a trading strategy will have at least a subscription-based relationship with a market data service and a close working relationship with an OMS.  It may have many other such relationships, but these two are the minimum necessary.</p>
<p>It&#8217;s worth noting that this basic algorithmic trading setup is also what&#8217;s required for a <a title="wetware" target="_blank" href="http://en.wikipedia.org/wiki/Wetware">wetware</a> trader &#8211; in all cases you need to know where markets are trading and you need to be able to place orders and receive responses.  As OMSes have opened up to programmatic interaction, a new kind of software has emerged &#8211; the Execution Management System (EMS).  EMSes come in a variety of flavors but they&#8217;re important for our purposes because an algorithmic trading strategy needs a place or container in which to do its thing.  This place is the EMS.  The line between the OMS and EMS is blurry, but the OMS provides the baseline functionality (and maybe a whole lot more) while the EMS will typically rely upon an OMS and provide some special, specific functionality.  Thus, most algorithmic trading products are EMSes in this sense.</p>
<p>Now that we&#8217;ve covered a basic trading strategy and its primary collaborators, we&#8217;re positioned to look inside a strategy container and try to make sense  of what it&#8217;s doing and how it does it.  Which is what we&#8217;ll do next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.puppetmastertrading.com/blog/2007/10/12/putting-the-pieces-together/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
