Virtual Markets, Part Four: Shocks and Dip Detection

In our last article we took an in-depth look at price floors and other related phenomenon in Old School Runescape, including the opportunity costs of botting, capital controls, real-world trading, and more. In this article we will investigate market shocks, how they manifest in OSRS, and how we can develop reporting strategies to accurately detect dips resulting from shocks.

Disclaimer: This article is strictly academic in-nature and does not constitute financial advice. I have deleted my OSRS accounts and have no stake in any position within the game.

Shocks

What is a Shock?

A shock is any market event involving a sudden change in supply, demand or a combination of both for a good or service resulting in either a temporary or permanent change in equilibrium price.

Supply shocks can manifest in many different ways. One example involving an increase in supply includes the recent “flooding” of Chinese electric vehicles into the European automobile market, resulting in a reduction in equilibrium price. Examples of shocks resulting from a reduction in supply include regulation banning the production of R22 refrigerants, as well as the supply-restricting function of the ongoing “war on drugs”; as a result, Freon and illicit drugs are both more expensive today than they were prior to the implementation of supply-choking regulation.

These examples are in-contrast with demand shocks; in 2020 following the onset of COVID-related travel restrictions, demand for oil temporarily vanished. With supply remaining mostly unchanged, oil futures briefly became liabilities rather than assets, taking-on negative value. Likewise, demand for popular new gaming consoles can overwhelm supply during holiday shopping seasons, resulting in arbitrage being carried-out by scalpers, with prices rising as a result of a surge in demand.

Supply and demand shocks can also be differentiated by whether they are permanent, or temporary. Permanent shocks feature long-run changes in equilibrium price. Temporary shocks on the other hand do not feature substantial changes in long-run equilibrium price, resulting in distinctive “spikes” or “dips” in their graphical price history. The 2020 stock market crash and swift recovery provides an excellent recent example of a “dip” resulting from a temporary shock.

Why Should We Care About Shocks?

Just as we discussed in our last article concerning price floors, there are market conditions involving shocks which we can monitor, report against, and profit from. Shocks represent market abnormalities which we can capitalize on in circumstances where other parties sacrifice longer-term returns in-exchange for short-term supply or liquidity.

Capitalizing on shocks involves any trading strategy which attempts to capture returns on the difference between equilibrium price and the price presented during a shock. Notwithstanding more complicated mechanics of securities exchanges including short positions and other options trading strategies, in the case of price “spikes” this involves purchasing a commodity at equilibrium with the intent to sell during a future shock, while in the case of price “dips” this involves purchasing a commodity during a shock to then sell at a future equilibrium price.

Trading in such a manner does not come without risk; there is always a possibility that a trader may incur loss if the direction and magnitude of supply and demand unfavorably impact price. It is also important to note that, notwithstanding short positions, there is no circumstance where a permanent price reduction is desirable for a trader.

Just as real-world markets are subject to shocks, the market of Old School Runescape provides us with many examples to observe and understand.

How Do Supply and Demand Shocks Manifest in OSRS?

We discussed some of the following examples in our last article:

  • The release of the “Desert Treasure II” quest in 2023 caused a massive supply shock involving many different in-game commodities. In that particular circumstance, the presence of price floors resulted in the shock being a temporary dip, with long-term equilibrium price remaining mostly unchanged.
  • The items “Rolling pin” and “Red spiky vambraces” were both briefly discussed; both of these items experienced a sudden surge in supply resulting in a drop in price, followed by a return to the previous market equilibrium, representing a dip.
  • In the addendum, we discussed the price history of Nature Runes. Despite this item holding a very consistent long-term equilibrium price throughout the past year, in recent months it experienced a mixture of supply and demand shocks resulting in a sharp rise in price followed with a sharp reduction, representing a spike.

Supply and demand shocks are features present in almost any market, so identifying examples in OSRS is not particularly difficult. On the other hand, finding examples of profit-yielding opportunities that we are capable of reporting against requires a bit more work.

Developing our Trade Strategy

Price Spike Trading Mechanics

Trading on the prospect of future price spikes, whether temporary or permanent, necessitates forecasting changes in a market. While this presents an extremely lucrative opportunity for profit generation, it is impossible to tell the future with absolute certainty, which is true in OSRS as much as it is in real life.

Let’s take a look at one of my favorite examples of a price spike in OSRS:

In late October and early November 2023, a mundane commodity, “Beer glass” experienced a temporary surge in demand, resulting in an extreme price spike.

