Some Features
- automatic pricing based on live undercutting or historical value
- automatic assembling/posting of multiple stacks
- myriad filtering options
- automatic scanning of all the pages for a search configuration
- saving recent/favorite searches
- listing results sortable by unit price among other things (be careful with ammo and unit prices)
- quick buying from any of the scanned pages
- gathering historical data for price suggestions
- displaying pricing information in item tooltips
- complete replacement for the default UI based on the retail TSM style
- alt-click shortcut for quick buying/bidding/canceling Use with caution!
Usage Hints
- /aux ignore owner will vastly improve your scan times (especially on the pvp server) at the cost of incomplete owner data and loss of control over whom you buy from.
- in the search listing a green bid price means you have the high bid, an orange one means there's a bid but not yours
- in the post listing a red price is undercutting both the unit and the stack price you have selected, an orange one only the unit and a yellow one only the stack price
- you can click a bid/buyout price on the post listing to undercut with your bid/buyout, left click for undercutting the unit price, right click for undercutting the stack price
- to perform a full scan to gather historical data just use a regular search without blizzard filter (or any filter to focus on a specific part)
- right click on the continue ("Cont.") button will discard the aborted search
- right click will add/remove searches to/from your favorites
- alt right click on a search lets you give it a name
- ctrl click on favorite searches lets you reorder them
- right click on the price header in the search table will switch between unit/stack price
- double click on a row with blue colored auction count in the search table will expand it
- hitting tab in the search box will accept an autocompletion
- you can drag/right click inventory items to search/auction as well as right click itemlinks to search
- you can formulate complex post processing filters in polish notation using and, or and not (there's a whole section about it later in this post)
Tooltip Options:
/aux tooltip daily
/aux tooltip disenchant distribution
/aux tooltip disenchant value
/aux tooltip disenchant source
/aux tooltip vendor buy
/aux tooltip vendor sell
For those who would like to import the informant vendor price data into aux (must have informant running):
Buy- Code: Select all
/run for id=1,30000 do local i=Informant.GetItem(id) if i and i.buy and i.buy > 0 and getn(i.vendors or {}) > 0 then aux_merchant_buy[id] = (i.buy / max(1, i.quantity))..'#'..i.limited end end
Sell- Code: Select all
/run for id=1,30000 do local i=Informant.GetItem(id) if i and i.sell then aux_merchant_sell[id] = i.sell / max(1,i.quantity) end end
Download
You can always get the latest version (2.10.8) from GitHub: Aux repository
(note: the folder name needs to be the same as the .toc, "Aux-Addon", you have to remove the branch name/version number)
Gallery
Search Filters
You all know the kind of filters you can apply in the blizzard AH interface. AddOns do not have any additional blizzard filters available to them, nor any other ways to combine them.
Of course it is possible to apply arbitrary filters after the blizzard query but only the blizzard query will affect the number of pages to be scanned and thus the time it takes for a scan.
Aux queries are separated by semicolons and always contain exactly one blizzard query, possibly empty, i.e., all pages are scanned.
Semicolons always mean "or", i.e., q1;q2;q3 means all items matching q1 or q2 or q3 will be listed.
The parts of individual queries are separated by slashes, e.g., q1p1/q1p2;q2p1/q2p2/q2p3. All parts either belong to the blizzard filter or the post processing filter.
Blizzard filters can be created through the form on the left side in the filter sub-tab of the search tab or typed directly into the search box. To find out the right syntax just use the form a few times, add the query to the search box with the "add" or "replace" buttons and inspect the queries it generates. It should be rather intuitive. The first part is treated specially in that if it doesn't match any specific filter keyword it will be treated as a blizzard name search. E.g., a query consisting only of "felcloth" would list felcloth, pattern: felcloth hood, felcloth bag etc.
Usually you would want to use the exact modifier though (generally sensible to put as the second part but can be anywhere) The exact modifier only works if the first part of the query is actually exactly the name of an auctionable item which the autocompletion will assist you with. The exact modifier is special in that it is the only one which is part blizzard query and part post filter. An exact modifier will tailor the blizzard filter as well as possible towards the specific item searched (level range, item class/subclass/slot, quality ...) which is why it also cannot be used together with other such filters (would make no sense, either contradiction or redundancy). However, this still doesn't necessarily always uniquely identify items so it also adds a post processing filter for the name.
As for non blizzard post processing filters, they are more flexible. They are specified using the filter primitives you find on the right side of the filter subtab and can be combined with and, or and not using polish notation (https://en.wikipedia.org/wiki/Polish_notation). The parts are always separated by slashes. For filter parts other than the first if they don't match any specific filter, just like the first part is treated as a blizzard name filter, they're treated as a tooltip filter. Alternatively tooltip filters can be specified using the tt modifier.
Here are some queries I use myself for illustration:
or/and/buyout-profit/5g/buyout-pct/60/and/and/bid-profit/5g/bid-pct/60/left/30m
This query will search the whole auction house for auctions which either have a buyout price of 5g or more higher than the market value and 60% or less of the market value or bids for which the same is true and which in addition only have 30 or less minutes left.
recipe/usable/not/libram
This will scan for usable recipes and exclude those with "libram" in the tooltip (i.e., librams)
armor/cloth/50/and/intellect/stamina
This will scan the auction house for cloth armor which has a requirement of at least lvl 50 as well both intellect and stamina stats.
On Market Values
Before deciding on a market value for Aux I had a detailed look at all well known auction history addons (including KC_Items, AuctionMatrix/AuctionSync and Auctioneer for Vanilla, TSM and Auctioneer for retail) for ideas/inspiration; and as it turns out all the Vanilla ones are rather inadequate.
Vanilla Auctioneer has two sorts of market values:- Plain arithmetic means over all values. These are very susceptible to outliers and become completely useless after a while unless the actual market value remains constant in time because they can no longer react appropriately to price changes. A single scanned auction for 200k gold (the max possible) will irreparably damage the arithmetic mean of that item essentially forever.
- A median of a very small sample of 35 prices stored as a balanced list (dropping off elements from the opposite side from where the new values are inserted in sorted order when it gets too large). This is not always bad. It works quite well for items which appear only once a day or every few days and in fact Aux uses something similar as part of its market value calculation. The problem is, Auctioneer considers every single auction parsed which has two undesirable effects: For active markets a single scan can completely replace the market value, multiple times even, making it highly unstable and easily manipulable and the order in which auctions are scanned within a single scan can greatly influence the outcome, which just doesn't make sense.
One notable feature of Auctioneer, both Vanilla and retail, is what it calls "auction signatures" which I was using for Aux at some point - though I am not now. It is impossible to uniquely identify an auction and thus if you scan multiple times per day you would scan the same auctions over and over again. Auction signatures are an approximation of a unique identifier. Though not unique they prevent scanning the same auction again so you can scan as many times as you want and only new auctions will be considered. Because they aren't truly unique they do this at the cost of ignoring some valid new auctions.
An alternative to signatures is to calculate prices from values like the minimum, which aren't affected by duplicates. I'm still considering using signatures again to generate an approximation of a daily seen-count/average daily seen-count, though this comes at the cost of storing all current signatures (maybe 50'000 on the PvP, potentially arbitrarily many) in the savedvariables file for every server/faction combination.
AuctionMatrix/AuctionSync is not very interesting. It has a median similar to Vanilla Auctioneer's with the same weaknesses but uses no auction signatures and thus always needs full scans for reliable data, that's it.
KC_Items makes a single data point for every full scan by doing some outlier elimination (only considering values within 1.5 * stddev of the arithmetic mean of all values in that scan which seems pointless and counter productive because the arithmetic mean is already heavily influenced by outliers) and then taking a median (likely too high but not too bad) or arithmetic mean (seems pointless, might just aswell take the mean before its "outlier elimination"), depending on the version. It then uses these per scan data points for an exponential moving average. This is actually quite similar to what retail TSM does except TSM creates a much better per scan value.
TSM creates its market value as described here: https://www.tradeskillmaster.com/addon/auctiondb-market-value. Essentially it creates a scan data point from the arithmetic mean of the lowest ~25% of auctions in that scan (with some more outlier elimination but that doesn't make much of a difference in practice) It's simple but very effective.
Then it creates an exponential moving average from these data points. I was using something very similar in Aux until recently when I switched from an exponential moving average to a median like Vanilla Auctioneer's for those condensed data points. The problem with the exponential moving average is that it's quite susceptible to outliers. The method of taking the lowest x% auctions of the scan is very effective at eliminating high outliers for active markets but for rarer items you can get bad scan data points and a single bad one can make your moving average useless for a long time.
There's also a problem with using per scan data points in Vanilla because there's no quick scan you can do every 15 minutes or so like on retail that only takes a few seconds to scan the whole AH and regular scanning is much slower as well. This is why instead of relying on individual full scans I use a technique taken from retail Auctioneer to accumulate daily values.
Retail Auctioneer has a ton of statistics most of which are fairly useless and only serve to confuse you when looking at the tooltip. For example it has an approximation of a median of all values (not very interesting unless the prices on the server always stay the same), a module to try and find out actual sales by scanning many times every day and finding auctions which disappear before they could have expired (though they could have been canceled of course) which sounds not too bad on paper but is not worth the effort compared to the simple and effective lowest x% that TSM uses, especially with dreadfully slow Vanilla scans.
Most notably it has a module called stat simple. This makes daily arithmetic means and moving averages of those daily data points. The resulting value is not very good but the method it uses to condense daily values I have adopted for Aux as a better alternative to per full scan data points in Vanilla.
Aux' Market Value
So, in conclusion, here's what Aux does:
It will condense the auctions you scanned during a day (midnight to midnight) into a single value, similarly to retail Auctioneer.
This value is calculated as minimum buyout of the day, increased by 15% if lower than the highest price of the day, which in practice gives a very similar value to the TSM one while using much less memory.
Limiting the memory usage is useful because like Auctioneer and unlike TSM Aux is using a day based instead of scan based interval; and thus has to store the daily progress in the savedvariables.
Finally these daily values are collected in a list of the last 11 of them from which the market value is taken as the median. The values are weighted by their age but it doesn't have a large effect unless they're older than a month.
The bottom line is that you get a fairly accurate market value for both very active markets as well as rarer items that has a reasonably short reaction time to market changes and recovers easily/never needs to be reset while still being reasonably stable and hard to manipulate and dealing with outliers very well, not getting distorted by multiple scans per day, not needing a single full scan per day but instead naturally picking up every price you scan while going about your usual business, letting you focus on a certain part of the auction house by scanning only that part regularly and avoiding information overload by giving you a single concise value for the tooltip.