Ejemplo n.º 1
0
        public void start(FuturesOrder newOrder)
        {
            double gusassRadVar;

            orderNumber = Interlocked.Increment(ref i) + (trader * 1000000);


            double v1, v2, v3, v4, v5;

            rand = RandomProvider.GetThreadRandom();

            v1 = rand.NextDouble();
            v2 = rand.NextDouble();
            v3 = rand.NextDouble();
            v4 = rand.NextDouble();
            v5 = rand.NextDouble();
            //Order order = new Order();

            gusassRadVar = GaussRand.StartNextGaussian();

            newOrder.CustomerID = trader;

            newOrder.OrderAction = OrderAction(v5);

            if (newOrder.OrderAction == "NEW")
            {
                newOrder.OrderType = OrderType(v3);
                newOrder.OrderID   = orderNumber;

                if (newOrder.OrderType == "LIMIT")
                {
                    newOrder.BuySell      = BuySell(v2);
                    gusassRadVar          = (newOrder.BuySell == "B" ? Math.Min(1.0, gusassRadVar) : Math.Max(-1, gusassRadVar));//to prevent buy orders from meing too high and sell orders too low
                    newOrder.LimitPrice   = Math.Round(Price.InstrumentPrice + this.sigma * gusassRadVar, 2);
                    newOrder.Instrument   = Instrument(v1);
                    newOrder.Quantity     = Quantity(v4);
                    newOrder.OrigQuantity = newOrder.Quantity;
                }
                else if (newOrder.OrderType == "MARKET")
                {
                    newOrder.LimitPrice   = Price.InstrumentPrice;
                    newOrder.Instrument   = Instrument(v1);
                    newOrder.BuySell      = BuySell(v2);
                    newOrder.Quantity     = Quantity(v4);
                    newOrder.OrigQuantity = newOrder.Quantity;
                }
                else if (newOrder.OrderType == "STOP")
                {
                    newOrder.StopPrice    = Math.Round(Price.InstrumentPrice + this.sigma * gusassRadVar, 2);
                    newOrder.Instrument   = Instrument(v1);
                    newOrder.BuySell      = BuySell(v2);
                    newOrder.Quantity     = Quantity(v4);
                    newOrder.OrigQuantity = newOrder.Quantity;
                }
                else
                {
                    Console.WriteLine("Not valid order type");
                }
            }
            else if (newOrder.OrderAction == "DELETE")
            {
                //have to pull from previous orders some how
                // we need original order ID , customer ID, instrumnet, and BuySell
                int orders = ordersInProcess.Count;
                if (orders != 0) //not working
                {
                    int orderToDel = rand.Next(ordersInProcess.Count);
                    int iter       = 0;
                    foreach (DictionaryEntry order in ordersInProcess)
                    {
                        if (iter == orderToDel)
                        {
                            newOrder = order.Value as FuturesOrder;
                            break;
                        }
                        iter++;
                    }
                    ordersInProcess.Remove(newOrder.OrderID.ToString());
                    newOrder.OrderAction = "DELETE";
                }
                else
                {
                    return;
                }
            }
            else //(newOrder.OrderAction == "Update")
            {
                //have to pull from previous orders some how
                // we need original order ID , customer ID, instrumnet, and BuySell
                int orders = ordersInProcess.Count;
                if (orders != 0)//not working
                {
                    int orderToUpdate = rand.Next(ordersInProcess.Count);
                    int iter          = 0;
                    foreach (DictionaryEntry order in ordersInProcess)
                    {
                        if (iter == orderToUpdate)
                        {
                            newOrder = order.Value as FuturesOrder;
                            break;
                        }
                        iter++;
                    }
                    ordersInProcess.Remove(newOrder.OrderID.ToString());
                    newOrder.OrderAction = "UPDATE";
                    newOrder.LimitPrice  = Price.InstrumentPrice + this.sigma * gusassRadVar; //submits update order with new price, uses same order number
                }
                else
                {
                    return;
                }
            }
            lock (this)
            {
                newConnection.sendOrders(ToXML(newOrder));
            }
            if (newOrder.OrderAction == "NEW")
            {
                ordersInProcess.Add(newOrder.OrderID.ToString(), newOrder);// orders will be stored here until order is executed
            }
            //lock (this)//this is just for testing / writes all created orders to csv file
            //{
            //    if(newOrder.OrderAction =="NEW")
            //
            //    csvWriter(newOrder);
            //}
        }
Ejemplo n.º 2
0
 public GaussianRandomv2(Random random = null)
 {
     _random = random ?? new Random();
     _random = RandomProvider.GetThreadRandom();
 }