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); //} }
public GaussianRandomv2(Random random = null) { _random = random ?? new Random(); _random = RandomProvider.GetThreadRandom(); }