Example #1
0
 /// <summary>
 /// Compare two orders
 /// </summary>
 /// <param name="otherOrder">an other order to compare</param>
 /// <returns>return "true" if this orders equal "else" otherwise</returns>
 public bool compare(Order otherOrder)
 {
     return (otherOrder.symbol.Equals(this.symbol) &&
             otherOrder.lots == this.Lots &&
             otherOrder.direction == this.direction);
 }
 public void ApiEvent(int code, Object order)
 {
     Order fullSpecifiedOrder;
     Order convertedOrder;
     switch (code)
     {
         case Presets.ORDER_FILLED:
                 convertedOrder = order as Order;
                 fullSpecifiedOrder = _localDb.ReturnFromQueue(convertedOrder.lOrderId);
                 if (fullSpecifiedOrder != null)
                 {
                     fullSpecifiedOrder.Price = (convertedOrder).Price;
                     eventListener.Invoke(fullSpecifiedOrder);
                 }
                 break;
         case Presets.ORDER_NOT_FILLED:
                 convertedOrder = order as Order;
                 fullSpecifiedOrder = _localDb.ReturnFromQueue(convertedOrder.lOrderId);
                 if (fullSpecifiedOrder != null)
                 {
                     fullSpecifiedOrder.Comment = convertedOrder.Comment;
                     Console.WriteLine("Order not filled " + fullSpecifiedOrder.strOrderId);
                     errorListsner.Invoke(fullSpecifiedOrder);
                 }
                 break;
         case Presets.ORDER_REJECTED:
                 convertedOrder = order as Order;
                 fullSpecifiedOrder = _localDb.ReturnFromQueue(convertedOrder.lOrderId);
                 if (fullSpecifiedOrder != null)
                 {
                     fullSpecifiedOrder.Comment = convertedOrder.Comment;
                     Console.WriteLine("Order rejected " + fullSpecifiedOrder.strOrderId);
                     errorListsner.Invoke(fullSpecifiedOrder);
                 }
                 break;
         case Presets.LOGGINED:
             {
                 Console.WriteLine("Logined");
             }
             break;
         default:
             {
                 Order order1 = new Order();
                 order1.Comment = "Unknow error";
                 errorListsner.Invoke(order1);
                 break;
             }
     }
 }
Example #3
0
 /// <summary>
 /// Create an independent copy of this Order object
 /// </summary>
 /// <returns>An independent Order object</returns>
 public Order Clone()
 {
     Order clonedOrder = new Order();
     clonedOrder.Comment   = (String)this.Comment.Clone();
     clonedOrder.Direction = this.Direction;
     clonedOrder.FromID    = this.FromID;
     clonedOrder.lOrderId  = this.lOrderId;
     clonedOrder.Lots      = this.Lots;
     clonedOrder.OrderID   = this.OrderID;
     clonedOrder.PrevScanTime = this.PrevScanTime;
     clonedOrder.Price     = this.Price;
     clonedOrder.Symbol    = (String)this.Symbol.Clone();
     clonedOrder.Time      = this.Time;
     return clonedOrder;
 }
 /// <summary>
 /// Add an open Order object to the database
 /// </summary>
 /// <param name="order"></param>
 public void AddOpen(Order order)
 {
     Add(order);
 }
 public void AddOrderToHistory(String userId, Order order)
 {
     _localDb.OrderToHistory(userId, order);
 }
 /// <summary>
 /// Add an order to the database
 /// </summary>
 /// <param name="order">Order object to add to database</param>
 private void Add(Order order)
 {
     _localDb.InsertToQueue(order, userID);
 }
 /// <summary>
 /// Add a close order to the database.\n Important! The direction of order will chnaged 
 /// </summary>
 /// <param name="order">an Order object</param>
 public void AddClose(Order order)
 {
     Order order2 = order.Clone();
     order2.Direction = (order.Direction == 0 ? 1 : 0);
     Add(order2);
 }
Example #8
0
 /// <summary>
 /// This constructor creates a position by order
 /// </summary>
 /// <param name="order"> order which open the position</param>
 public Position(Order order)
 {
     this.symbol = order.Symbol;
     this.qty = order.Lots;
     this.direction = order.Direction;
 }
Example #9
0
 ///<summary>
 ///Add an order to current position
 ///throws Exception when the Order object symbol not compatible with current positions symbol
 ///</summary>
 ///<param name = "order"> order - an Order object</param>
 public void addOrder(Order order)
 {
     if (!this.symbol.Equals(order.Symbol)) throw new Exception("The orders symbol and positions symbol not compatible");
     if (this.direction == order.Direction)
     {
         this.qty += order.Lots;
     }
     else
     {
         this.qty -= order.Lots;
         if (this.qty < 0.0)
         {
             this.direction = order.Direction;
             this.qty *= -1.0;
         }
     }
 }
