ArbitragePrediction MarketsCrypto

Cross Platform Prediction Market Arbitrage

How to double your money risk free with duration crypto markets

There has been a recent upsurge on X about AI prediction market slop spending 1000 words to say yes + no < 1 = profit. Some are even daring enough to step it up and mention neg risk market arbitrage to their swarms of reply guys. Well, none of this is anything new and certainly not worth competing in.

While I am no better than them, I took this a step further and discovered a very simple but neat resolution criteria to not only have a fully hedged arbitrage position but also be able to win both legs if you have a bit of luck.

TLDR at the bottom

So what is it and where’s the alpha?

Polymarket and Limitless exchange both have what I termed Duration Crypto Markets. Essentially, a price is set at the beginning of the market and you can bet on if the price of the asset will be above or below the set price after some duration. I focused on the hourly timeframe as Polymarket and Limitless both contain these markets but the strategy will work for any time frame as long as the asset and resolution time are identical.

In traditional prediction market arbitrage scenarios, the markets must match exactly in terms of resolution criteria and all possible outcomes must be purchasable for < 1 to profit in the end. Hourly crypto markets are no different. We can match the outcomes (yes/above, no/below) and the asset, but the resolution prices use different pricing sources which lead to different resolution criteria. On first glance there is no clean arbitrage opportunity here as they are not an exact match, but with a bit of thought we have a neat situation arise.

Let’s use a real hourly example demonstrating how this works.

Polymarket hourly ETH market

Limitless hourly ETH market

Above are two screenshots of the hourly ethereum markets on Polymarket and Limitless respectively. Note that 9:00 PM ET on the 12th is 2:00 AM on the 13th. The Polymarket resolution price is ETH @ $3,108.59 while the Limitless resolution is ETH @ $3,105.07.

For the moment, assume there is an arbitrage available across the two platforms. Take a second to think about the expected payout of yes (POLY) + no (LMTS) < 1 and no (POLY) + yes (LMTS) < 1 based off all possible resolutions. Hint - they are NOT the same.

The key thing to notice here is that the spread between the resolution price of Polymarket and Limitless creates a grey area where both legs of the arb can resolve to 1. By buying yes on the lower resolution (Limitless) and no on the higher resolution (Polymarket) you not only cover all possible resolution prices, but also capture the case where the price resolves within the grey area and both legs win. A worked example follows below.

Once you determine which side of the market to purchase on each platform, the rest follows like a typical prediction market arbitrage. Monitor the books for each side and when the sum is less than 1 purchase min(available yes, available no) shares on each platform.

Worked Example

Polymarket @ $3,108.59, Limitless @ $3,105.07.

If you purchase no (POLY) + yes (LMTS) < 1 there are the following resolution outcomes:

Price > $3,108.59: Polymarket leg resolves to 0 while Limitless leg resolves to 1. This is highlighted by the pure blue etches at the top.

Price < $3,105.07: Polymarket leg resolves to 1 while Limitless leg resolves to 0. This is highlighted by the pure red etches at the bottom.

$3,105.07 <= Price <= $3,108.59: Polymarket and Limitless legs both resolve to 1. This is highlighted by the blue and red etches in the middle.

Arbitrage resolution diagram

But what if we go the other way? If you purchase yes (POLY) + no (LMTS) < 1 there is a zone where both legs resolve to 0 and you lose everything.

Reverse case - both legs lose

This is why we buy no on the higher resolution and yes on the lower resolution.

Well, did it work?

Yes! I did capture many successful arbitrages this way. As far as I can tell, I was the only one running this strategy. I only ran it on perfectly matched hourly markets, but it will work on any market where the resolution time is the same. For example, you could match a 15 minute market and a daily market as long as they resolve at the same time. The spread between prices is often much greater for these types of pairs which increases the odds of resolving in the cross much higher.

Why did I stop?

Lots of reasons:

  1. Polymarket introduced a 500ms taker delay for duration crypto markets which makes getting filled much more difficult.
  2. Limitless API is unstable and the docs are abysmal.
  3. Limitless does not open source their fee mechanism. If you try to run this to full capacity not having the proper fee calculation can put you in the hole instantly when you thought there was an opportunity. I got a decent estimation by feeding Claude a bunch of datapoints and having it reverse engineer the fee formula but it was still not great.
  4. Limitless volume is not great which reduces the number of potential opportunities.
  5. Lack of FAK orders on Limitless. Limitless only supports FOK orders so sometimes you get filled on Polymarket but can’t fully fill on Limitless so you are left with a whopping 0 contracts on Limitless and have a fully unhedged Polymarket position open.
  6. There are other things I’d rather focus my time and energy on :)

Wrap-up

Hopefully this provided a little bit of insight and is a breath of fresh air from all of the AI prediction market garbage going around.

I am not going to open source the code at this current moment as I still have some stuff I am toying with but any sufficiently motivated reader should be able to accomplish this on their own.

Some parting advice to anyone who would like to try their hand at this:

  • Run your box in eu-west-1 for the best Polymarket latency. Although, this adds about 100ms of order submission latency to the base sequencer in comparison to if you ran it in us-east-1.
  • Using open source Polymarket SDKs can save some time but none optimize the client for order submission. Either fork or write your own.
  • Limitless supports both a CLOB and a Fixed product market maker for their markets. If you would like to trade the FPMM markets you should fully offchain the implementation and interact directly with the chain skipping the API.

TLDR: Duration crypto markets use different sources for resolution price which creates a grey area between prices where each leg of the arb can resolve to 1.

Feel free to reach out with any questions, comments, or just to say hi!

Till next time