function updateCurrentRate()  
	internal 
	returns(
	  uint256 _rate,
		uint256 _costToMoveFivePercent
	) {

		
		uint256[3] memory midPointArray = [
		    findMidPoint(getUniswapBuyPrice(ONE_ETH), getUniswapSellPrice(ONE_ETH)),
		    findMidPoint(getBancorBuyPrice(ONE_ETH), getBancorBuyPrice(ONE_ETH)),
		    findMidPoint(getEth2DaiBuyPrice(ONE_ETH), getEth2DaiSellPrice(ONE_ETH))
		];

		
		uint256 uniswapLiquidity = getEthBalance(UNISWAP);
		uint256 bancorLiquidity = getDaiBalance(BANCORDAI) * ONE_ETH / midPointArray[1]; 
		uint256 eth2daiRoughLiquidity = getDaiBalance(ETH2DAI) * ONE_ETH / midPointArray[2]; 
        
		
		
		uint256 costToMovePriceUniswap = (uniswapLiquidity * FIVE_PERCENT) / 50; 
		uint256 costToMovePriceBancor = (bancorLiquidity * FIVE_PERCENT) / 50;
		
		
		uint256 largeBuy = eth2daiRoughLiquidity / 2;
		uint256 priceMove = getEth2DaiBuyPrice(largeBuy);
		uint256 priceMovePercent = ((midPointArray[2] * 10000) / priceMove) - 10000;
		
		
		
		if (priceMovePercent < FIVE_PERCENT * 100) {
			largeBuy += eth2daiRoughLiquidity - 1;
			priceMove = getEth2DaiBuyPrice(largeBuy);
			priceMovePercent = ((midPointArray[2] * 10000) / priceMove) - 10000;
		}

		uint256 ratioOfPriceMove = FIVE_PERCENT * 10000 / priceMovePercent;
 		uint256 costToMovePriceEth2Dai = largeBuy * ratioOfPriceMove / 100;
		
		
		uint256[3] memory costOfPercentMoveArray = [costToMovePriceUniswap, costToMovePriceBancor, costToMovePriceEth2Dai];
        
    return calcRatio(midPointArray, costOfPercentMoveArray);
	}