How did this happen, and how could anybody forecast these conditions?

On October 28th, 2023 a player published a skill training strategy involving an otherwise “dead” piece of game content. This provided a low-attention approach for training an otherwise high-attention skill, effectively changing the game meta. As more players concurrently participate in this training method, the efficacy of the method improves, further fueling the method’s virality as players encouraged each other to join.

This piece of game content just happened to consume beer glasses through an item sink, resulting in the price spike seen in the graph. As supply eventually caught-up with demand, and as interest in this training method waned with its critical mass of players evaporating, price returned to its prior equilibrium.

While many players made (or lost) small fortunes throughout this window of hype buying and selling beer glasses, most of this activity was the result of traders reacting to a shock, buying-in at above the market equilibrium rate, effectively placing a wager on a continued increase in price. The only person who could have forecasted this shock would have been the individual who published this strategy on Reddit.

There is no reporting strategy that could have been employed to forecast this spike. This is due to the simple fact that no quantity of historical market data can convey or anticipate the emergence of theory-crafting musings posted by a bored redditor. An anomaly like this one can only be realistically detected after it has already started.

As much as we might like to pretend that we can look into a crystal ball and predict the future, we will never know the future with absolute certainty until it becomes the present. While the above case of beer glasses presents a pretty poignant illustration of the futility in attempting to forecast unpredictable events, this same principle applies when we try to predict the impact of future game balance changes, the impact of litigation on markets, or whether the Federal Funds rate rises or decreases. As educated as we can try to make our guesses given a backdrop of historical data, at the end of the day forecasting is just speculation with added steps, hence the classic adage: “Past performance is no guarantee of future results”.

This isn’t to say that we are incapable of forecasting certain events with a significant degree of accuracy. For instance, I would wager to guess that Jagex is not going to make “Twisted Bows” available to purchase from NPC traders, nor will the Federal Funds rate be set at 20% next quarter. While these inferences are likely very close to the truth, they’re also mostly useless since obvious inferences have limited utility.

This also isn’t to say that we shouldn’t try to make extremely nuanced market forecasts; In the case of Reddit user u/Joyerinoosrs, they studied and revealed to the broader community a refined gameplay strategy which maximizes the opportunity cost of attention when training a specific skill, resulting in a demand shock for a specific commodity. It would have been extremely wise for this player to stock-up on beer glasses before revealing this strategy, unloading their position at the crest of the spike. Parallel behavior in real-world contexts might constitute illegal insider trading or securities manipulation, however within the context of OSRS this trading strategy is fair game.

While attempting to forecast the future can be extremely lucrative, accomplishing this feat with any useful degree of accuracy and utility requires extensive research and deep insight into markets beyond simply reporting against historical and current market data. This translates into reduced opportunity costs for traders; identifying niche potential future spikes requires the deliberate application of a trader’s time and effort which could instead be invested toward different trading strategies.

Price Dip Trading Mechanics

Unlike trading against price spikes, trading against price dips does not necessitate any forecasting whatsoever. While it is possible to attempt to forecast dips, and while doing so may be more advantageous than taking a purely reactive strategy, it is by no means necessary.

Successfully trading against dips begins with some elementary market logic: we need to buy low. Reactive strategies cannot apply to price spikes, because doing so necessarily involves purchasing a commodity after price has risen, violating this logic. On the other hand, this condition is fulfilled when purchasing a commodity as a reaction to a dip, since a dip reflects a reduction in price.

Next, we need to sell high. This immediately precludes trading against any permanent dips, since they present no profit potential; our target commodities need to be experiencing temporary dips. While there is no guarantee that a commodity purchased at a dip won’t continue to drop in price, this latent risk is present with virtually all other trading strategies, with the exception of trading against price floors. In the case of trading against dips, this risk is substantially mitigated since we intend to purchase commodities at as steep of a discount as possible.

While this method is arguably less lucrative than forecasting price spikes, this comes at the discount of vastly reduced reporting and research costs. With a reactive strategy, we do not need to attempt to understand the future at all, hence, we can reuse methodologies shared in our past articles in-order to develop an automated reporting tool. Examples of real-world trading strategies which leverage these fundamental concepts include dollar cost averaging where over-time, a greater proportion of shares of an asset are purchased when price is lower.

Grand Exchange Mechanics

