private void executeLimitSellOrder(Order odr) {
		while (true) {
			if (orderBuyList.isEmpty()) {
				addLimitOrder(odr);
				break;
			} else {				
				if (odr.getPrice() <= this.getBestBidPrice()) {		// execute order
					Order buyOdr = orderBuyList.get(0); 
					int tmpVol = buyOdr.getVolume() - odr.getVolume();
					
					if (tmpVol > 0) {				// sell order volume > buy order volume 
						this.transaction(
								odr.getAgentID(),
								buyOdr.getAgentID(),
								Order.Buysell.SELL,
								odr.getVolume(),
								buyOdr.getPrice());
						buyOdr.setVolume(tmpVol);
						break;
					} else if (tmpVol == 0) {		// sell order volume = buy order volume
						this.transaction(
								odr.getAgentID(),
								buyOdr.getAgentID(),
								Order.Buysell.SELL,
								odr.getVolume(),
								buyOdr.getPrice());
						this.removeLimitOrder(buyOdr);
						break;
					} else {						// sell order volume < buy order volume
						this.transaction(
								odr.getAgentID(),
								buyOdr.getAgentID(),
								Order.Buysell.SELL,
								buyOdr.getVolume(),
								buyOdr.getPrice());
						this.removeLimitOrder(buyOdr);
						odr.setVolume(-tmpVol);
					}
				} else {							// add to buy orderbook
					addLimitOrder(odr);
					break;
				}
			}
		}
	}