コード例 #1
0
        public static void UpdateAssetsNew()
        {
            using (var aConnection = new SqlConnection(_connectionString))
            {
                SqlTransaction transaction = null;

                try
                {
                    aConnection.Open();
                    transaction = aConnection.BeginTransaction();

                    IList <AssetNew> assets = new List <AssetNew>();
                    long             startOfDayTimestamp = TimestampUtility.GetStartOfDayTimestamp();
                    long             endOfDayTimestamp   = TimestampUtility.GetStartOfDayTimestamp();
                    var cmd = new SqlCommand("p_ResetData", aConnection, transaction);
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.ExecuteNonQuery();

                    assets = GetAssetsDetailNew(aConnection, transaction);
                    foreach (var asset in assets)
                    {
                        startOfDayTimestamp = TimestampUtility.GetCurrentTimestamp((DateTime)asset.UTCStartDateTime);
                        endOfDayTimestamp   = TimestampUtility.GetCurrentTimestamp((DateTime)asset.UTCEndDateTime);
                        for (var i = 1; i <= 288; i++)
                        {
                            var timestamp = startOfDayTimestamp + expiryMultiplier * i;
                            if (timestamp > endOfDayTimestamp)
                            {
                                break;
                            }
                            cmd = new SqlCommand("INSERT INTO ExpiryTimestamps ([AssetID],[Timestamp])" +
                                                 "VALUES(@assetId, @timestamp)", aConnection);

                            cmd.Parameters.AddWithValue("assetId", asset.ID);
                            cmd.Parameters.AddWithValue("timestamp", timestamp);

                            cmd.Transaction = transaction;
                            cmd.ExecuteNonQuery();
                        }
                    }

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    if (transaction != null)
                    {
                        transaction.Rollback();
                    }
                    throw e;
                }
            }
        }
コード例 #2
0
        public static void UpdateExpiryAllDayTimestamp()
        {
            using (var aConnection = new SqlConnection(_connectionString))
            {
                SqlTransaction transaction = null;

                try
                {
                    aConnection.Open();
                    transaction = aConnection.BeginTransaction();

                    IList <AssetNew> assets = new List <AssetNew>();
                    long             startOfDayTimestamp = TimestampUtility.GetStartOfDayTimestamp();
                    long             endOfDayTimestamp   = TimestampUtility.GetEndOfDayTimestamp();
                    for (var i = 1; i <= 288; i++)
                    {
                        var timestamp = startOfDayTimestamp + expiryMultiplier * i;
                        if (timestamp > endOfDayTimestamp)
                        {
                            break;
                        }
                        var cmd = new SqlCommand("p_UpdateExpiryAllDayTimestamps", aConnection, transaction);
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("timestamp", timestamp);
                        cmd.Parameters.AddWithValue("time", TimestampUtility.TimestampToDateTime(timestamp));
                        cmd.Transaction = transaction;
                        cmd.ExecuteNonQuery();
                    }
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    if (transaction != null)
                    {
                        transaction.Rollback();
                    }
                    throw e;
                }
            }
        }