Up-until now, our assessment of shock-centered trading strategies has not taken into account the impact of the various mechanics and restrictions imposed by our target market, the Grand Exchange. Besides taxes, there are three important mechanics to consider in the context of trading against market shocks:

  • Open Order Limit: A single character in OSRS can only have eight concurrent Buy (bid) or Sell (ask) orders open on the Grand Exchange at one time. This is in stark contrast with real-life exchanges which typically place no limits on the quantity of open options placed by a trader. While more concurrent orders can be placed on the Grand Exchange by leveraging multiple in-game accounts, this comes at a significant fixed cost of purchasing additional bonds/membership, as well as a cost of lost convenience since traders will need to switch between multiple game clients.
  • Buy Limits: Purchasing parties are subject to buying limits per-commodity, which expire in 4-hour intervals. These buying limits can range from as few as 4 units, to as many as tens or hundreds of thousands of units. Players can get around these limits by leveraging multiple accounts or ad-hoc trading with other players, however this comes with associated fixed or convenience-related costs.
  • Sell Limits: Or rather, the fact that there are none. While a player can only buy 10,000 empty beer glasses in a 4-hour window, there is nothing stopping a player from attempting to sell 1,000,000 beer glasses at any time. This applies to all commodities in the game.

These restrictions significantly alter the viability of each trading strategy in a handful of ways:

  • Forecasting Temporary Price Spikes: Open order limits can profoundly reduce the utility of this trading strategy. Forecasting shocks involve not only predicting magnitude but also when they are going to occur. Since knowing precisely when a future shock is going to occur is not generally possible, traders who wish to capture returns from shock-induced spikes must account for latency by maintaining as many Sell offers as there are commodities that they wish to trade, however this is an approach which the open order limit directly penalizes. Buy limits also impact this strategy in circumstances where a price spike is forecast to occur in the short-term; this can be mitigated if shocks are forecast to occur far enough into the future to account for a trader acquiring their desired quantity of supply.
  • Forecasting Permanent Price Spikes: This is a niche case where permanent price spikes present a trading advantage over temporary spikes; if a future price spike is expected to result in a new equilibrium price, there is no longer a requirement to maintain active sell orders. A trader can instead keep items in their inventory or “bank” and wait until after the anticipated shock has occurred before listing these commodities for sale at the new, higher, equilibrium price.
  • Reacting to Temporary Price Dips: Buy limits place a cap on purchase quantity during shock-induced dips, which can substantially impact potential profit in some circumstances. Open order limits on the other hand do not have much of an impact since Buy orders only need to be open for as long as a detected shock exists.

These restrictions become more interesting when we start to compare them outside of the vacuum of individual trading strategies and consider their broader impact on the dynamic between supply and demand.

Grand Exchange Bias Against Demand

Since buy limits represent a per-capita restriction on demand, a single player is limited in how much upward pressure they can exert on price for any given commodity. Likewise, since there are no sell limits, supply faces no restrictions and players have unlimited capacity to force downward pressure on price. The result is an inherent market bias against demand, when compared to supply.

This bias is multiplied due to the scarcity of open order slots; a trader who may wish to attempt to purchase a wide variety of different commodities must limit their concurrent scope to a maximum of 8. This further restricts demand-side market participation since buyers must consider opportunity cost when choosing what items they will consider bidding on regardless of their available capital, reflecting an even greater market bias against demand.

While supply-side is also subject to open order slot limits, efficient gameplay strategies typically involve acquiring large quantities of a single commodity at a time, rendering the open order limit a moot issue since only one open order slot is required to sell any quantity of a single commodity. However, in circumstances where a player is in a position where they desire fast liquidity, the restrictions placed on demand-side participation can force a seller to lower cost in-order to capture what limited demand exists at any given moment in-time.

Since the Grand Exchange marginalizes demand, price spikes are generally muted in their magnitude and occur over a longer span of time, while dips are extreme, yet brief; when traders recognize the appearance of a price dip, demand suddenly returns to the market, swiftly bringing price back up to its equilibrium. Dips also tend to occur frequently since demand-side participation evaporates once the equilibrium is met, causing the cycle to continue. Without the presence of a consistent cushion of demand, dips become an inevitable occurrance and will manifest any time a selling party desires immediate liquidity.

1GP Bidding and The Price Is Right

The phenomenon of market bias against demand is admittedly a bit difficult to digest since demand participation is seldom restricted in real-world markets. While we could try to draw comparisons between the Grand Exchange and the prevalence of international trade embargoes, the most intuitive comparison I can make involves the phenomenon of “$1 Bids” on the game show The Price is Right.

