Macro buttons – Coding your problems away

Macro buttons. As the name suggests, it is a macro embedded in a button. They’re one of Murex most powerful features as they expand what eTradepad can do by a massive factor. While I can’t give code here of what macros can be (ok I could do examples, but won’t anyway), I’ll describe usages and hopefully inspire you to start using them.

Macros are setup from pricing templates, that’s where you code them. They follow exactly the same code than eTradepad so you can first test your macros via etradepad. The trick with macros is that you usually want to have them triggered on request. To emulate a similar behavior in eTradepad, you can simply put a condition to execute the code if the comment field has a value of 1 (or Go, or Eureka or “Peter Piper picked a peck of pickled peppers” if you wish to see that the comment field is indeed limited in characters). And during the course of your code, you empty the field.

Assuming you can code and what I mentioned above is not complete Chinese to you (or Icelandic in case you’re fluent in Chinese), then your next question should be: but what can I do with macro buttons?

That’s a great question (and the part where I can’t give you code examples) but I can give you contexts as to where I saw them used:

  • Creating a series of transactions in eTradepad by reading a lookup table. Indeed you can easily insert legs via coding in eTradepad and if you find a way of populating a lookup table with the trade data, then you’re golden. This is especially useful when the users need to review/amend the trades before injecting them into Murex
  • Solve a strategy. That’s another good one. The trader defines its strategy (or uses an existing one) and when he needs the strategy to be priced a certain way, the macro can setup the global parameter, set some values and trigger the solver by changing the total value of the NPV.
  • Mirror transactions and perform variations. The mirror task in the workflow is usually the best when back-to-back or hard margin transactions are entered. But it gets harder and harder to configure once you start getting into non perfect back-to-back or when the user wishes to perform manually amendments to the copy. Macro can do that for you, they can copy the leg and do changes before letting the user change what he/she needs.

As you could read, the macros have a wide array of functionalities and they’re not restricted to being a combination of existing Murex buttons. They actually do much more than that. So let’s get coding some macros… Hum, maybe not, you won’t need to code a new one everyday but at least if one user comes to you with a request, they will be another weapon in your war against issues.

The walls have ears

One of the particular thing I love working with Murex is the cultural mix. Often you meet people of different background, different culture and different language. That’s a very enriching experience and a great opportunity to learn more about the world.

But back to different languages and where I’m trying to get this post to: it is considered rude to speak a different language if a person in the conversation cannot understand/speak that language. The problem is that often the 2 people revert back to their language, especially when it’s native, when:

– A presentation is going the wrong way (“Merde, ca crashe, comment je vais leur montrer ce truc” google translate is kinda your friend)

– They don’t know how to say the word in another language (“Comment on dit deja xxxx”)

– They try to pick up girls. Ok, I’m getting off topic here. Moving on

– They believe they’re by themselves.

And the latter one is the one I wanted to focus on (I know it’s probably the longest introduction ever).

Often you have people who want to discuss something privately and when you are on customer site, using a different language gives a bit of privacy and you also get the feeling that using a more native language is more accurate.

The problem is that there are people who can understand your language (except if you speak esperanto, then finding someone to talk with is quite an achievement!). Add that and whispering voice and you get the perfect recipe for letting some information out.

So as a rule of thumb only discuss with people around what you are comfortable for them to hear and understand (even if it is in a foreign language). If the conversation is more private, then discuss it really privately.

Did you have any experience (be it on either side) of something like that happening? Or did you start learning other languages just to understand what other people are saying?

Rate curves more tips

Rate curves how often did you get the dreaded message: Could not compute mid rates for curve XXX. As rate curves are so important, you can expect that everything else fails: pricing, simulation, some other market data calibration, accounting, etc… In a nutshell, you need to fix that rate curve problem ASAP!

When a curve fails to calibrate there could be different issues: one instrument in the curve is not sensitive to the curve, instruments have a price of 0 and 0 is not an accepted rate, your curve relationship is so complex that you cannot reach a solution within 30 iterations.

Whenever a curve is not calibrating, it is important to open the instruments in the rate curve and check that you get properly 0 NPV for all of them. You cannot do it for Futures (or contango or Fx swaps), so you’ll have to assume that they work. If you get an instrument with a non 0 NPV, then either you found the culprit or you have an arbitrageable curve. In the later case, if you were not doing something completely crazy, that’s a defect as curves are basically solved so that all instruments have a 0 NPV.

When you found the instrument(s) you should have a look at it and wonder how should it be sensitive to the curve that currently fails calibrating: discounting? Estimation? If estimation, you can go to rate details on the flow screens and check that you properly see the curve name. If for discounting, you can check in the pricing the assigned curve and also the solved value in the discounted flows. Usually it is quite clear to see which one fails.

Once you found it, go to the rate curve assignment and assign that instrument for discounting or estimation onto the curve. 95% of the time that fixes the issue. And if the calibration fails in production (assuming it was working before), I’d do pretty much the same except that I would first check the market rates fed in (in case you have something with very incorrect values).

