Note: this addon no longer works with the retail version of the game and is now Classic only. Do not download the non-Classic version.
Purpose
Market Watcher is an addon that scans individual items or collection of items instead of the entire auction house at once. It also (optionally) records many snapshots of the auction house for user specified items. This allows the following unique features:
- Charting of historical price data
- Indicators that show which auctions have actually sold
- Ordered buyout per unit lists, even for items with many pages, which make finding the lowest buyouts and undercutting the competition very easy/fast
- Very quickly finding, canceling and reposting undercut auctions
- Price data that is seconds old instead of hours or days
- Finding craftable items that are not currently for sale and then crafting+selling them from within the auction house window
Instead of downloading one gigantic dump of the auction house, this addon does mini-scans of individual items and summarizes the data from all pages and lists the auctions in an ordered list from cheapest to expensive. An alternative auctions list buyout window next to the scan summaries allows you to quickly find and buyout the cheapest items.
How to Use Market Watcher
Adding Items
Once you have installed Market Watcher, visit an auction house NPC and bring up the auction house window.
You will notice two new tabs: History, and Scan.
First, you need to specify which items you wish to "watch." Click the History tab, then click Add.
The Add Item window appears. Enter the name of an item you wish the addon to track, or the item id of an item. This addon needs specific information about the items it scans to function correctly, so it will need to get this information by checking the auction house for it, your inventory, your trade skills, or by silently asking the server to bring up tooltip information about an item id. The item id can be obtained by visiting a WoW database website. Simply search for the item in question and get the number in the URL, i.e. "http://www.wowhead.com/?item=34057"
Once you have added your item, the edit item window appears. From here you can instruct the addon to record the scans of the item, how long to keep the scans, and whether to only record full stacks. Also, you may configure the addon to not display the scan results of items that do not meet certain criteria, such as if the item is too expensive (or cheap), or whether there are none for sale or not. This speeds daily shopping and allows you to easily notice when there are undervalued auctions, or if a market is ripe for your own auctions, or to hide uninteresting markets.
Scanning
Once you have input all the items you want to watch for, click the Scan tab, then click the Scan button. If you do not want to record this scan, then uncheck the "Record Scans" check box. There are a couple of reasons you may not wish to record a particular scan.
First, scans can use up a lot of memory. In fact there is currently no limit to the memory usage of this addon - it is possible to configure this addon to use as much memory as you tell it to, so you must pay some attention to this if you record scans for many items. The memory used by the addon is prominently displayed on the History tab. To give you a rough idea of how much memory scans might use, 500 or so individual item scans uses up about two megabytes of memory. If you configured the addon to record 50 items, then hitting the scan button with record scans checked will use roughly two megabytes of ram after 10 clicks of the scan button. It is also important to note, however, that some items will use far more memory than others. Frostweave cloth or Infinite Dust scans will use much, much more memory than say, Nobles Deck scans.
Secondly, the more uniform your scans are, the more accurate some of the addon estimates and calculations will be. Specifically the price change indicators in the scan summary and the technical analysis indicators.
Once the scan is complete, the scan summary is displayed. Here you can see at a glance how many units are for sale and the cheapest price per unit. If you input a threshold value when setting an item's options, the price text will either be green or red depending if the item's unit price is below or above that threshold value. If an item has scans saved, a percentile indicating the price change from the last week and the last month is displayed. This allows you to quickly determine if an item is selling above or below market value.
Mouseovering an item's summary will bring up a tooltip that will list every auction of that item at the time of the scan, ordered by buyout price per unit. Clicking on an item's summary will query the auction house for that item, and bring up the results on the right side of the window. From here you can conveniently make your purchases in a compact, price per unit ordered list. Shift + right clicking a result will buy that auction out instantly. Note that the auctions listed on the right side of the window are actual auction house results, and therefore have multiple pages, so you may need to click the arrows at the bottom to find the cheapest auction as indicated in the tooltip.
Alternatively you can scan items by right clicking categories on the Browse tab (enter a Name or level range to narrow the scope) or by alt+left clicking an item in your inventory on the Scan tab.
Reviewing Scan Data
Now that you have a scan saved, you can bring up the scan on the History tab. Click the History tab and then click on an item you have set to record. If you have three or more scans, a price history graph is displayed, otherwise a display similar to Blizzard's auction house results page is displayed. You can switch between the two views by clicking the button at the bottom.
The list view will display the scan number and how long ago it was taken. To save space, auctions that are identical are merged and given a number in the # column. The number obviously being how many duplicates of this auction there were. Note that sometimes it will appear as if it did not merge every seemingly duplicate auction. That is because items have a hidden value associated with them. Blizzard uses this value to track certain details about items. (such as where they came from)
If scans are less than 12 hours apart, Market Watcher can deduce if any "Very Long" auctions have either been sold or removed by the seller. Likewise, if scans are under two hours apart, the addon can determine if a "Long" auction was sold or removed, and so on. Using some judgment, you can then determine which auctions are being bought out. If the top few auctions listed are labeled "Sold or Removed" then it's safe to say they were bought out. Auctions with bids are also indicated. You can use this knowledge to more accurately gauge an item's worth.
The graph display can visually represent an item's change in price over time. "Low" "Average" and "High" are the lowest buyout price per unit, average buyout price per unit, and highest buyout price per unit of the auctions in the scan on that date. "Actual" is the actual price. "SMA" is the Simple Moving Average, which is the average of the last 10 price points. "EMA" is the Exponential Moving Average, which works similar to the Simple Moving Average, except more weight is put on the more recent prices. "Trend" shows the overall price trend (if the price is falling, rising, or flat) of all of the scans.
Warning to Users:
It is recommended that users routinely back up their saved scan data if they value this data, because in rare cases addon data has been known to be lost due to client bugs or some unknown cause.
The file with the data is located in this folder on your disk:
\World of Warcraft\<_classic_ or _retail_>\WTF\Account\<account name>\SavedVariables\MarketWatcher.lua
Does this work with auctioneer or as a stand alone?
the addon still works but has some backdrop issues.
Hello! Thanks for your addon.
I play on Ru localization, and I meet one problem on graph window. Can you look into it please?
Day labels (and I believe Month labels will be too) bugged, they shown as a first letter + square.
It's because in Cyrillic one character take 2 bytes, and string.sub function in lua work with bytes, not characters.
In your code string.sub used to get short versions of day/month:
Dunno what solution is better, use some 3rdparty lib to support utf8, reinvent some function 'utf8sub' or hardocde (if locale == 'ru' then char_size=2 :D).
Thanks for the update!
However, "Ignore auctions with extreme buyouts when graphing" option in Configure menu doesn't seem to work making Average graphs useless most of the time as bots keep posting auctions with wild buyouts. This problem existed already in previous version.
Getting this error as of this morning :(
5x MarketWatcher\MarketWatcher-2.4.lua:1354: attempt to index field '?' (a nil value)
[string "@MarketWatcher\MarketWatcher-2.4.lua"]:1354: in function `GenerateQueryList'
[string "@MarketWatcher\Scan.lua"]:554: in function `Scan'
[string "@MarketWatcher\Scan.lua"]:435: in function `ScanButton_OnClick'
[string "*:OnClick"]:1: in function <[string "*:OnClick"]:1>
Locals:
subclassed = <table> {
}
subTallies = <table> {
3 = <table> {
}
}
item = <table> {
equipLoc = ""
summaryStackOnly = false
iLevel = 70
bidThreshold = 0
buyoutThreshold = 0
maxAge = 30
stackCount = 20
quality = 3
type = "Gem"
maxEntries = 100
classID = 3
subType = "Red"
summaryConditional = "no"
noneOnSale = true
name = "Living Ruby"
recordHistory = true
stackOnly = false
subClassID = 0
minLevel = 0
texture = 133251
}
classID = 3
subClassID = 0
inventoryType = nil
GetWords = <function> defined @MarketWatcher\MarketWatcher.lua:1230
MatchWords = <function> defined @MarketWatcher\MarketWatcher.lua:1247
queries = <table> {
1 = <table> {
}
2 = <table> {
}
3 = <table> {
}
4 = <table> {
}
}
threshold = 4
invTypeIndex = nil
count = 1
commonWord = "Noble"
(for generator) = <function> defined =[C]:-1
(for state) = <table> {
23441 = <table> {
}
23438 = <table> {
}
23112 = <table> {
}
23439 = <table> {
}
23436 = <table> {
}
23440 = <table> {
}
23107 = <table> {
}
23077 = <table> {
}
23425 = <table> {
}
}
(for control) = 23436
itemId = 23436
(*temporary) = nil
(*temporary) = 0
(*temporary) = nil
(*temporary) = 3
(*temporary) = 0
(*temporary) = nil
(*temporary) = ""
(*temporary) = <table> {
1 = <table> {
}
}
(*temporary) = <table> {
subClassID = 5
classID = 3
}
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to index field '?' (a nil value)"
MarketWatcher = <table> {
ConstructFilterFromId = <function> defined @MarketWatcher\MarketWatcher.lua:1111
GetScanTimestamp = <function> defined @MarketWatcher\MarketWatcher.lua:337
QueryServer = <function> defined @MarketWatcher\MarketWatcher.lua:1151
debug = false
IsAPointer = <function> defined @MarketWatcher\MarketWatcher.lua:880
TempItemIterator = <function> defined @MarketWatcher\MarketWatcher.lua:610
GetNumScans = <function> defined @MarketWatcher\MarketWatcher.lua:329
Setup = <function> defined @MarketWatcher\Scan.lua:194
NewTempTable = <function> defined @MarketWatcher\MarketWatcher.lua:572
ItemBoughtOut = <function> defined @MarketWatcher\MarketWatcher.lua:1067
CLASS_IDS = <table> {
}
EditWatchedItem = <function> defined @MarketWatcher\MarketWatcher.lua:817
SetWatchedItemInfo = <function> defined @MarketWatcher\MarketWatcher.lua:755
WatchedItemsIterator = <function> defined @MarketWatcher\MarketWatcher.lua:737
GetItemInfoTable = <function> defined @MarketWatcher\MarketWatcher.lua:741
GetConfig = <function> defined @MarketWatcher\MarketWatcher.lua:320
DereferenceAuction = <function> defined @MarketWatcher\MarketWatcher.lua:918
EditAuction = <function> defined @MarketWatcher\MarketWatcher.lua:978
MoneyText = <function> defined @MarketWatcher\MarketWatcher.lua:1496
INVTYPE_NUM_LOOKUP = <table> {
}
faction = "Horde"
GetAuction = <function> defined @MarketWatcher\MarketWatcher.lua:949
frame = <unnamed> {
}
GetServerFaction = <function> defined @MarketWatcher\MarketWatcher.lua:232
AddTempAuction = <function> defined @MarketWatcher\MarketWatcher.lua:590
GetSubSubCatFromEquipLocString = <function> defined @MarketWatcher\MarketWatcher.lua:1201
AuctionsIterator = <function> defined @MarketWatcher\MarketWatcher.lua:861
INVTYPES = <table> {
}
SortTempAuctions = <function> defined @MarketWatcher\MarketWatcher.lua:629
QueryItem = <function> defined @MarketWatcher\MarketWatcher.lua:1166
CLASSES = <table> {
}
IsAuctionEqual = <function> defined @MarketWatcher\MarketWatcher.lua:999
SUBCLASSES = <table> {
}
Scan = <table> {
}
Config = <table> {
}
GenerateQueryList = <function> defined @MarketWa
In reply to hardtofin:
It seems to be something to do with certain gems that break it. Noble topaz and Dawnstone seem to stop the addon from working?
Thanks for this addon! :)
Its possible to have "/tsm sources" => external sources? I want use min/max/average value in Tradeskillmaster
And in graph: show price value where cursor is?
In reply to Forge_User_58863011:
yes, it would be best. Adding and scanning is a pain. if it could change on a database from TSM it would be perfect
Hey! What a sick addon, exactly what i'm looking for!
It's not working though on classic! At least not for me. I can put in items, but there's not "scan tab" or scan button. I can do the shift+right click, but nothing happens, no scans are happening, no data is showing up. I made sure to download the classic version, so i'm not sure what else to do!
Feature request: It would be cool if the history graphs showed date and/or time on the x axis. Some items (ie raid consumables) tend to have patterns in how the price goes up and down (expensive on popular raid nights, cheap on random weekday mornings), and this would make it easier to suss out when is the good time to buy my weekly supply of mana pots etc.
Edit: nvm, seems like it already does, just needed a larger time span between first and last scan before it showed up. Move along, nothing to see here :)
Got this Error this morning:
Message: Interface\AddOns\MarketWatcher\Scan.lua:231: attempt to index global 'C_TradeSkillUI' (a nil value)
Time: Sat Jan 11 06:13:11 2020
Count: 6
Stack: Interface\AddOns\MarketWatcher\Scan.lua:231: attempt to index global 'C_TradeSkillUI' (a nil value)
[C]: ?
Interface\AddOns\MarketWatcher\Scan.lua:231: in function `Close'
Interface\AddOns\MarketWatcher\MarketWatcher.lua:188: in function <Interface\AddOns\MarketWatcher\MarketWatcher.lua:178>
[C]: in function `CloseAuctionHouse'
[string "*:OnHide"]:7: in function <[string "*:OnHide"]:1>
[C]: in function `Hide'
Interface\FrameXML\UIParent.lua:2075: in function `SetUIPanel'
Interface\FrameXML\UIParent.lua:2102: in function `MoveUIPanel'
Interface\FrameXML\UIParent.lua:2126: in function `HideUIPanel'
Interface\FrameXML\UIParent.lua:1797: in function <Interface\FrameXML\UIParent.lua:1789>
[C]: in function `SetAttribute'
Interface\FrameXML\UIParent.lua:2551: in function `HideUIPanel'
Interface\SharedXML\SharedUIPanelTemplates.lua:316: in function `HideParentPanel'
[string "*:OnClick"]:1: in function <[string "*:OnClick"]:1>
Locals:
Any ideas on a fix :(
In reply to Shadedtv:
What game client and which addon version are you running?
In reply to torven99:
I'm using 1.13.3 and I didn't discover this addon till I was on holiday break. It is the most up to date version. I downloaded it like Dec 15th. So addon version is 2.3.1
The Addon STILL seems to work in game. I can still add items to scan and track my selected items for scanning. However every time I open the AH I get that Lua error.
I do love it though! This is something I dreamed of having in Vanilla.
In reply to Shadedtv:
You're using the retail version of the addon. Get the classic version
In reply to torven99:
Where is the classic version your talking about i cant seem to find that anywhere?
Is it possible to add the ability to use market databases from other auction addons (ie Auctioneer)?
In reply to Illutian:
not possible
MarketWatcher doesn't seem to save any data for later use. It says "No scans recorded for this item" for every item in the "History"-tab. Also when I scan with "Record Scans" checked, it automatically unchecks this box after the scan is complete.
Anybody else have this issue or any idea why no data is being stored? Does it have to do with a setting in my WoW client?
Cheers
In reply to Forge_User_25106304:
Hey, I managed to get it working.
For every item you want to record in the history tab, you have to right click it and check the "Record Scans" option for each item individually. Otherwise data will not be stored!
In reply to Forge_User_25106304:
I am having a similar problem. A few days ago when there were 2 Blizz updates, all my data was wiped out. I used saved data to replace it but now each time I do a scan, it says it is scan 1 of 1. All my items have the save scan checked individually. After I put in the saved data everything shows up with graphs. As soon as I do a scan, many of the items lose their history and it says scan 1 of 1. Does any one have any ideas what do do about this? Thank you.