Ejemplo n.º 1
0
        public async Task HeartbeatAsync(GatewayId gatewayId, CancellationToken cancellationToken)
        {
            //Check if Gateway is Running. If not send an Error Msg. Error in Gateway should mean it should go down.(ReportFault api can be used for Gateway to go down.)
            await EnsureGatewayRunningAsync(gatewayId.InstanceId, true);

            //If yes Adds Gateway Info in RD
            //Get Dictionary
            //Add GatewayInformation.
            var stateDictionary = await GetGatewayPingStatusDictionaryAsync();

            var infodic = await this.GetGatewayInformationDictionaryAsync();

            using (var tx = StateManager.CreateTransaction())
            {
                var ifexists = await infodic.ContainsKeyAsync(tx, gatewayId.InstanceId);

                if (!ifexists)
                {   //Dispose call tx abort
                    throw new InvalidOperationException("GatewayInfo has not been Initialized");
                }
                var time = DateTime.UtcNow.Ticks;

                await stateDictionary.AddOrUpdateAsync(tx, gatewayId.InstanceId, time, (k, v) => time);

                await tx.CommitAsync();
            }

            this.gatewayRunningId = gatewayId.InstanceId;
        }
Ejemplo n.º 2
0
        public void Parse_InvalidIdString_ThrowsException()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";

            Assert.Throws <FormatException>(() => GatewayId.Parse($"{driver}:{gateway}:Thing"));
        }
Ejemplo n.º 3
0
        public static void Update(UpdateNavsParam p_updateParam)
        {
            Utils.Logger.Info($"UpdateNavsService.Update()");
            DateTime etNow = Utils.ConvertTimeFromUtcToEt(DateTime.UtcNow);

            if (etNow.IsWeekend())
            {
                return;
            }

            Dictionary <GatewayId, uint> GatewayId2SubTableId = new Dictionary <GatewayId, uint>()
            {
                { GatewayId.GyantalMain, 1 }, { GatewayId.CharmatMain, 2 }, { GatewayId.DeBlanzacMain, 3 }
            };

            foreach (var gw2SubTableId in GatewayId2SubTableId)
            {
                GatewayId       gatewayId = gw2SubTableId.Key;
                List <BrAccSum>?accSums   = BrokersWatcher.gWatcher.GetAccountSums(gatewayId);
                if (accSums == null)
                {
                    continue;
                }

                var navRounded = accSums.GetValue(AccountSummaryTags.NetLiquidation);
                UpdateAssetInDb(p_updateParam, new AssetId32Bits(AssetType.BrokerNAV, gw2SubTableId.Value), navRounded);
            }
        }
Ejemplo n.º 4
0
        public Gateway(IGatewayConfiguration gatewayConfiguration, IMessageHub messageHub)
        {
            _messageHub = messageHub;
            Name        = gatewayConfiguration.Name;
            Id          = new GatewayId(gatewayConfiguration.DriverName, gatewayConfiguration.Name);

            _state = new SynchronizedValue <ThingState>();
        }
Ejemplo n.º 5
0
        protected Node(NodeResource resource)
        {
            // copy data from API object.
            resource.CloneInto(this);

            GatewayName       = GatewayId.ExtractFieldFromResourceId("gateways");
            ResourceGroupName = Id.ExtractFieldFromResourceId("resourcegroups");
        }
Ejemplo n.º 6
0
        public void GetHashCode_GatewayId_EqualsIdStringHashCode()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";

            var gatewayId = new GatewayId(driver, gateway);

            Assert.Equal(gatewayId.ToString().GetHashCode(), gatewayId.GetHashCode());
        }
Ejemplo n.º 7
0
        public void Equals_NullId_ReturnsFalse()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";

            var gatewayId = new GatewayId(driver, gateway);

            Assert.False(gatewayId.Equals((IdBase)null));
        }
Ejemplo n.º 8
0
        public void Equals_SameId_ReturnsTrue()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";

            var gatewayId = new GatewayId(driver, gateway);

            Assert.True(gatewayId.Equals(gatewayId));
        }
Ejemplo n.º 9
0
        public void TryParse_InvalidIdString_ReturnsFalseAndGatewayIdNull()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";

            var parseOk = GatewayId.TryParse($"{driver}:{gateway}:Thing", out var gatewayId);

            Assert.False(parseOk);
            Assert.Null(gatewayId);
        }
Ejemplo n.º 10
0
        public void Equals_NotSameIdString_ReturnsFalse()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";
            const string driver2 = "Driver2";

            var gatewayId = new GatewayId(driver, gateway);

            Assert.False(gatewayId.Equals($"{driver2}:{gateway}"));
        }