In the “One Bid” segment of The Price Is Right, four contestants each bid on a product. The winner is determined when a contestant’s bid is the closest to the retail price without going over, with a bonus awarded for an exact match. Despite these mechanics, a contestant may elect to place a bid of just $1. This is typically performed by the last bidding contestant when they believe that the earlier bids are all too high. Despite foregoing the potential of receiving a bonus prize, in many circumstances this approach ends-up being a safe winning strategy.

Let’s consider an alternate scenario where there is only one contestant. Under this condition, the most conservative winning strategy would be to always place a bid of just $1. While a contestant could decide to aim for the bonus, this would require the contestant to know beyond any reasonable doubt what the exact retail price of the good is, which is not likely.

Let’s consider a different alternate scenario where the entire studio audience participates in the bidding process concurrently. In this case, bidding just $1 will guarantee a loss; since there is now a pool of hundreds or even thousands of individual contestants, there is a correspondingly lower likelihood that everyone will over-bid. As a result, the competitive strategy in this scenario is to guess the exact retail price.

The quantity of competing contestants in The Price Is Right represents demand-side market participation. In the case of OSRS and the Grand Exchange with its heavy bias against demand, there may not even be as many as four demand-side participants in the market for a particular commodity. Instead, there may just be one, or even none at all. If a purchasing player is going to lock-up one of their scarce open order slots with a buy offer for an extended duration, they might as well offer as little GP as possible to maximize their opportunity cost of capital. Likewise, if a player wishes to sell an item, they may decide to set their sell offer for as little as 1GP in-order to force an “insta-sell” transaction with the intention of capturing the current highest bid in-order to obtain instant liquidity. As a result, many in-game items do experience a Price Is Right condition where a transaction can be executed for as little as 1GP, even if the true market equilibrium price is much higher. This effectively presents an extraordinarily high-ROI arbitrage opportunity when buying at certain price dips.

Selecting our Strategy

Given all of the aforementioned mechanics, we will proceed with developing a reporting strategy which specifically detects temporary price dips. As we discussed, forecasting is a dynamic and research-intensive pursuit; since I no longer play OSRS, nor do I keep tabs on changes and news regarding OSRS, I would be less qualified than any currently-active player at forecasting future market activity. Likewise, while it is possible to develop reactive reporting to detect ongoing price spikes, such a report would provide limited utility in a vacuum since purchasing commodities after they’ve risen in price is economically counter-intuitive. Since dips are economically intuitive, and since their prevalence and frequency is fostered through the bias the Grand Exchange imposes against demand versus supply, we will leverage the data that we have at our disposal via the OSRS Wiki API to go hunting for dips.

This approach is admittedly bound by buy limits, however most trade strategies in OSRS are, and in the case of price dips, buy limits can work in our favor by somewhat prolonging dip duration, giving us a slightly longer window of time to react and grab our share of surplus supply provided by the dip event.

Reporting Against Price Dips

Using our data-fetching and report generation scripts, let’s work on finding some dips.

Let’s start by modifying the block of queries we’ve used in past reports to calculate taxes, potential profit, and ROI. Important changes are outlined in bold:

