A solution to counter market botting


(Nakkano) #1

Not sure if this has been suggested before, but reading complaints about market bots (and experiencing them in the past, and reporting them) there is a solution which could be implemented, and it has nothing to do with trying to detect the bots or ban them (which is basically impossible), but rather, to make the bots much less effective.

Solution:
What could be done is to remove the absolute exclusivity that the highest buy or lowest sell order has, and instead have a “market-maker threshold” area, at around .5% - 1% of the item value (TBD), wherein all buy/sell orders with prices within this range (of the leading highest or lowest order, respectively) would be filled by a weighted lottery system, and receive the median price of all the orders within the threshold, regardless of what the player’s actual buy/sell order price was. You would no longer need the absolute highest or lowest price to fill your buy/sell order.

How it Works:
An an example, lets say there are the following sell orders for a item, (lets say a Dominix) arranged like this:
[Price, Quantity]
#1. 195m, 1
#2. 172m, 3
#3. 171.2m, 1
#4. 171.1m, 1

-Lets say the running average price is 170m. The “market-maker threshold” is 1.7m ( 1% )

Now, a market buy order comes in. Here is what happens, calculation wise:
Order #1 is out of range (priced at $195m), and it not included in the calculation. Order #4 is the lowest, and serves as the reference point for the market-maker range (sell orders from $171.1m to $172.8m would be included). Orders 2-4 are included (5 units). Each market order’s chance to fill the incoming buy order is then weighted partly* on the quantity of units they have for sale:
#2: 43% chance
#3: 26% chance
#4: 26% chance

Then the ‘winning’ order is calculated at random and the order is filled at the median sell order price ($172m). Thus, as long as an item stays within this market-maker threshold, it will be filled eventually*. Buy orders would work the same way.

*The problem with using only the ‘number of units’ for weighting is that orders with a single unit will take much longer to get filled when competing with large orders. The weighting would need to account for this by applying something like a square root function to the # of units for sale. Duration of order could also be factored.

Some Issues/Questions I can think of, regarding this system:

  1. Who this benefits:
    Players who do not actively adjust (.01 ISK) their market orders multiple times a day would see a nice benefit on highly competitive items. Bots (and players) that constantly adjust their market orders by .01 ISK all the time will see lowered trade volume on highly competitive goods since .01 ISK adjustments would no longer do anything. This is the trade-off.

  2. Avoiding the market-making:
    As long as orders are priced more than 1% (or, TBD) higher/lower than the current Best price, they won’t be included, so it will be easy to intentionally move “out of range” of the market making, for the purpose of speculating, or waiting for higher spreads, etc.

  3. Undercutting/Outbidding competitors:
    It will require an actually significant price cut (or hike) to guarantee exclusivity to the next incoming market order, but since it is percentage based, it would be something reasonable. Consider Tritanium, with a buy order price of 5.21, sell of 5.34. To place a buy order that gains exclusivity on the next incoming market buy order (at 1%) would require a buy order price of 5.26.

  4. Manipulation
    It’s resistant to any meaningful manipulation (if you think otherwise, do explain). The reason I chose to have the market-making select the median price of the eligible orders (instead of the absolute highest or lowest price) is to avoid manipulation.

  5. Other Benefits
    It would reduce staff time CCP spends on investigating market botting and over time, & discourages these bot accounts from being logged in all the time and taking up system resources.


(ISD Sakimura) #2

Moved to player features & ideas


(Nakkano) #3

Thanks… now no one in MD will see it and provide feedback /s


(Dimitri Morvaine) #4

You are better off going to eve’s reddit forum. Over there are no categories. Also, more people are in the reddit forum than here.


(Lukett MyDabb) #5

Any chance you can describe to me how a market bot works under the current meta? i feel that’s the missing pieces that’s keeping me, and maybe others, from fully understanding this thread.


(Nakkano) #6

Sure, so essentially the bots undercut (or outbid) other orders by .01 ISK in order to receive the next incoming market order.

By grouping orders together, this removes the ability to guarantee receiving the next incoming market by only moving your order by .01 ISK. The only way to guarantee the next market order is to leapfrog the entire que by moving your bid by more than 1%, which is a significant move.

Deciding whether to change a bid by 1% or requires actual thinking… not just the .01 ISK game which is brainless and so easily handled by bot programs.


(Lukett MyDabb) #7

one little loop in the system seems to be that, to use your domi example, buy orders for domis within a 1.7 million isk tolerance are going to be considered if i blindly set up a buy order. but the problem with that is in some cases I’m looking for those absolutes, if not an exact .XX isk amount. if you have sell orders at both ends of the extremes and I’m going to sweat paying an extra 3.4 million for a ship, I’m obviously going to select the cheapest ship to buy.

not to mention:

taking my behavior into account, if i say i want to pay for the domi at 171.1 mil because it’s the lowest price, but the system wants me to buy the 172mil one, who gets jipped? does the system say no and tells me i have to buy the more expensive one or does the seller of domi #2 get shorted .7mil? do we let the system act as an equalizer to allow buyer to get more expensive ship with less isk and create isk to make the seller happy?

that last example might anger the isk sink people and if someone’s getting screwed by the system and not a player, that’s not gonna be good for the game.


(Nakkano) #8

Your assumptions are essentially correct and I can elaborate on all three of those scenarios

If we go with the “median price” method, when placing a market order (lets say it’s an instant order to buy), the buyer would see and pay the median price on their buy order window (and not the absolute lowest price). The random seller receives the same median price, regardless of whether their asking price was above or below the median. In this scenario the buyer is always paying slightly more, and the seller generally breaks even. This is not fair to the buyer and leads me to think the next method is better…

If we give the buyer the lowest price, and give the random seller that same lowest price, the seller would take a cut depending on the difference of their sell order to the lowest current price. This is probably more fair because in the “median” scenario, the buyer is paying more, but not receiving any benefit. The seller on the other hand is receiving a benefit, which is that, their sell order can still be executed for a while, even after it has been undercut slightly. [Also with this method, usage of the system could be entirely optional, and integrated as simply as a checkbox when setting up a buy/sell order: “Compete within 1% of estimated item value”] This would be the cleanest way to do it as it would not affect buyers, and sellers can opt-in.

As you also noticed, the third scenario of giving the buyer the lowest price, and the seller their asking price of their sell order, would end up generating ISK out of thin air to cover the difference, and that creates an impractical distortion.