protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; return; } if (marketDataUpdate.MarketDataType != Data.MarketDataType.Last || marketDataUpdate.Instrument.MarketData.LastClose == null) { return; } bool tryAgainLater; double rate = 0; if (account != null) { rate = marketDataUpdate.Instrument.GetConversionRate(Data.MarketDataType.Bid, account.Denomination, out tryAgainLater); } switch (Unit) { case Cbi.PerformanceUnit.Percent: CurrentValue = (marketDataUpdate.Price - marketDataUpdate.Instrument.MarketData.LastClose.Price) / marketDataUpdate.Instrument.MarketData.LastClose.Price; break; case Cbi.PerformanceUnit.Pips: CurrentValue = ((marketDataUpdate.Price - marketDataUpdate.Instrument.MarketData.LastClose.Price) / Instrument.MasterInstrument.TickSize) * (Instrument.MasterInstrument.InstrumentType == Cbi.InstrumentType.Forex ? 0.1 : 1); break;; case Cbi.PerformanceUnit.Ticks: CurrentValue = (marketDataUpdate.Price - marketDataUpdate.Instrument.MarketData.LastClose.Price) / Instrument.MasterInstrument.TickSize; break; case Cbi.PerformanceUnit.Currency: CurrentValue = (marketDataUpdate.Price - marketDataUpdate.Instrument.MarketData.LastClose.Price) * Instrument.MasterInstrument.PointValue * rate * (Instrument.MasterInstrument.InstrumentType == Cbi.InstrumentType.Forex ? (account != null ? account.ForexLotSize : Cbi.Account.DefaultLotSize) : 1); break; case Cbi.PerformanceUnit.Points: CurrentValue = (marketDataUpdate.Price - marketDataUpdate.Instrument.MarketData.LastClose.Price); break; } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; return; } double dailyLow = double.MinValue; double settlementOrLastClose = double.MinValue; if (marketDataUpdate.MarketDataType == MarketDataType.DailyLow && (marketDataUpdate.Instrument.MarketData.LastClose != null || marketDataUpdate.Instrument.MarketData.Settlement != null)) { dailyLow = marketDataUpdate.Price; settlementOrLastClose = marketDataUpdate.Instrument.MarketData.Settlement != null ? marketDataUpdate.Instrument.MarketData.Settlement.Price : marketDataUpdate.Instrument.MarketData.LastClose.Price; } else if ((marketDataUpdate.MarketDataType == MarketDataType.LastClose || marketDataUpdate.MarketDataType == MarketDataType.Settlement) && marketDataUpdate.Instrument.MarketData.DailyLow != null) { dailyLow = marketDataUpdate.Instrument.MarketData.DailyLow.Price; settlementOrLastClose = marketDataUpdate.Instrument.MarketData.Settlement != null ? marketDataUpdate.Instrument.MarketData.Settlement.Price : marketDataUpdate.Price; } else if (isInitialCalculation) { if (marketDataUpdate.Instrument.MarketData.DailyLow != null && (marketDataUpdate.Instrument.MarketData.LastClose != null || marketDataUpdate.Instrument.MarketData.Settlement != null)) { dailyLow = marketDataUpdate.Instrument.MarketData.DailyLow.Price; settlementOrLastClose = marketDataUpdate.Instrument.MarketData.Settlement != null ? marketDataUpdate.Instrument.MarketData.Settlement.Price : marketDataUpdate.Instrument.MarketData.LastClose.Price; } isInitialCalculation = false; } if (dailyLow == double.MinValue || settlementOrLastClose == double.MinValue) { return; } bool tryAgainLater; double rate = 0; if (account != null) { rate = marketDataUpdate.Instrument.GetConversionRate(Data.MarketDataType.Bid, account.Denomination, out tryAgainLater); } switch (Unit) { case Cbi.PerformanceUnit.Percent: CurrentValue = (dailyLow - settlementOrLastClose) / settlementOrLastClose; break; case Cbi.PerformanceUnit.Pips: CurrentValue = ((dailyLow - settlementOrLastClose) / Instrument.MasterInstrument.TickSize) * (Instrument.MasterInstrument.InstrumentType == Cbi.InstrumentType.Forex ? 0.1 : 1); break;; case Cbi.PerformanceUnit.Ticks: CurrentValue = (dailyLow - settlementOrLastClose) / Instrument.MasterInstrument.TickSize; break; case Cbi.PerformanceUnit.Currency: CurrentValue = (dailyLow - settlementOrLastClose) * Instrument.MasterInstrument.PointValue * rate * (Instrument.MasterInstrument.InstrumentType == Cbi.InstrumentType.Forex ? (account != null ? account.ForexLotSize : Cbi.Account.DefaultLotSize) : 1); break; case Cbi.PerformanceUnit.Points: CurrentValue = (dailyLow - settlementOrLastClose); break; } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; sessionIterator = null; return; } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { currentValue = double.MinValue; if (lastValue != currentValue) { Draw.TextFixed(this, "NinjaScriptInfo", FormatValue(currentValue), GetTextPosition(Location), currentValue >= 0 ? PositiveBrush : NegativeBrush, Font, Brushes.Transparent, Brushes.Transparent, 0); lastValue = currentValue; } return; } if (marketDataUpdate.MarketDataType != Data.MarketDataType.Last || (marketDataUpdate.Instrument.MarketData.LastClose == null && marketDataUpdate.Instrument.MarketData.Settlement == null)) { return; } bool tryAgainLater = false; double rate = 0; double settlementOrLast = marketDataUpdate.Instrument.MarketData.Settlement != null ? marketDataUpdate.Instrument.MarketData.Settlement.Price : marketDataUpdate.Instrument.MarketData.LastClose.Price; if (account != null) { rate = marketDataUpdate.Instrument.GetConversionRate(Data.MarketDataType.Bid, account.Denomination, out tryAgainLater); } switch (Unit) { case Cbi.PerformanceUnit.Percent: currentValue = (marketDataUpdate.Price - settlementOrLast) / settlementOrLast; break; case Cbi.PerformanceUnit.Pips: currentValue = ((marketDataUpdate.Price - settlementOrLast) / Instrument.MasterInstrument.TickSize) * (Instrument.MasterInstrument.InstrumentType == Cbi.InstrumentType.Forex ? 0.1 : 1); break; case Cbi.PerformanceUnit.Ticks: currentValue = (marketDataUpdate.Price - settlementOrLast) / Instrument.MasterInstrument.TickSize; break; case Cbi.PerformanceUnit.Currency: currentValue = (marketDataUpdate.Price - settlementOrLast) * Instrument.MasterInstrument.PointValue * rate * (Instrument.MasterInstrument.InstrumentType == Cbi.InstrumentType.Forex ? (account != null ? account.ForexLotSize : Cbi.Account.DefaultLotSize) : 1); break; case Cbi.PerformanceUnit.Points: currentValue = (marketDataUpdate.Price - settlementOrLast); break; } if (lastValue != currentValue) { Draw.TextFixed(this, "NinjaScriptInfo", FormatValue(currentValue), GetTextPosition(Location), currentValue >= 0 ? PositiveBrush : NegativeBrush, Font, Brushes.Transparent, Brushes.Transparent, 0); lastValue = currentValue; } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; } else if (marketDataUpdate.MarketDataType == Data.MarketDataType.Ask) { CurrentValue = marketDataUpdate.Price; } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; } else if (marketDataUpdate.MarketDataType == Data.MarketDataType.OpenInterest) { CurrentValue = marketDataUpdate.Volume; } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; } else if (marketDataUpdate.MarketDataType == Data.MarketDataType.Last) { CurrentValue = marketDataUpdate.Time.Subtract(reference).TotalSeconds; } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; } else if (marketDataUpdate.MarketDataType == Data.MarketDataType.Bid) { instrumentType = marketDataUpdate.Instrument.MasterInstrument.InstrumentType; CurrentValue = instrumentType == InstrumentType.CryptoCurrency ? Core.Globals.ToCryptocurrencyVolume(marketDataUpdate.Volume) : marketDataUpdate.Volume; } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; } else if ((marketDataUpdate.MarketDataType == Data.MarketDataType.Ask || marketDataUpdate.MarketDataType == Data.MarketDataType.Bid) && Instrument.MarketData.Ask != null && Instrument.MarketData.Bid != null) { CurrentValue = Instrument.MarketData.Ask.Price - Instrument.MarketData.Bid.Price; } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; return; } if (marketDataUpdate.MarketDataType != Data.MarketDataType.Last || marketDataUpdate.Instrument.MarketData.LastClose == null) { return; } CurrentValue = Math.Abs((marketDataUpdate.Instrument.MarketData.DailyLow.Price - marketDataUpdate.Instrument.MarketData.DailyHigh.Price)) * marketDataUpdate.Instrument.MasterInstrument.PointValue; }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.IsReset) { CurrentValue = double.MinValue; return; } else if (marketDataUpdate.MarketDataType != Data.MarketDataType.Last || marketDataUpdate.Instrument.MarketData.LastClose == null) { return; } lastClose = marketDataUpdate.Instrument.MarketData.LastClose.Price; CurrentValue = (marketDataUpdate.Price - marketDataUpdate.Instrument.MarketData.LastClose.Price) / marketDataUpdate.Instrument.MarketData.LastClose.Price; }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { if (marketDataUpdate.MarketDataType == MarketDataType.Bid) { lastBid = marketDataUpdate.Price; return; } else if (marketDataUpdate.MarketDataType == MarketDataType.Ask) { lastAsk = marketDataUpdate.Price; return; } else if (marketDataUpdate.MarketDataType != MarketDataType.Last) { return; } if (lastAsk == double.MinValue || lastBid == double.MinValue) { slots.Insert(0, TrendValue.Between); } else if (marketDataUpdate.Price.ApproxCompare(lastAsk) == 0) { slots.Insert(0, TrendValue.AtAsk); } else if (marketDataUpdate.Price.ApproxCompare(lastAsk) == 1) { slots.Insert(0, TrendValue.AboveAsk); } else if (marketDataUpdate.Price.ApproxCompare(lastBid) == 0) { slots.Insert(0, TrendValue.AtBid); } else if (marketDataUpdate.Price.ApproxCompare(lastBid) == -1) { slots.Insert(0, TrendValue.BelowBid); } else { slots.Insert(0, TrendValue.Between); } if (slots.Count > maxSlots) { slots.RemoveRange(maxSlots - 1, slots.Count - maxSlots); } }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { CurrentValue = realizedPL + (position == null ? 0 : position.GetUnrealizedProfitLoss(Cbi.PerformanceUnit.Currency)); }
protected override void OnMarketData(Data.MarketDataEventArgs marketUpdate) { if (marketUpdate.MarketDataType != Data.MarketDataType.Last) { return; } Data.MarketDataEventArgs mu = marketUpdate; // Access to modified closure if (justConnected) { if (SuperDom.Account == null) { return; } // Get the orders already open and assign APQ values to them lock (SuperDom.Account.Orders) foreach (Cbi.Order order in SuperDom.Account.Orders) { GetInitialOrderApq(order, order.OrderState, order.LimitPrice); } justConnected = false; return; } long currentApqValue; if (priceApqValues.TryGetValue(mu.Price, out currentApqValue)) { // If the current volume has dropped below the previous value, update APQ value lock (SuperDom.Rows) { PriceRow row = SuperDom.Rows.FirstOrDefault(r => r.Price == mu.Price); if (row != null) { if (row.BuyOrders.Count > 0) { long newVal = currentApqValue - mu.Volume; if (currentApqValue != 0 && newVal < currentApqValue) { priceApqValues.TryUpdate(mu.Price, // Key currentApqValue > 1 ? (newVal >= 1 ? newVal : 1) : currentApqValue, // New value currentApqValue); // Comparison value ConcurrentDictionary <Cbi.Order, long> ordersThisPrice; if (priceToOrderApqMap.TryGetValue(mu.Price, out ordersThisPrice)) { foreach (Cbi.Order key in ordersThisPrice.Keys) { if (newVal < ordersThisPrice[key]) { ordersThisPrice.TryUpdate(key, newVal, ordersThisPrice[key]); } } } } } else if (row.SellOrders.Count == 0) { long oldDepth; priceApqValues.TryRemove(mu.Price, out oldDepth); } } } } if (priceApqValues.TryGetValue(mu.Price, out currentApqValue)) { // If the current volume has dropped below the previous value, update APQ value lock (SuperDom.Rows) { PriceRow row = SuperDom.Rows.FirstOrDefault(r => r.Price == mu.Price); if (row != null) { if (row.SellOrders.Count > 0) { long newVal = currentApqValue - mu.Volume; if (currentApqValue != 0 && newVal < currentApqValue) { priceApqValues.TryUpdate(mu.Price, // Key currentApqValue > 1 ? (newVal >= 1 ? newVal : 1) : currentApqValue, // New value currentApqValue); // Comparison value ConcurrentDictionary <Cbi.Order, long> ordersThisPrice; if (priceToOrderApqMap.TryGetValue(mu.Price, out ordersThisPrice)) { foreach (Cbi.Order key in ordersThisPrice.Keys) { if (newVal < ordersThisPrice[key]) { ordersThisPrice.TryUpdate(key, newVal, ordersThisPrice[key]); } } } } } else if (row.BuyOrders.Count == 0) { long oldDepth; priceApqValues.TryRemove(mu.Price, out oldDepth); } } } } }