コード例 #3
0
        public static string ValidateOrder(Account account, Asset asset, OrderPlaceRequest request)
        {
            string msg = string.Empty;

            if (asset == null)
            {
                msg = "Not a valid Asset";
                return(msg);
            }
            if (asset.Symbol == null)
            {
                msg = "Not a valid Symbol";
                return(msg);
            }
            //shashi-START
            Logger.Info("asset.Symbol.Name: " + asset.Symbol.Name);

            //foreach (var x in DataFeedProcessor.LastQuotesList)
            //{
            try
            {
                var x = DataFeedProcessor.LastQuotesList.Where(y => y.Key == asset.Symbol.Name).FirstOrDefault();
                if (x.Key != null && x.Value != null)
                {
                    Logger.Info(" Sumbol: " + x.Key + " x.Value.Price: " + x.Value.Price + " x.Value.Symbol : " + x.Value.Symbol + " x.Value.Timestamp Time : " + TimestampUtility.TimestampToDateTime(x.Value.Timestamp));
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            //}
            //shashi-END
            Quote lastquote;

            DataFeedProcessor.LastQuotesList.TryGetValue(asset.Symbol.Name, out lastquote);
            request.CurrentMarketPrice = Math.Round((double)request.CurrentMarketPrice, 5, MidpointRounding.AwayFromZero);
            if (lastquote != null && Math.Abs(request.CurrentMarketPrice - lastquote.Price) > 1000) // PriceDifferenece)
            {
                msg = "Price has been changed, Please submit request again";
            }
            else if (lastquote == null || lastquote.Price == 0)
            {
                msg = "No last price found";
            }
            else if (request.Investment > account.Balance)
            {
                msg = msg + "Not a enough balance ";
            }
            else if (request.OptionType == OptionType.Classic && !CheckAssetRelevance(asset, request.ExpiryTimestamp))
            {
                msg = msg + "Order time alredy expired ";
            }
            return(msg);
        }
コード例 #4
0
        private void OnMessageReceived(WebSocketSession session, string m)
        {
            try
            {
                var client = ClientsCollection.Get(session);
                if (client == null)
                {
                    return;
                }

                var r = JsonSerializeHelper.Deserialize <Message>(m);
                switch (r.MsgType)
                {
                case "RegistrationRequest":
                {
                    if (client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request        = JsonSerializeHelper.Deserialize <RegistrationRequest>(m);
                    var responseString = "";

                    if (string.IsNullOrEmpty(request.Login) || string.IsNullOrEmpty(request.Password))
                    {
                        responseString = JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"));
                    }
                    else if (DataProvider.IsUsernameExists(request.Login))
                    {
                        responseString = JsonSerializeHelper.Serialize(new RegistrationResponse
                            {
                                ReqID = request.ReqID,
                                Error = "Someone with this username already exists"
                            });
                    }
                    else
                    {
                        responseString = DataProvider.AddAccount(request.Login, request.Password, request.Email, request.Card)
                                   ? JsonSerializeHelper.Serialize(new RegistrationResponse {
                                ReqID = request.ReqID
                            })
                                   : JsonSerializeHelper.Serialize(new RegistrationResponse {
                                ReqID = request.ReqID, Error = "Undefined error"
                            });
                    }

                    session.Send(responseString);
                    break;
                }

                case "LoginRequest":
                {
                    if (client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("User Already logged in to server")));
                        return;
                    }

                    var request        = JsonSerializeHelper.Deserialize <LoginRequest>(m);
                    var responseString = "";

                    if (DataProvider.ValidateUserCredentials(request.Login, request.Password))
                    {
                        client.Username    = request.Login;
                        client.Password    = request.Password;
                        client.IsLoggedIn  = true;
                        client.AccountInfo = DataProvider.GetAccountInfo(client.Username);
                        responseString     = JsonSerializeHelper.Serialize(new LoginResponse
                            {
                                ReqID = request.ReqID
                            });

                        _connectedUsers.Add(new UserSession()
                            {
                                UserName = client.Username
                                ,
                                Session = session
                            });
                    }
                    else
                    {
                        responseString = JsonSerializeHelper.Serialize(new LoginResponse
                            {
                                ReqID = request.ReqID,
                                Error = "Invalid credentials"
                            });
                    }

                    session.Send(responseString);
                    break;
                }

                case "LogoutRequest":
                {
                    var request        = JsonSerializeHelper.Deserialize <LogoutRequest>(m);
                    var responseString = client.IsLoggedIn
                                 ? JsonSerializeHelper.Serialize(new LogoutResponse {
                            ReqID = request.ReqID
                        })
                                 : JsonSerializeHelper.Serialize(new ErrorResponse("No user session availble with server"));
                    session.Send(responseString);
                    session.Close();
                    break;
                }

                case "QuotesSubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <QuotesSubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.AddQuote(request.Symbol.Name);
                    break;
                }

                case "QuotesUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <QuotesUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.RemoveQuote(request.Symbol.Name);
                    break;
                }

                case "AccountInfoGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request  = JsonSerializeHelper.Deserialize <AccountInfoGetRequest>(m);
                    var response = new AccountInfoGetResponse
                    {
                        ReqID       = request.ReqID,
                        AccountData = client.AccountInfo,
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "AccountInfoSubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <AccountInfoSubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.AccountInfo = true;
                    break;
                }

                case "AccountInfoUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <AccountInfoUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.AccountInfo = false;
                    break;
                }

                case "AssetsGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request  = JsonSerializeHelper.Deserialize <AssetsGetRequest>(m);
                    var response =
                        new AssetsGetResponse
                    {
                        ReqID  = request.ReqID,
                        Assets = DataProvider.GetAssets()
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "AssetsGetBySymbolRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var   request   = JsonSerializeHelper.Deserialize <AssetsGetBySymbolRequest>(m);
                    var   timestamp = (TimestampUtility.GetCurrentTimestamp() / 1000) + DataProvider.StopExpiryLimitinMinutes * 60;
                    var   asset     = DataProvider.GetAssets(request.Symbol);
                    Asset temp      = new Asset();
                    if (asset != null)
                    {
                        temp.ID             = asset.ID;
                        temp.Symbol         = asset.Symbol;
                        temp.ExpiryTimeList = asset.ExpiryTimeList.Where(x => (x.ExpiryTimestamps / 1000) > timestamp)
                                              .Take(4)
                                              .ToList <ExpiryTime>();
                    }
                    var response =
                        new AssetsGetBySymbolResponse
                    {
                        ReqID  = request.ReqID,
                        Assets = temp
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "BarsSubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <BarsSubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.AddBarSubscription(request.ID, request.Symbol.Name, request.Periodicity, request.Interval);
                    break;
                }

                case "BarsUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <BarsUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.RemoveBarSubscription(request.ID);
                    break;
                }

                case "HistoryGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <HistoryGetRequest>(m);
                    var bars    = request.BarsCount == 0
                                ? DataProvider.GetHistory(request.Symbol, request.Periodicity, request.Interval, request.StartTimestamp)
                                : DataProvider.GetHistory(request.Symbol, request.Periodicity, request.Interval, request.BarsCount);
                    var response = new HistoryGetResponse(request.ReqID, bars);
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "OrderPlaceRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }
                    var    request   = JsonSerializeHelper.Deserialize <OrderPlaceRequest>(m);
                    string res       = string.Empty;
                    var    asset     = DataProvider.GetAssetById(request.OptionID);
                    var    valResult = DataProvider.ValidateOrder(client.AccountInfo, asset, request);
                    if (!String.IsNullOrEmpty(valResult))
                    {
                        var response = new OrderPlaceResponse
                        {
                            ReqID   = request.ReqID,
                            ClOrdID = request.ClOrdID,
                            Error   = valResult
                        };
                        res = JsonSerializeHelper.Serialize(response);
                        session.Send(res);
                    }
                    else
                    {
                        if (request.OptionType == Enums.OptionType.Express)
                        {
                            request.ExpiryTimestamp = DataProvider.GetCurrentTimestamp() + (request.ExpressExpiryInSeconds * 1000);
                        }
                        DateTime expiry   = TimestampUtility.TimestampToDateTime(request.ExpiryTimestamp);
                        var      order    = DataProvider.PlaceOrder(client.AccountInfo, asset, request);
                        var      response = new OrderPlaceResponse
                        {
                            ReqID    = request.ReqID,
                            ClOrdID  = request.ClOrdID,
                            SrvOrdID = order.ID,
                            Expiry   = expiry
                        };
                        res = JsonSerializeHelper.Serialize(response);
                        session.Send(res);
                        sendSubcriptionNotification(session, client, order);
                    }
                    Logger.Log(client.Username, "OrderPlaceRequest", m, res, !String.IsNullOrEmpty(valResult));
                    break;
                }

                case "OrderCancelRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OrderCancelRequest>(m);
                    var order   = DataProvider.CancelOrder(client.AccountInfo, request.SrvOrdID);

                    if (order == null)
                    {
                        var response = new OrderCancelResponse
                        {
                            ReqID    = request.ReqID,
                            SrvOrdID = request.SrvOrdID,
                            Error    = "Error"
                        };
                        session.Send(JsonSerializeHelper.Serialize(response));
                    }
                    else
                    {
                        var response = new OrderCancelResponse
                        {
                            ReqID    = request.ReqID,
                            SrvOrdID = request.SrvOrdID
                        };
                        session.Send(JsonSerializeHelper.Serialize(response));

                        //if (ClientsCollection.Get(session).Subscriptions.OpenOrders)
                        //{
                        //    session.Send(JsonSerializeHelper.Serialize(new OpenOrdersSubscribeResponse
                        //    {
                        //        Orders = new List<Order> { order }
                        //    }));
                        //}

                        //if (ClientsCollection.Get(session).Subscriptions.OrderHistory)
                        //{
                        //    session.Send(JsonSerializeHelper.Serialize(new OrderHistorySubscribeResponse
                        //    {
                        //        Orders = new List<Order>{ order }
                        //    }));
                        //}

                        //if (ClientsCollection.Get(session).Subscriptions.AccountInfo)
                        //{
                        //    session.Send(JsonSerializeHelper.Serialize(new AccountInfoSubscribeResponse
                        //    {
                        //        AccountData = client.AccountInfo
                        //    }));
                        //}
                        sendSubcriptionNotification(session, client, order);
                    }
                    break;
                }

                case "OpenOrdersGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request  = JsonSerializeHelper.Deserialize <OpenOrdersGetRequest>(m);
                    var response = new OpenOrdersGetResponse
                    {
                        ReqID  = request.ReqID,
                        Orders = DataProvider.GetOpenOrders(client.AccountInfo)
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "OpenOrdersSubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OpenOrdersSubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.OpenOrders = true;
                    break;
                }

                case "OpenOrdersUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OpenOrdersUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.OpenOrders = false;
                    break;
                }

                case "OrderHistoryGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request  = JsonSerializeHelper.Deserialize <OrderHistoryGetRequest>(m);
                    var response =
                        new OrderHistoryGetResponse
                    {
                        ReqID  = request.ReqID,
                        Orders = DataProvider.GetOrderHistory(client.AccountInfo)
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "OrderHistorySubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OrderHistorySubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.OrderHistory = true;
                    break;
                }

                case "OrderHistoryUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OrderHistoryUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.OrderHistory = false;
                    break;
                }

                default:
                {
                    session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                    break;
                }
                }
            }
            catch (Exception e)
            {
                session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request : " + e.Message)));
            }
        }