...
cur.execute('''CREATE TABLE MasterTableTax AS SELECT * FROM MasterTable;''')
cur.execute('''ALTER TABLE MasterTableTax ADD COLUMN Tax;''')
cur.execute('''CREATE TABLE MaxTax AS SELECT * FROM MasterTableTax WHERE round(VeryGranularDailyMeanLow) > 500000000;''')
cur.execute('''CREATE TABLE MinTax AS SELECT * FROM MasterTableTax WHERE round(VeryGranularDailyMeanLow) <= 500000000;''')
cur.execute('''UPDATE MaxTax SET Tax = 5000000;''')
cur.execute('''UPDATE MinTax SET Tax = round((VeryGranularDailyMeanLow * 0.01) - 0.5);''')
cur.execute('''CREATE TABLE DailyCSVwithTax AS SELECT * FROM MaxTax UNION SELECT * FROM MinTax;''')
cur.execute('''CREATE TABLE NoBuyLimit AS SELECT *, ((VeryGranularDailyMeanLow - low - Tax) * 24 * MIN(GranularDailyMeanVolumeLow, GranularDailyMeanVolumeHigh)) AS NoBuyLimitProfit FROM DailyCSVwithTax;''')
cur.execute('''CREATE TABLE WithBuyLimit AS SELECT id, ((VeryGranularDailyMeanLow - low - Tax) * mappinglimit) AS WithBuyLimitProfit FROM DailyCSVwithTax;''')
cur.execute('''CREATE TABLE DailyCSVwithProfit AS SELECT *, MIN(NoBuyLimit.NoBuyLimitProfit, COALESCE(WithBuyLimit.WithBuyLimitProfit, 'NONE')) AS AdjustedPotentialDailyProfit FROM NoBuyLimit, WithBuyLimit WHERE NoBuyLimit.id = WithBuyLimit.id;''')
cur.execute('''CREATE TABLE FinalOutput AS SELECT mappingname AS ItemName, low AS LowPrice, mappinglimit AS BuyLimit, (VeryGranularDailyMeanLow - low - Tax) AS ProfitPerUnit, ((VeryGranularDailyMeanLow - low - Tax) / low) * 100 AS pctROI FROM DailyCSVwithProfit ORDER BY AdjustedPotentialDailyProfit DESC;''')

  • VeryGranularDailyMeanLow represents the average Low price for a given commodity over the past day, using data provided by the very granular /5m endpoint. This value provides us with the approximate “top-end” of our dip, representing average price leading-up to a shock event.
  • low represents the “real-time” Low price for a commodity, using the /latest endpoint. This value provides us with the current “bottom-end” of our dip, representing the present impact of a new market shock.

The difference between these two values represent the approximate magnitude of a dip, providing us with a baseline means of sorting our results before we conduct further filtering.

After executing this script, a handful of interesting results appeared at the top of our list, with one of the top three being ID 24251: “Wilderness crabs teleport”:

This item presents a great starting example of the type of behavior we want to look for. While this screenshot was taken right after the initial shock subsided, we clearly see that the Low price history dropped from its daily average of about 31,000GP down to about 26,500GP. We also clearly see a huge surge in Low volume at around the same time. While there was a dip of greater magnitude earlier in the day, this separate event constitutes a small fraction of the item’s overall daily price and volume history. This is overall pretty close to the type of market shock that we want to see in our reports in the context of this trading strategy.

The same cannot be said about the other highest results, starting with ID 27612, “Venator Bow (uncharged)”:

In this circumstance, the current Low price appears to be more a reflection of the item’s price trending gradually downward. While there are a number of small dips dispersed throughout recent price history, none of these correspond with the time the report was executed against. While there was a small surge in Low volume, this is not nearly as pronounced as it was with our previous example.

Next, we see ID 25859 “Enhanced crystal weapon seed”:

In this case, we again see a gradual downward trend in price history. The “dip” is really just boilerplate volatility on the High-Low margin, with no surge in Low volume at all. This price history is precisely what we do not want to see in this report.

So, while items we do wish to see are appearing on our list, we are also seeing a lot of garbage. Like our other trading strategies, we’ll need to identify unwanted qualities, translating them into SQLite clauses to act as filters.

Accounting for Dip Recency

A true “dip” needs to possess adequate recency. It isn’t enough for price to gradually fall over the course of a day; a dip needs to be a more sudden event. Right now, our report is returning results which account for current Low price against the backdrop of a daily average. While this is mostly satisfactory for our purposes of obtaining the magnitude of a dip, we need to set some conditions which limit the scope of the dip to a narrower band of time.

Let’s add a clause to our last query:

...
cur.execute('''CREATE TABLE FinalOutput AS SELECT mappingname AS ItemName, low AS LowPrice, mappinglimit AS BuyLimit, (VeryGranularDailyMeanLow - low - Tax) AS ProfitPerUnit, ((VeryGranularDailyMeanLow - low - Tax) / low) * 100 AS pctROI FROM DailyCSVwithProfit WHERE (VeryGranularHourlyMeanLow > (low * 1.02) ORDER BY AdjustedPotentialDailyProfit DESC;''')

This clause effectively eliminates any results where the average price from the past hour is less than the current Low price, plus a small margin. As a result, if price has already been trending close to the current Low price within the past hour, this lack of recency will get filtered by this condition. We can adjust the margin higher or lower depending on our preference for dip sharpness.

While our results are now different due to the passage of time, the top results we are seeing now have a better tendency toward showing price falling off of a cliff:

Both of these items represent excellent examples of dips containing adequate recency; the dips are sharp and have occurred within the past hour.

Accounting for Historic Prices

Let’s run this report again after some time has passed:

