public static unsafe int GetQuotesEx(string ticker, Periodicity periodicity, int lastValid, int size, Quotation *quotes, GQEContext *context) { try { Debug.WriteLine( $"GetQuotesEx(ticker: {ticker}, periodicity: {periodicity}, lastValid: {lastValid}, size: {size} ..." ); Quotation[] newQuotes = { }; try { newQuotes = DataSource.GetQuotes(ticker, periodicity, size); } catch (Exception) { if (DataSource.Mode == Mode.Online) { Status = StatusCode.Offline; DataSource.Mode = Mode.Offline; newQuotes = DataSource.GetQuotes(ticker, periodicity, size); } else { throw; } } // return 'lastValid + 1' if no updates are found and you want to keep all existing records if (!newQuotes.Any()) { return(lastValid + 1); } for (var i = 0; i < newQuotes.Length; i++) { Copy(quotes, newQuotes, i); } return(newQuotes.Length); } catch (Exception e) { MessageBox.Show(e.Message + Environment.NewLine + e); Debug.WriteLine(e.Message + Environment.NewLine + e); } return(-1); }
public static unsafe int GetQuotesEx(string ticker, Periodicity periodicity, int lastValid, int size, Quotation *quotes, GQEContext *context) { Debug.WriteLine("GetQuotesEx(ticker: " + ticker + ", periodicity: " + periodicity + ", lastValid: " + lastValid + ", size: " + size + ", ...)"); var existingQuotes = new Quotation[0]; if (lastValid > 2) { Array.Resize <Quotation>(ref existingQuotes, lastValid + 1); for (var i = 0; i <= lastValid; i++) { existingQuotes[i] = new Quotation { DateTime = quotes[i].DateTime, Open = quotes[i].Open, High = quotes[i].High, Low = quotes[i].Low, Price = quotes[i].Price, Volume = quotes[i].Volume, OpenInterest = quotes[i].OpenInterest, AuxData1 = quotes[i].AuxData1, AuxData2 = quotes[i].AuxData2 }; } Array.Sort <Quotation>(existingQuotes, new Comparison <Quotation>((q1, q2) => q1.DateTime.CompareTo(q2.DateTime))); } var newQuotes = DataSource.GetQuotes(ticker, periodicity, size, existingQuotes); if (newQuotes.Any()) { lastValid = 0; for (var i = 0; i < newQuotes.Length; i++) { quotes[i].DateTime = newQuotes[i].DateTime; quotes[i].Price = newQuotes[i].Price; quotes[i].Open = newQuotes[i].Open; quotes[i].High = newQuotes[i].High; quotes[i].Low = newQuotes[i].Low; quotes[i].Volume = newQuotes[i].Volume; quotes[i].OpenInterest = newQuotes[i].OpenInterest; quotes[i].AuxData1 = newQuotes[i].AuxData1; quotes[i].AuxData2 = newQuotes[i].AuxData2; lastValid++; } return(lastValid); } // return 'lastValid + 1' if no updates are found and you want to keep all existing records return(lastValid + 1); }