The problem of rate curves not calibrating gets tougher when you have multiple rate curves calibrating at once. We already posted on such structure previously and I have to say I rarely saw any calibration issue when the system was used correctly. I have to say that when you’re trying some advanced curve relationship, first of all, inform Murex as you will need their help; secondary you can expect some calibration failure. But again zooming on the instrument and checking estimation and discounting is always the basic thing to do.

One thing you have to be wary of is when the instrument you use is sensitive to the curve only by its indexation. I had some hit and miss (more hits in the recent versions) but when you get to that point it is more workarounds for matching an existing rate building process rather than a financial reason for doing.

If you have tips, info or question, feel free to ask below!

Good news for today!

This is some good news for today. Nothing such as something nice to start the weekend gloriously!

Have a read at this article, I think it will make you feel good (it did for me). Without spoiling much, have a read: it’s short and completely safe for work.

Efinancialcareers post

It’s nice to see that our skills are highly valued! Don’t bother wondering if the post is biased or not. Just enjoy the good feeling and have a nice weekend!

Updating SSIs in bulk – How I did it

Practical case: today, someone asked me if I could help: some trades were imported and for these ones, everything has to be considered fine: even if SSIs are missing, future flows have to be ok and not appear as missing SSIs. New trades on the other hand (even if they are on the same counterpart) have to have proper SSIs or return a missing SSIs message.

Putting some dummy SSIs (catch’all) would not work as it would affect new trades as well. Even putting a validity up to yesterday would not work either as future payments from existing trades should not show any missing SSIs error.

So the only solution I thought of: specific SSIs for imported trades. I was not completely sure of the table holding SSIs (I had to confirm it), so I entered a trade with customized SSIs and I put in one of the fields a very specific string (if you’re curious ABCDE, yes I know, very very original). Then I searched through the DB trace file (see earlier posts for how to) to find the table.

The problem I then had was that the table had a field Trade number that was not in line with my trade number (even if I was sure it was the right trade). So I searched the trace file for the trade number that I did not know about and could find it within the transaction header of the transaction. So I then had everything: from my deal number to intermediary reference (in my case it was only 1 but there could have been multiple) to final data.

Turning that into a script was then a breeze (for people curious enough I’m using the same specific dummy SSIs for all the imported trades) and voila! you now have specific SSIs for all imported trades and new ones will fetch automatically from the SSIs assignments.

Is that a perfect solution? Of course not, you can have issues upon performing events but still, it a very valid one.

Murex error messages through the ages

Today, when you have a crash, the message is pretty standard and very intelligible but it was not always like that let’s review what they were.

Murex error messages : the X-windows era

Time: time before 2000/2001

At the time of X windows, there was no error message as such. If a session was crashing, basically the process would stop straight away on the server side and the window would simply disappear on the client side. Did you really have a crash? Or did you close it by mistake? You can never be sure and it was always confusing. Probably the best time for supporting customers 🙂

Murex error messages : Fatal error

Time: from 2000/2001 to ca 2005

When Murex released the Mxg2000 version, the software architecture changed. On the client side, you had a thin client running. As such, if the process crashed on the server side, you then had to display something on the screen. So they settled for probably the largest error message possible: Fatal error for session detected for process XXX. Session will now close (I’m not completely sure I nailed it exactly as it’s been some times!). All I remember is that the error could span on your whole screen especially if you were just using a 15′ screen.

Murex error messages : Maybe?

Time from ca2005 to ca2009

Alright, to be fair this was the error message that motivated me to write this post: The error message ended in Service is maybe dead. Technically it was correct: the client could not connect anymore to the server process. So maybe it was dead.

Problem is that for end users the results was the same: close and restart a new session. And if you had few crashes in a row, you would wonder if Murex was mocking you. Yeah maybe it was 🙂

Murex error messages : Modern times

Time from ca2009 to now

Sadly (for this post I mean), Murex is crashing less and less and we probably reached the most clear and intuitive message to date: “Process is not valid anymore. Session will now close.” It’s not too long it’s concise. Unfortunately you can get access to the java stack that many people still like to sent but as the crash occurred on the server side, the java stack just shows that the client cannot connect anymore.
Anyway, after few iterations, the message is now crystal clear!

Dear reader, my memory is not what it used to be. So if you see an error (haha) or something missing, please let me know and I’ll correct it.

Market data interface – How to get them in!

In this post, I won’t cover the different types of market data you can have in the system. Think about one and Murex will have it already either natively or through the user definable market data. Today, we’ll focus on Market data interface and the different means to load that data in!

Market data interface – The UIM

UIM does not stand for Ultimate Iron Man but Universal Input Method aka manual input (sounds less fancy that way). While many people would look down at the manual input, it is actually often relevant. If you’re considering a very small amount of data, that requires sanitization and is limited to a few times through the day, manual input is a good solution. Especially when you can set it up so all you need to do is copy/paste. I don’t say you should always push back on interfaces (well, actually I do) but you should actually consider it in many cases.

