Not signed in (Sign In)
    • CommentAuthorThortok2000
    • CommentTimeOct 17th 2007 edited
     
    I'd like to make a pricing model for posting items using Appraiser. How do I do it?

    This is the model I want to use:

    Bid = What I would get if I vendored it, plus the cost to deposit it.
    If Bid = 0 (like a no sell price item like enchant mats), then bid = 1 copper.

    Buyout = 1% undercutting the lowest one's buyout price currently in the AH data.
    If there's none currently in the AH to undercut, then post it at exact 'Stats: Purchased' value, no more no less. And if there's no data for that, then 'Market Value', and if no data for that either, then post it without a buyout.
    If Buyout <= Bid, then post the item without a buyout.
    •  
      CommentAuthordinesh
    • CommentTimeOct 17th 2007
     
    at the moment we don't have a plug-in system for setting sales prices. all you can do is create a stats module which will set the buyout price. there is no mechanism for undercutting at the moment.

    hopefully this will change soon, but i don't think we have anyone working on it atm.
  1.  
    So....how do I do that, then?
    •  
      CommentAuthordinesh
    • CommentTimeOct 28th 2007 edited
     
    there is an example module you can look at in Auc-Advanced\Modules\Auc-Util-Example.

    the wiki may also be of help: http://norganna.org/wiki/Auctioneer/5.0/Modules_API
  2.  
    There's now a match utility module which works wonders. However, when your price is below vendor, all it does is warn you, it doesn't adjust the price to vendor + deposit cost. Could we update the match module so it will never set the price below vendor + deposit?
    • CommentAuthorKinesia
    • CommentTimeJan 1st 2008
     
    Actually that should probably be a matcher of it's own... (Albeit a very simple one!)
    Then you could use it if you don't have the other matchers loaded because it does come up sometimes in other situations (often when the market price for an item is very close to vendor price, or when the bid price markdown is very big)
    • CommentAuthorRockSlice
    • CommentTimeJan 1st 2008
     
    Posted By: Thortok2000There's now a match utility module which works wonders. However, when your price is below vendor, all it does is[em]warn[/em]you, it doesn't adjust the price to vendor + deposit cost. Could we update the match module so it will never set the price below vendor + deposit?


    Why don't you just vendor it, then?
  3.  
    I vendor things that don't sell after one attempt. I vendor things that nobody else has in the AH right now. But things that other people have in the AH, I want to have the buyout price undercut by 1%, but the bid price to be really low (basically vendor + deposit). In effect, if someone's willing to bid instead of buyout, they can get it drastically cheaper. It also (virtually) guarantees a sale on this attempt even if someone undercuts my buyout price after I've posted it. Since I only do one attempt per item, I'd rather it sell, even at a low price, then fail to sell and I vendor it and lose the money it cost to deposit it for that first attempt.

    I'd also rather not be one of those people posting things for bid/buyout cheaper than vendor.

    Really, the pricing model in the original post is exactly how I want it to work.
    • CommentAuthorKinesia
    • CommentTimeJan 2nd 2008
     
    Rockslice, with BeanCount there's also motivation to post things rather than vendor them in some cases to adjust overly low prices coming from the matcher.
    But in most cases it should only be appropriate when you have your bid price set low. If it's having to adjust the buyout price then you really should vendor it. (And from a Beancount point of view, reset your data for that item so it starts again... Or you should realise that you shouldn't be in the market for those items at all!)
    • CommentAuthorThortok2000
    • CommentTimeJan 2nd 2008 edited
     
    So at this point, nobody's interested in making this module for me, right? And the links above from dinesh are my best bet at trying to figure out how to make one myself, right?

    If so, I'll get started on that this weekend I guess. I would absolutely love to have that kind of pricing module. My eyes turn to dollar signs when I think of the money I'll make using it. $.$
    • CommentAuthorKinesia
    • CommentTimeJan 2nd 2008
     
    It's a new feature and I do see the point of it, so you could add a Jira for it and someone (perhaps me) will get to it eventually, but starting it yourself on the weekend is almost certainly going to faster! Smile.
    • CommentAuthorRockSlice
    • CommentTimeJan 3rd 2008
     
    Thortok:

    The type of module you seem to want is a Matcher module, set to run after all others.

    From the description, you want it to take the bid markdown, get the vendor price, and do something like:

    if (price * (1 - markdown)) < vendor then
    price = (vendor / (1 - markdown)) + 1
    end
  4.  
    What's 'markdown'? Is that the deposit cost? Or is 1 - markdown the deposit cost? You've confused me. =(
    •  
      CommentAuthordinesh
    • CommentTimeJan 3rd 2008
     
    markdown is the discount you want to apply to the BO price to get the bid price. it's set in one of the Appraiser options.
  5.  
    That's what I thought. So that formula confuses me greatly...
    •  
      CommentAuthordinesh
    • CommentTimeJan 4th 2008
     
    it looks like rockslice's formula is trying to adjust the BO price upward so that the calculated bid price will end up 1cp above the vendor price.

    more likely you just want to set the bid price to that, and leave the BO price unaffected. I am not entirely sure that is possible in our framework.
    • CommentAuthorRockSlice
    • CommentTimeJan 4th 2008
     
    Posted By: dineshmore likely you just want to set the bid price to that, and leave the BO price unaffected. I am not entirely sure that is possible in our framework.


    It isn't.
  6.  
    Okay, so my markdown is 50%. Assuming that's .5 for calculation purposes, then price times .5 < vendor, so it looks like it's checking to see if the bid price is less than vendor. That part I get. It's the part about vendor divided by .5 (so multiplied by 2) and then adding one. So it's setting the bid price to 2 times the vendor price, +1, is the way I'm reading it. If vendor price is the same as the cost to deposit it, then that'd be perfect. Is it, though?
    • CommentAuthorRockSlice
    • CommentTimeJan 5th 2008
     
    Sorry. Forgot about the deposit cost. And I now think the +1 should be inside the first half.

    It should be:
    price = ((vendor + deposit + 1) / (1 - markdown))

    (vendor + deposit + 1) is your bid price. To get buyout, you divide by (1 - markdown). That way if it eventually sells, you'll make at least 1c more than if you vendored it.
    • CommentAuthorThortok2000
    • CommentTimeJan 5th 2008 edited
     
    So what you're essentially doing is setting the buyout price so that the markdown will set the bid price to one copper more than vendor + deposit. That's great for the bid price, but then the buyout price isn't undercutting anymore, because with my markdown of 50%, it'll basically be double the bid price, even if that sets the buyout to not be undercutting.

    So, in effect, this is perfect on the 'bid' end, but not the buyout side of things. There's no way to use a different formula for buyout? Bid and buyout /have/ to be linked by markdown?

    If they have to, is there a way to do the matching formula first, and then do the 'if' statement that checks to see if the bid is below vendor, and only then adjust the price, but most of the time just use the normal match module? Sort of like the last step in the process, and only when the bid is below vendor + deposit.

    if (price * (1 - markdown)) < (vendor + deposit) then
    price = (vendor + deposit) / (1 - markdown)
    end


    I'm not greedy, I don't even need that 1 copper. As long as I come out 'even', covering both the vendor and the deposit cost, then I'm fine (it's basically the same as vendoring it, but this way someone else who wants it is able to get it). But I would still like the /buyout/ price to be undercutting, because if they opt to buyout instead of bid, I'm still the cheapest one, you know what I mean? I don't want to be cheapest via bid and /not/ the cheapest via buyout, and my item doesn't sell, and then I wasted the deposit cost. And even if my item is the cheapest via buyout, somehow, I'd still want it to be undercutting the others by 1% so I'm getting the most money I can. So a different formula for bid and buyout would be great. But if not, then I'll need to know how to 'tag this on' at the end of the undercut module.
    •  
      CommentAuthordinesh
    • CommentTimeJan 5th 2008
     
    no, it is not possible currently. read about 4 or 5 posts up.
  7.  
    Since it's not possible, what's the easiest way to tag that formula on to the end of the match module?
    • CommentAuthorRockSlice
    • CommentTimeJan 7th 2008
     
    Best would be to make another matcher, using Match-Undercut or Match-BeanCount as a baseline.

    First, make sure you have at least r2690. That change added matcher chaining (so matchers could be run after each other) There's no build out with those changes yet, so you can either get the dev copy (make sure you remember to download the libs too), or wait a bit until the next build.

    If you don't want to wait, just edit Undercut, and put in the changes right before Undercut returns the price. (you'll need to make the changes again or create the separate matcher once you update past 2690)
  8.  
    The latest version I see here http://auctioneeraddon.com/dl/#preview is 2662. I try to always download the latest version (except those specifically marked unstable), anything alpha or better. Is there somewhere to get the 'more recent' version?

    I like to catch and report bugs, but I typically wait for alpha-quality or better. I'll see about editing undercut, I'm pretty beginner at LUA.
    • CommentAuthorRockSlice
    • CommentTimeJan 7th 2008
     
    Posted By: Thortok2000Is there somewhere to get the 'more recent' version?

    http://zip.norganna.org/auctioneer/ALL/ and http://zip.norganna.org/libs/ALL/. You need both.
    (From the "Developer Version" link at the main download site)
    Those aren't packaged the way that the official builds are, so you need to be sure to delete all auc-related folders from Interface\Addons before switching from one method to the other.
    • CommentAuthorThortok2000
    • CommentTimeJan 8th 2008 edited
     
    Okay, I'm gonna edit undercut and keep it simple.

    local matchArray = {}
    matchArray.value = matchprice
    matchArray.competing = competing
    matchArray.diff = marketdiff
    return matchArray


    I'm a real beginner at LUA, but this looks like the 'returning the price' you were mentioning.

    If I put this code right in front of it:

    if (matchprice * (1 - markdown)) < (vendor + deposit) then
    matchprice = (vendor + deposit) / (1 - markdown)
    end


    Would that work? Or are those not the names of the variables I need to use?
    • CommentAuthorRockSlice
    • CommentTimeJan 8th 2008
     
    That won't work, as those variables don't have any definition yet.

    For deposit, you need to use GetDepositAmount(sig, [count]). Because we're dealing with the price per item, count = 0.
    For markdown, you need to use AucAdvanced.Settings.GetSetting("util.appraiser.bid.markdown")/100
    For vendor, you need to use GetSellValue(hyperlink)

    As for placement, you'll want them a little earlier, before Undercut calculates how much it's changed the price by. So right before {if (marketprice > 0) then} (line 111)

    local sig = strjoin(":", itemId, property, factor)
    local deposit = GetDepositAmount(sig)
    local markdown = math.floor(AucAdvanced.Settings.GetSetting("util.appraiser.bid.markdown") or 0)/100
    local vendor = GetSellValue(hyperlink)

    if (matchprice * (1 - markdown)) < (vendor + deposit) then
    matchprice = (vendor + deposit) / (1 - markdown)
    end


    Please note: I make no guarantees that this works. You may have to fiddle around a bit with it to get what you want.
    • CommentAuthorThortok2000
    • CommentTimeJan 9th 2008 edited
     
    I'm a pretty quick learner, I just haven't been exposed to LUA that much. Before I just straight copy that into there, let's see if I can figure out what's happening and say it in layman's terms.

    1 - Setting the value of 'sig' as a string with 4 values, the first being a colon, then the ID of the item, then the property, then the factor. Basically the ID of the item.
    2 - Setting 'deposit' as the deposit amount of 'sig'. Apparently you have to do this via sig because of how the function GetDepositAmount works.
    3 - "math.floor" I don't know what this function does. But I see 'or 0' and then divided by 100... Is that basically defaulting to 0 if no markdown is set, to be robust? And then setting that value to markdown, sure. 'or 0' divided by 100 makes me think it's going to be 'true, divided by a hundred', that's a boolean divided by an integer... Confusing. Maybe if I knew what math.floor did I wouldn't be confused.
    4 - Setting 'vendor' as the vendor value. Apparently this one needs 'hyperlink' instead of 'sig' like deposit cost needs. That confuses me too, but okay.

    And then essentially the formula I want. Really, my three questions (so I can understand LUA and/or Auctioneer's coding better) are, a) why do you have to define sig and use that to get deposit cost? b) what does math.floor do? c) why does the vendor-cost-finding function use 'hyperlink' (which doesn't need definition) and the deposit-cost-finding-function use the 'sig' string/array (which does)?

    Sorry if I'm asking newbie questions. I just want to learn. ^_^
    • CommentAuthorRockSlice
    • CommentTimeJan 9th 2008
     
    1- Almost, not quite. The first argument is the delimiter, so you end up with eg "145:0:0"
    2- Yes
    3- math.floor knocks off any amount smaller than 1, so 5.7 or 5.1 => 5 The opposite is math.ceiling, where it would go to 6. the "or 0" is to be robust, as you surmised. The /100 is because we need eg 0.15 instead of 15
    4- Yes

    Hyperlink doesn't need definition because it's been used before. If you look at the beginning of the function, you'll see that it's actually one of the arguments that is supplied when the function is called.

    As for why the different functions use different arguments, it's because they were most likely written by different people, who thought differently about how they should refer to items.

    It would probably be a good idea for any function that deals with items to take all the various different forms of referring to an item, but that's a job for optimization once we have the addon stable and relatively complete.

    No need to apologize. We were all newcomers once.
  9.  
    It didn't work. =( The first price I look at in the appraiser window gets 'stuck', even if I then select a different item after. And the post items button is grayed out. =(

    I don't know enough about LUA to see what's causing it. I tried a couple things and the closest one I could get to working essentially disabled the match module and it was reverting to market price (but at least I could post items)...

    I'm apparently meddling in waters too deep for me. =( If someone else doesn't code it, I'm just out of luck...
  10.  
    I'm still interested in creating a pricing model of this nature, and I'm still too inexperienced to figure out how to do it on my own. The algorithm I can make an understand, it's the creation of the variables for that algorithm that boggle me. Plus, now that the new version's out, I can do it as its own module.
World of Warcraft™ and Blizzard Entertainment™ are trademarks or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries.