コード例 #1
0
        /// <summary>
        /// Runs a simulation of an active market based on user input
        /// </summary>
        private static void Simulator()
        {
            string input = "";

            while (input != "H" && input != "M" && input != "L" && input != "X")
            {
                Console.Write("Please enter a market volatility (H)igh, (M)edium, or (L)ow or press X to go back to the main menu: ");
                input = Console.ReadLine().ToUpper();
            }
            switch (input)
            {
            case "H":
                volatility = MarketVolatility.High;
                break;

            case "M":
                volatility = MarketVolatility.Medium;
                break;

            case "L":
                volatility = MarketVolatility.Low;
                break;

            case "X":
                return;
            }
            account.NextPeriod();
            MarketSimulator.Tick(volatility, stocks);
        }
コード例 #2
0
 public MainGridViewModel(OrdersRepository repository)
 {
     this.repository      = repository;
     Orders               = repository.Orders;
     this.refreshCommand  = new Command(ExecuteRefreshCommand);
     this.market          = new MarketSimulator();
     PullToRefreshCommand = new Command(ExecutePullToRefreshCommand);
 }
コード例 #3
0
        public MainGridViewModel(OrdersRepository repository)
        {
            this.repository = repository;
            Orders          = repository.Orders;
//            this.SwipeButtonCommand = new Command((o) => SwipeButtonClickExecute(o));
            this.refreshCommand       = new Command(ExecuteRefreshCommand);
            this.market               = new MarketSimulator();
            this.PullToRefreshCommand = new Command(ExecutePullToRefreshCommand);
            this.LoadMoreCommand      = new Command(ExecuteLoadMoreCommand);
        }
コード例 #4
0
 public override MarketSimulator.Contracts.Order FilterLimitOrders(MarketSimulator.Contracts.Order order)
 {
     if (order != null && !_compete && order.Type == OrderType.LimitOrder)
     {
         return null;
     }
     else
     {
         return order;
     }
 }
コード例 #5
0
        public MarketSimulator.Contracts.Order GetNextAction(MarketSimulator.Contracts.LimitOrderBookSnapshot limitOrderBook)
        {
            count++;

            if (count == 50)
            {
                var order = new MarketSimulator.Contracts.Order();
                order.Valid = true;
                order.Type = MarketSimulator.Contracts.OrderType.MarketOrder;
                order.Quantity = 10000;
                order.Side = MarketSimulator.Contracts.OrderSide.Buy;
                order.UserID = "Whale";

                return order;

            }

                return null;
        }
コード例 #6
0
ファイル: Agent.cs プロジェクト: preyen/MarketSimulator
        public MarketSimulator.Contracts.Order GetNextAction(MarketSimulator.Contracts.LimitOrderBookSnapshot limitOrderBookSnapshot, int day, int tradingPeriod)
        {
            if (!WillTradeInThisPeriod(day, tradingPeriod))
            {
                return null;
            }

            var randomDraw = (ExpectedAssetLiquidationValue - ExpectedAssetLiquidationValueOrderRange) + (_random.NextDouble() * ExpectedAssetLiquidationValueOrderRange * 2);

            var orderQuantity = Math.Round(_random.NextDouble() * _maxOrderQuantity,0);

            Order order = new Order();
            order.Price = randomDraw;
            order.Quantity = orderQuantity;
            order.UserID = _name;

            if (randomDraw > ExpectedAssetLiquidationValue)
            {
                //sell
                order.Side = OrderSide.Sell;
                if (limitOrderBookSnapshot != null && limitOrderBookSnapshot.BestBidPrice != null && randomDraw < limitOrderBookSnapshot.BestBidPrice)
                {
                    //sell market order
                    order.Type = OrderType.MarketOrder;
                }
                else
                {
                    //sell limit order
                    order.Type = OrderType.LimitOrder;
                }
            }
            else
            {
                //buy
                order.Side = OrderSide.Buy;
                if (limitOrderBookSnapshot != null && limitOrderBookSnapshot.BestAskPrice != null && randomDraw > limitOrderBookSnapshot.BestAskPrice)
                {
                    //buy market order
                    order.Type = OrderType.MarketOrder;
                }
                else
                {
                    //buy limit order
                    order.Type = OrderType.LimitOrder;
                }
            }

            order = FilterLimitOrders(order);

            return order;
        }