Ejemplo n.º 1
0
		private void CreateInstrument(SeriesSymbolDataRand seriesSymbolDataRand, int dataIndex) {
			if (seriesSymbolDataRand != null) {
				if (logger.IsInfoEnabled) {
					InstrumentDataRequest cDataRequest = seriesSymbolDataRand.Source.DataRequest;
					logger.InfoFormat("[DataLoader.CreateInstrument] {0}:{1}{2} Instrument create completed...", cDataRequest.Symbol, cDataRequest.Resolution.Size, cDataRequest.Resolution.Type);
				}

				bool bCompleted = false;
				seriesSymbolDataRand.SetMaxbarsReferance(__iMaxBarsReference);
				Instrument cInstrument = new Instrument(seriesSymbolDataRand);
				
				lock (__cInstruments) {
					__cInstruments[dataIndex] = cInstrument;

					++__iMaxInstrumentCount;
					bCompleted = __iMaxInstrumentCount == __cInstruments.Count;
				}

				if (onAddInstrument != null) {
					onAddInstrument(this, new InstrumentChangeEvent(cInstrument, dataIndex));
				}

				if (bCompleted) {  //如果讀取資料都已經完成, 發出事件通知已經完成
					if (onLoadCompleted != null) {
						onLoadCompleted(this, EventArgs.Empty);
					}
				}
			}
		}
Ejemplo n.º 2
0
		/// <summary>
		///   非同步讀取資料請求結構內的 Instrument 資料
		/// </summary>
		/// <param name="request">資料請求結構</param>
		/// <param name="result">當成功取得 Instrument 商品資料會使用此委派方法回傳資料</param>
		/// <param name="useCache">是否使用快取 [預設:false](true=序列資料結構建立後保存在快取內,下次需要使用直接從快取拿取, false=重新建立序列資料結構,建立的序列資料需要自行移除否則會占用記憶體空間)</param>
		/// <param name="args">使用者自訂參數</param>
		/// <param name="millisecondsTimeout">回補資料 Timeout 毫秒數 [預設:System.Threading.Timeout.Infinite (永遠等待直到回補完成)]</param>
		public void BeginLoadData(InstrumentDataRequest request, LoadDataCallback result, bool useCache = false, object args = null, int millisecondsTimeout = System.Threading.Timeout.Infinite) {
			SeriesManager.Manager.SetQuoteService(request.DataFeed);
			SeriesManager.Manager.AsyncGetSeries(request, (object sender, SeriesResultEvent e) => {
				SeriesSymbolDataRand cSeriesSymbolDataRand = e.Data;
				cSeriesSymbolDataRand.SetMaxbarsReferance(__iMaxBarsReference);
				Instrument cInstrument = new Instrument(cSeriesSymbolDataRand);  //建立 Instrument 商品資料
				
				Instrument cBars_0 = GetInstrument(0);  //取得目前第 0 個 Instrument 商品資料
				if (cBars_0 != null) {
					cInstrument.MoveBars(cBars_0.Time.Value);
				}

				result(new DataLoaderResult(cInstrument, cInstrument.Quotes, args));
			}, useCache, null, millisecondsTimeout);
		}