Example #1
0
        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;
            }
        }
Example #2
0
        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;
            }
        }
Example #3
0
 protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate)
 {
     if (marketDataUpdate.IsReset)
     {
         CurrentValue    = double.MinValue;
         sessionIterator = null;
         return;
     }
 }
Example #4
0
        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;
            }
        }
Example #5
0
 protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate)
 {
     if (marketDataUpdate.IsReset)
     {
         CurrentValue = double.MinValue;
     }
     else if (marketDataUpdate.MarketDataType == Data.MarketDataType.Ask)
     {
         CurrentValue = marketDataUpdate.Price;
     }
 }
Example #6
0
 protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate)
 {
     if (marketDataUpdate.IsReset)
     {
         CurrentValue = double.MinValue;
     }
     else if (marketDataUpdate.MarketDataType == Data.MarketDataType.OpenInterest)
     {
         CurrentValue = marketDataUpdate.Volume;
     }
 }
Example #7
0
 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;
     }
 }
Example #8
0
 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;
     }
 }
Example #9
0
 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;
     }
 }
Example #10
0
        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;
        }
Example #11
0
        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;
        }
Example #12
0
        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);
            }
        }
Example #13
0
 protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate)
 {
     CurrentValue = realizedPL + (position == null ? 0 : position.GetUnrealizedProfitLoss(Cbi.PerformanceUnit.Currency));
 }
Example #14
0
        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);
                        }
                    }
                }
            }
        }