Package edu.brown.benchmark.tpce.generators

Source Code of edu.brown.benchmark.tpce.generators.MEETradingFloor

package edu.brown.benchmark.tpce.generators;

import java.lang.reflect.Method;
import java.util.Date;

import edu.brown.benchmark.tpce.generators.TradeGenerator.TradeType;
import edu.brown.benchmark.tpce.util.EGenRandom;

public class MEETradingFloor {
   
    public long  getRNGSeed(){
        return( rnd.getSeed() );
    }
   
    public void  setRNGSeed( long RNGSeed ){
        rnd.setSeed( RNGSeed );
    }
   
    public MEETradingFloor( MEESUTInterface  sut, MEEPriceBoard  priceBoard, MEETickerTape  tickerTape, Date  baseTime, Date  currentTime ){
        this.sut = sut ;
        this.priceBoard = priceBoard;
        this.tickerTape = tickerTape;
        this.baseTime = baseTime;
        this.currentTime = currentTime;
        rnd =  new EGenRandom(EGenRandom.RNG_SEED_BASE_MEE_TRADING_FLOOR );
        orderProcessingDelayMean = 1.0;
        Method SendTradeResult = null;
            try{
                SendTradeResult = MEETradingFloor.class.getMethod("sendTradeResult", TTradeRequest.class);
            }catch(Exception e){
                e.printStackTrace();
            }
        orderTimers = new TimerWheel(TTradeRequest.class, this, SendTradeResult, 5, 1);
     }
       
   
     public MEETradingFloor(MEESUTInterface  sut, MEEPriceBoard  priceBoard, MEETickerTape  tickerTape, Date  baseTime, Date  currentTime, long RNGSeed){
         this.sut = sut ;
         this.priceBoard = priceBoard;
         this.tickerTape = tickerTape;
         this.baseTime = baseTime;
         this.currentTime = currentTime;
         rnd =  new EGenRandom(RNGSeed );
         orderProcessingDelayMean = 1.0;
     }
    
     private double  genProcessingDelay(double mean){
        double result = ( -1.0 * Math.log( rnd.rndDouble() )) * mean;
   
        if( result > maxOrderProcessingDelay ){
            return( maxOrderProcessingDelay );
        }
        else{
            return result;
        }
    }
   
     public int  submitTradeRequest( TTradeRequest tradeReq ){
        switch( tradeReq.eAction ){
        case eMEEProcessOrder:
            {
                return( orderTimers.startTimer( genProcessingDelay( orderProcessingDelayMean )));
            }
        case eMEESetLimitOrderTrigger:
            tickerTape.PostLimitOrder( tradeReq );
            return( orderTimers.processExpiredTimers() );
        default:
            return( orderTimers.processExpiredTimers() );
        }
    }
   
    public int  generateTradeResult(){
        return( orderTimers.processExpiredTimers() );
    }
   
    public void  sendTradeResult( TTradeRequest tradeReq ){
        TradeType            eTradeType;
        TTradeResultTxnInput    txnInput = new TTradeResultTxnInput();
        TTickerEntry            TickerEntry = new TTickerEntry();
        double                  CurrentPrice = -1.0;
   
        eTradeType = tickerTape.ConvertTradeTypeIdToEnum( tradeReq.trade_type_id.toCharArray() );
        CurrentPrice = priceBoard.getCurrentPrice( tradeReq.symbol ).getDollars();
   
        txnInput.trade_id = tradeReq.trade_id;
   
        if(( eTradeType == TradeType.eLimitBuy && tradeReq.price_quote < CurrentPrice )||( eTradeType == TradeType.eLimitSell && tradeReq.price_quote > CurrentPrice )){
            txnInput.trade_price = tradeReq.price_quote;
        }
        else{
            txnInput.trade_price = CurrentPrice;
        }
   
        sut.TradeResulttxnInput );
   
        TickerEntry.symbol = new String( tradeReq.symbol);
        TickerEntry.trade_qty = tradeReq.trade_qty;
   
        TickerEntry.price_quote = CurrentPrice;
   
        tickerTape.AddEntry(TickerEntry);
    }
   
    private MEESUTInterface                                        sut;
    private MEEPriceBoard                                          priceBoard;
    private MEETickerTape                                          tickerTape;

    private Date                                                      baseTime;
    private Date                                                      currentTime;

    private TimerWheel                                               orderTimers;
    private EGenRandom                                             rnd;
    private  double                                                orderProcessingDelayMean;
    private static final int                                       maxOrderProcessingDelay = 5;

    public static final int  NO_OUTSTANDING_TRADES = -1;
}
TOP

Related Classes of edu.brown.benchmark.tpce.generators.MEETradingFloor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.