Example #10
0
 /// <summary>
 /// Convert current posiiton to order
 /// </summary>
 /// <returns>an order that represent tjis position</returns>
 public Order ToOrder()
 {
     Order o = new Order();
     o.Symbol = symbol;
     o.Direction = this.direction;
     o.Lots = this.qty;
     return o;
 }
Example #11
0
 ///<summary>
 ///Add an order to the current position. Throw an Exception if the position and order not compatibles
 ///</summary>
 ///<param name="order"> an Order object </param>
 ///<returns>Order object if after adding, the position 
 ///changes his direction. In this case the qty of position will be 0 (position closed),
 ///and the Order object represent the carry of position. Otherwise return null.</returns>
 public Order addOrderUntilClose(Order order)
 {
     Order resultOrder = null;
     if (!this.symbol.Equals(order.Symbol)) throw new Exception("The orders symbol and positions symbol not compatible");
     if (this.direction == order.Direction)
     {
         this.qty += order.Lots;
     }
     else
     {
         if (this.qty > order.Lots)
         {
             this.qty -= order.Lots;
         }
         else
         {
             resultOrder = new Order();
             resultOrder.Symbol = this.symbol;
             resultOrder.Direction = order.Direction;
             resultOrder.Lots = order.Lots - this.qty;
             this.qty = 0.0;
         }
     }
     return resultOrder;
 }
 /// <summary>
 /// Convert datas from Reader to an Order object
 /// </summary>
 /// <param name="reader">a non empty reader</param>
 /// <returns>na Order object instance</returns>
 private Order ReaderToOrder(SqlDataReader reader)
 {
     Order order     = new Order();
     order.OrderID   = Convert.ToInt64(reader["ORDERID"]);
     order.Direction = Convert.ToInt32(reader["DIRECTION"]);
     order.Symbol    = reader["SYMBOL"].ToString();
     order.Lots      = Convert.ToDouble(reader["LOTS"]);
     order.Time      = Convert.ToDateTime(reader["OrderTime"]);
     order.Price     = Convert.ToDouble(reader["PRICE"]);
     order.FromID    = Convert.ToInt64(reader["FROMID"]);
     order.PrevScanTime = Convert.ToDateTime(reader["PrevScanTime"]);
     return order;
 }
 /// <summary>
 /// This method write an order to History table
 /// </summary>
 /// <param name="userId">user ID</param>
 /// <param name="order">anOrder object to write to database</param>
 public void OrderToHistory(String userId, Order order)
 {
     lock (_sqLlock)
     {
         StringBuilder sqlString = new StringBuilder();
         sqlString.Append("INSERT INTO HISTORY (\"USERID\", \"SYSTEMID\", \"DIRECTION\", \"SYMBOL\", \"VOLUME\", \"PRICE\")\n VALUES (");
         sqlString.Append(" '").Append(userId).Append("', ").Append(order.FromID).Append(", ").Append(
             order.Direction).Append(", '").Append(order.Symbol).Append("', ");
         sqlString.Append(Convert.ToString(order.Lots, CultureInfo.InvariantCulture)).Append(", ");
         sqlString.Append(Convert.ToString(order.Price, CultureInfo.InvariantCulture)).Append(");");
         SqlCommand sqlCommads = new SqlCommand(sqlString.ToString(), _connection);
         Console.WriteLine(sqlCommads.CommandText);
         sqlCommads.ExecuteNonQuery();
         sqlCommads.Dispose();
     }
 }
 /// <summary>
 /// Insert an Order to a queue, that phisicaly stored in a database table
 /// </summary>
 /// <param name="order">an Order object to store</param>
 /// <param name="userId">a user ID wich order will be stores</param>
 public void InsertToQueue(Order order, String userId)
 {
     lock (_sqLlock)
     {
         order.Time = DateTime.Now;
         StringBuilder sqlString = new StringBuilder();
         sqlString.Append(
             "Insert Into Orders(\"OrderId\",\"Direction\",\"Symbol\",\"Lots\",\"OrderTime\", \"Price\", \"FromID\", \"UserID\", \"PrevScanTime\")");
         sqlString.Append("VALUES ('").Append(order.strOrderId).Append("', ").Append(order.Direction).Append(
             ", '");
         sqlString.Append(order.Symbol).Append("',").Append(order.Lots.ToString("G", CultureInfo.InvariantCulture));
         sqlString.Append(", '").Append(order.Time.ToString("yyyy-MM-dd HH:mm:ss")).Append("', ");
         sqlString.Append(order.Price.ToString("G", CultureInfo.InvariantCulture)).Append(", ");
         sqlString.Append(order.FromID).Append(", '").Append(userId).Append("', '").Append(
             order.PrevScanTime.ToString("yyyy-MM-dd HH:mm:ss"));
         sqlString.Append("')");
         SqlCommand command = new SqlCommand(sqlString.ToString(), _connection);
         command.ExecuteNonQuery();
         command.Dispose();
     }
 }