Our top results now are “Infinity Hat” and “Antidote++(1)”. While these recent dips are both in-line with our reporting requirements, there is a bit of a price history problem which becomes clear once we take a look at the 7-day charts:

While both of these items have experienced recent dips, in the broader context of their historical price histories both of these items have actually experienced spikes. The dips we are seeing are more indicative of intra-spike volatility, or a possible return to a longer-term historical market equilibrium price.

As much as we want to make sure we are capturing sudden dips relative to recent price, we also need to take into account the broader context of long-term price history. It isn’t enough for price to be significantly lower than today’s average; it needs to be lower than the the average experienced on any given day in recently recorded history. This ensures that a dip not only reflects a recent drop in price, but also a drop against the backdrop of history.

So, let’s tack-on a few more clauses:

... AND (GranularBiweeklyMinHigh + GranularBiweeklyMinLow) / 2 > low AND (MonthlyMinLow + MonthlyMinHigh) / 2 > low ORDER BY AdjustedPotentialDailyProfit DESC;''')

The first clause ensures that we only see items where the current Low value is lower than the average between Low and High for any singular hour over the past two weeks. The second clause utilizes the same logic applied against the average between Low and High for any singular day over the past month. The inclusion of High prices in our average calculation allows for some margin of error; historic averages have to be significantly lower than the current low for an item to be excluded.

The resulting items not only reflect our desire for a sharp, sudden, recent dip…

… They also possess a 30-day price history indicating that these dips are more broadly significant:

At no point in the past 30 days has any daily average for either of these items fallen below the current Low price, making the current Low a significant aberration and not just the product of a spike.

A further look at our results reveals that practically all of the reported items indicate our desired dip behavior. All we have left to do now is apply a handful of additional clauses which we have used with our other reporting strategies. These include filtering by ROI, total potential returns, and volume/price qualities indicative of real-world trading behavior:

... AND pctROI > 0 AND AdjustedPotentialDailyProfit > 100000 AND MonthlyMaxHigh > MonthlyMaxLow AND (high - low - tax) > 0 AND MonthlyMedianVolumeHigh > 0 AND MonthlyMedianVolumeLow > 0 AND GranularDailyMedianVolumeHigh > 0 AND GranularDailyMedianVolumeLow > 0 ...

Our resulting list contains items experiencing dips, sorted by their profit potential. Like our other reports, this report is being published and automatically refreshed every minute on the Projects page.

Closing Comments and Notes

Reporting Preferences

Some of the values chosen in my reporting could be modified to yield different results in-order to cater to different trading preferences. For instance, when accounting for historical price history when filtering report results, the span of historical data used is limited to one month, with a granularity of one day. A more conservative strategy would involve broadening the report window, or leveraging more granular historical data. While the corresponding report would contain far fewer items, the items that do appear would be experiencing more historically significant price dips.

Additionally, I chose a margin of 1.02 when determining a threshold for dip “sharpness”. This value can be raised, which will eliminate items from our reporting which have experienced more marginal price dips. In my experiences, the relevance of dip sharpness is a function of an item’s trade volume; a small dip involving an item which otherwise trades in extremely large volumes may be more significant in the context of delivering immediate return on investment than a seldom-traded item experiencing a shaprer dip. As a result, I’ve elected to use a pretty small value to define this particular margin.

In any case, I encourage anyone to adjust these values in their own reporting as they see fit for their purposes.

Pseudo-Forecasting

In the course of reviewing report results, I have personally noticed some circumstances where dips can be forecast with some degree of accuracy. One such circumstance involved the item “Zulrah’s scales”. In the course of my trading, I began to recognize that this item would experience a 10-15% dip every evening at the same time, with this pattern continuing for over a month before ending.

There are quite a few easy explanations for this; in all likelihood, this market behavior was the result of a botting account, or entire botting farm being scripted to liquidiate their inventory on a daily timer. I call this “Pseduo-Forecasting” since applying historical market patterns against future market events isn’t really the same as true forecasting, but can still yield a benefit for traders. I would encourage anybody trading against dips to attempt to recognize instances of reoccurring events, since putting a Buy offer in front of a shock can often provide greater yields than simply reacting (if you have open order slots to spare).

Conclusion

I hope this article has been insightful; my next article will cover some reporting strategies which involve low-effort processing recipes, so please stay tuned for more analysis and scripting examples!

Thank you for reading!

*Note: Virtual Markets, Part Five: Low-Effort Processing is now live!