Market data interface – MDCS

Let’s dive into more acronyms (nothing to do with Marvel DC comics Series), MDCS stands for Market Data Contribution Service. This interface is mostly used for realtime market data feed.

How does it work? You have a service: RTBS (I’m running out of Superheroes jokes (already!)), export, direct publication which published data to a memory : MDCS (also called cache for aficionados). You can query the content of the cache either through XML request scripts or via the monitor.

The data is structured into multiple pages, with multiple nicknames.

From there, you can push that data either to database via a processing script. You can retrieve it via XML requests (note to all tinkerers: do not use that service as a way of distributing market data to all bank systems, you’ve been forewarned!) or have Murex sessions accessing it via activity feeders. Activity feeders give you the opportunity of choosing which type, page and nickname of market data can the session access.

So as you should have understood now: MDCS is the realtime service in Murex. And it is better used that way. For end of day, you should rather stick with the one after: MDRS.

In case of issue with realtime, you first need to check via monit or xml request scripts if the market data in the cache is properly updated. Which one to use should not even be a question as monit is easy and user friendly to use. If you can’t get the monit password, let the one with the password handle the issue!

If the data in the cache is properly updated. Your issue comes then from the activity feeders. You can restart them if required after trying with a new session (you should get an error message if the session can’t connect to them). If there is no error message, no realtime, check that you have indeed assigned an activity feeder to your session.

That’s the basic debugging of MDCS: check the cache, check the activity feeders and check the user settings.

Market data interface – MDRS

Market Data Repository Service. First of all, some good news! XML request scripts are almost identical to MDCS ones.

MDRS lets you retrieve and update the database directly via XML request scripts. It is effectively more efficient than MDCS-Processing script as you do everything in one go without having a stopover in the cache.

MDRS is actually pretty robust and never had too many problems with it especially if you read properly the documentation AND put the right tags in the right order. The usual trick with MDRS is to first query some market data to get the structure of the XML. And then add your Update command and modify the values as desired.

Again, Murex role is not to be the Market data repository for the whole bank. Murex primary role is to provide pricing, risk, processing services not centralize the bank market data.

Debugging MDRS is usually quite simple as you get an answer file and a log file whenever you kick in the XML script. Just fix as appropriate and you’ll be good to go!

 

That’s the 3 means of getting data in Murex, note that the services are always improved to cater for newer type of market data and especially when you’re working on new type of market data, you need to ensure that MDRS/MDCS properly support it. Otherwise, the UIM will always work!

Murex Easter eggs

Murex Easter eggs? Here’s one question that comes back from time to time and as it is chocolate season this weekend, So before you start punishing your liver with all the cocoa you can get your hands on, have a read!

Murex Easter eggs – Definition and Considerations

So for whoever never heard of Easter eggs in a software, they’re tiny features (or often games) which are hidden and can be triggered by a specific series of keystrokes or clicks. For instance, if you are using chrome, when internet is disconnected you get the pic of a dinosaur. Press space bar then and the dinosaur starts running across the desert.

Alright, so to the question: are there Easters in Murex? The answer is I don’t know. So far I haven’t seen any actual ones (but I’ve got more things to share or this post would be incredibly short!) but I’m curious if there are any. One one side, Murex is a software used to trade and supports critical services. So I’m not sure customers would really appreciate that some of the development time and code is used for coding Easter eggs. Especially if you get a bug/regression because of a Doom-like game hidden in the software. On the other hand, you have developers spending days and nights on their keyboards writing lines after lines of codes, one could assume that among all these developers, one would sneak in something funny just to release some pressure.

So if you know of actual Easter eggs, please share otherwise I’ll move on to some features which are close to Easter eggs

Murex Easter eggs – Murex typo

While there are quite a few typos in Murex, here’s an example of a typical one:

– Fx settings: Use of the word Inhibate. Of course if you activate, you can then Inhibate… Not really a word in English but you get the meaning.

Murex Easter eggs – Undocumented feature

I did not test it on more recent Murex versions, but when trying to define Commodity spot indices, the label box would not appear. You can’t save it or anything without populating the non existing box. The solution? Change the index type once the definition box is opened and revert back to spot index. The label box is back!

Murex Easter eggs – And probably the best one

This one was developed on purpose and it is probably the closest thing you can get to an Easter egg (after your omit of course the Hawaian beach feeling from the option series). Anyway, the purpose of that development was to make it easier for people doing comparison testing to know which Murex screen was running a different version.

The problem of that function, it was certainly coded by someone high on LSD or effectively color blind (as such, Murex would be just 50 shades of Grey(Sorry for that one)). The color selected could have been pastel or slightly different, but no, the color mix is what you get from a leprechaun after St Patrick’s night when he partied high on rainbows. Best is to try it for yourself but brace yourself for seizure!

In your session arguments, add /FREAKMODE and start tasting the rainbow!

If you have some pearls to share, please do but in the meantime Happy Easter!!