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; } } }
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; } } }
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); }
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))); } }