Ejemplo n.º 11
0
        internal bool IsGatewayConnected(GatewayId p_ibGatewayIdToTrade)
        {
            var gateway = m_gateways.FirstOrDefault(r => r.GatewayId == p_ibGatewayIdToTrade);

            if (gateway == null)
            {
                return(false);
            }
            return(gateway.IsConnected);
        }
Ejemplo n.º 12
0
        public void Equals_OtherIdWithSameValue_ReturnsTrue()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";

            var gatewayId  = new GatewayId(driver, gateway);
            var gatewayId2 = new GatewayId(driver, gateway);

            Assert.True(gatewayId.Equals(gatewayId2));
        }
Ejemplo n.º 13
0
        public void Parse_ValidIdString_ReturnsGatewayId()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";

            var gatewayId = GatewayId.Parse($"{driver}:{gateway}");

            Assert.Equal(driver, gatewayId.Driver);
            Assert.Equal(gateway, gatewayId.Gateway);
        }
Ejemplo n.º 14
0
        public static bool IsCriticalTradingTime(GatewayId p_gatewayId, DateTime p_timeUtc)
        {
            DateTime timeEt = Utils.ConvertTimeFromUtcToEt(p_timeUtc);

            if (timeEt.DayOfWeek == DayOfWeek.Saturday || timeEt.DayOfWeek == DayOfWeek.Sunday)   // quick check: if it is the weekend => not critical time.
            {
                return(false);
            }

            bool isMarketHoursValid = Utils.DetermineUsaMarketTradingHours(p_timeUtc, out bool isMarketTradingDay, out DateTime marketOpenTimeUtc, out DateTime marketCloseTimeUtc, TimeSpan.FromDays(3));

            if (isMarketHoursValid && !isMarketTradingDay)
            {
                return(false);
            }

            foreach (var critTradingRange in GatewayExtensions.CriticalTradingPeriods)
            {
                if (critTradingRange.GatewayId != p_gatewayId)
                {
                    continue;
                }

                if (!isMarketHoursValid)
                {
                    return(true);                                // Caution: if DetermineUsaMarketTradingHours() failed, better to report that we are in a critical period.
                }
                DateTime critPeriodStartUtc = DateTime.MinValue; // Caution:
                if (critTradingRange.RelativeTimePeriod.Start.Base == RelativeTimeBase.BaseOnUsaMarketOpen)
                {
                    critPeriodStartUtc = marketOpenTimeUtc + critTradingRange.RelativeTimePeriod.Start.TimeOffset;
                }
                else if (critTradingRange.RelativeTimePeriod.Start.Base == RelativeTimeBase.BaseOnUsaMarketClose)
                {
                    critPeriodStartUtc = marketCloseTimeUtc + critTradingRange.RelativeTimePeriod.Start.TimeOffset;
                }

                DateTime critPeriodEndUtc = DateTime.MaxValue;
                if (critTradingRange.RelativeTimePeriod.End.Base == RelativeTimeBase.BaseOnUsaMarketOpen)
                {
                    critPeriodEndUtc = marketOpenTimeUtc + critTradingRange.RelativeTimePeriod.End.TimeOffset;
                }
                else if (critTradingRange.RelativeTimePeriod.End.Base == RelativeTimeBase.BaseOnUsaMarketClose)
                {
                    critPeriodEndUtc = marketCloseTimeUtc + critTradingRange.RelativeTimePeriod.End.TimeOffset;
                }

                if (critPeriodStartUtc <= p_timeUtc && p_timeUtc <= critPeriodEndUtc)   // if p_timeUtc is between [Start, End]
                {
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 15
0
        internal bool WaitOrder(GatewayId p_gatewayIdToTrade, int p_virtualOrderId, bool p_isSimulatedTrades)
        {
            Gateway?userGateway = m_gateways.FirstOrDefault(r => r.GatewayId == p_gatewayIdToTrade);

            if (userGateway == null || !userGateway.IsConnected)
            {
                return(false);
            }

            return(userGateway.WaitOrder(p_virtualOrderId, p_isSimulatedTrades));
        }
Ejemplo n.º 16
0
        internal bool GetVirtualOrderExecutionInfo(GatewayId p_gatewayIdToTrade, int p_virtualOrderId, ref OrderStatus orderStatus, ref double executedVolume, ref double executedAvgPrice, ref DateTime executionTime, bool p_isSimulatedTrades)
        {
            Gateway?userGateway = m_gateways.FirstOrDefault(r => r.GatewayId == p_gatewayIdToTrade);

            if (userGateway == null)
            {
                return(false);
            }

            return(userGateway.GetVirtualOrderExecutionInfo(p_virtualOrderId, ref orderStatus, ref executedVolume, ref executedAvgPrice, ref executionTime, p_isSimulatedTrades));
        }
Ejemplo n.º 17
0
        public void Equals_SameIdStringObject_ReturnsTrue()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";

            var gatewayId = new GatewayId(driver, gateway);

            object id = $"{driver}:{gateway}";

            Assert.True(gatewayId.Equals(id));
        }
Ejemplo n.º 18
0
        public void TryParse_ValidIdString_ReturnsTrueAndOutGatewayId()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";

            var parseOk = GatewayId.TryParse($"{driver}:{gateway}", out var gatewayId);

            Assert.True(parseOk);
            Assert.Equal(driver, gatewayId.Driver);
            Assert.Equal(gateway, gatewayId.Gateway);
        }
Ejemplo n.º 19
0
        public BrokerNav(AssetId32Bits assetId, string symbol, string name, string shortName, CurrencyId currency, User user, DateTime histStartDate, List <BrokerNav> aggregateNavChildren)
            : base(assetId, symbol, name, shortName, currency)
        {
            User = user;
            ExpectedHistoryStartDateLoc = histStartDate;
            AggregateNavChildren        = aggregateNavChildren;

            if (GatewayExtensions.NavSymbol2GatewayId.TryGetValue(Symbol, out GatewayId gatewayId))
            {
                GatewayId = gatewayId;
            }
        }
Ejemplo n.º 20
0
        public Thing(string thingName, GatewayId gatewayId,
                     IThingTemplate thingTemplate, IThingChannelBuilder thingChannelBuilder, IMessageHub messageHub)
        {
            _thingTemplate       = thingTemplate;
            _thingChannelBuilder = thingChannelBuilder;
            _messageHub          = messageHub;
            Name = thingName;
            Id   = new ThingId(gatewayId, thingName);

            _channels = new ConcurrentList <IThingChannel>();
            _state    = new SynchronizedValue <ThingState>();
        }
Ejemplo n.º 21
0
        public BrokerNav(JsonElement row, User[] users) : base(AssetType.BrokerNAV, row)
        {
            User = users.FirstOrDefault(r => r.Username == row[5].ToString() !);
            if (User == null)
            {
                throw new SqException($"BrokerNAV asset '{SqTicker}' should have a user.");
            }

            if (GatewayExtensions.NavSymbol2GatewayId.TryGetValue(Symbol, out GatewayId gatewayId))
            {
                GatewayId = gatewayId;
            }
        }
Ejemplo n.º 22
0
        public void Gateway_CreateId_GetValueOk()
        {
            const string driver   = "Driver1";
            const string gateway  = "Gateway1";
            const string gateway2 = "Gateway2";

            var gatewayId = new GatewayId(driver, gateway);

            Assert.Equal(gateway, gatewayId.Gateway);

            gatewayId.Gateway = gateway2;

            Assert.Equal(gateway2, gatewayId.Gateway);
        }
Ejemplo n.º 23
0
        public void Driver_CreateId_GetValueOk()
        {
            const string driver  = "Driver1";
            const string gateway = "Gateway1";
            const string driver2 = "Driver2";

            var gatewayId = new GatewayId(driver, gateway);

            Assert.Equal(driver, gatewayId.Driver);

            gatewayId.Driver = driver2;

            Assert.Equal(driver2, gatewayId.Driver);
        }
Ejemplo n.º 24
0
        public void ToString_CreateId_ResultOk()
        {
            const string driver   = "Driver1";
            const string gateway  = "Gateway1";
            const string driver2  = "Driver2";
            const string gateway2 = "Gateway2";

            var gatewayId = new GatewayId(driver, gateway);

            Assert.Equal($"{driver}:{gateway}", gatewayId.ToString());

            gatewayId.Driver  = driver2;
            gatewayId.Gateway = gateway2;

            Assert.Equal($"{driver2}:{gateway2}", gatewayId.ToString());
        }
Ejemplo n.º 25
0
        private void UpdateBrAccPoss(GatewayId p_gatewayId)
        {
            List <BrAccSum>?accSums = BrokersWatcher.gWatcher.GetAccountSums(p_gatewayId);

            if (accSums == null)
            {
                return;
            }

            List <BrAccPos>?accPoss = BrokersWatcher.gWatcher.GetAccountPoss(p_gatewayId);

            if (accPoss == null)
            {
                return;
            }

            MemDb.gMemDb.UpdateBrAccPosAssetIds(accPoss);

            BrAccount?brAccount = null;

            foreach (var account in MemDb.gMemDb.BrAccounts)
            {
                if (account.GatewayId == p_gatewayId)
                {
                    brAccount = account;
                    break;
                }
            }
            if (brAccount == null)
            {
                brAccount = new BrAccount()
                {
                    GatewayId = p_gatewayId
                };
                MemDb.gMemDb.BrAccounts.Add(brAccount);
            }

            brAccount.NetLiquidation     = accSums.GetValue(AccountSummaryTags.NetLiquidation);
            brAccount.GrossPositionValue = accSums.GetValue(AccountSummaryTags.GrossPositionValue);
            brAccount.TotalCashValue     = accSums.GetValue(AccountSummaryTags.TotalCashValue);
            brAccount.InitMarginReq      = accSums.GetValue(AccountSummaryTags.InitMarginReq);
            brAccount.MaintMarginReq     = accSums.GetValue(AccountSummaryTags.MaintMarginReq);
            brAccount.AccPoss            = accPoss;
            brAccount.LastUpdate         = DateTime.UtcNow;
        }
Ejemplo n.º 26
0
        private static GatewayInfo CreateMyInfo(StatelessServiceContext context)
        {
            var gatewayId = new GatewayId()
            {
                Name       = context.NodeContext.NodeName,
                InstanceId = String.Concat(context.NodeContext.NodeId.ToString(),
                                           "+", Guid.NewGuid().ToString())
            };


            var gatewayInfo = new GatewayInfo()
            {
                Id          = gatewayId,
                ServiceName = context.ServiceName,
                PartitionId = context.PartitionId,
            };

            return(gatewayInfo);
        }
Ejemplo n.º 27
0
        internal int PlaceOrder(GatewayId p_gatewayIdToTrade, double p_portfolioMaxTradeValueInCurrency, double p_portfolioMinTradeValueInCurrency,
                                Contract p_contract, TransactionType p_transactionType, double p_volume, OrderExecution p_orderExecution, OrderTimeInForce p_orderTif, double?p_limitPrice, double?p_stopPrice, bool p_isSimulatedTrades, double p_oldVolume, StringBuilder p_detailedReportSb)
        {
            Gateway?userGateway = m_gateways.FirstOrDefault(r => r.GatewayId == p_gatewayIdToTrade);

            if (userGateway == null || !userGateway.IsConnected)
            {
                Utils.Logger.Error($"ERROR. PlacingOrder(). GatewayIdToTrade {p_gatewayIdToTrade} is not found among connected Gateways or it is not connected.");
                return(-1);
            }

            var rtPrices = new Dictionary <int, PriceAndTime>()
            {
                { TickType.MID, new PriceAndTime() }
            };                                                                                             // MID is the most honest price. LAST may happened 1 hours ago

            if (m_mainGateway != null)
            {
                m_mainGateway.BrokerWrapper.GetAlreadyStreamedPrice(p_contract, ref rtPrices);
            }
            int virtualOrderId = userGateway.PlaceOrder(p_portfolioMaxTradeValueInCurrency, p_portfolioMinTradeValueInCurrency, p_contract, p_transactionType, p_volume, p_orderExecution, p_orderTif, p_limitPrice, p_stopPrice, rtPrices[TickType.MID].Price, p_isSimulatedTrades, p_oldVolume, p_detailedReportSb);

            return(virtualOrderId);
        }
Ejemplo n.º 28
0
 // Need different IP for different platforms, and different GwClientID for different developers (if they happen to code and connect to IbGateways at the same time)
 public static (string HostIp, GatewayClientID GwClientID) GetHostIpAndGatewayClientID(GatewayId p_gatewayId)
 {
     switch (Utils.RunningPlatform())
     {
     case Platform.Linux:
         return(p_gatewayId switch
         {
             GatewayId.CharmatMain => (ServerIp.LocalhostLoopbackWithIP, GatewayClientID.SqCoreToDcProd),
             GatewayId.DeBlanzacMain => (ServerIp.LocalhostLoopbackWithIP, GatewayClientID.SqCoreToDbProd),
             GatewayId.GyantalMain => (ServerIp.AtsVirtualBrokerServerPublicIpForClients, GatewayClientID.SqCoreToGaProd),
             _ => throw new NotImplementedException()
         });
Ejemplo n.º 29
0
 public GatewaySetupInfo(IGatewayConfiguration gatewayConfiguration, GatewayId id) : base(gatewayConfiguration.Settings)
 {
     Id          = id;
     GatewayType = gatewayConfiguration.GatewayType;
     Address     = gatewayConfiguration.Address;
 }