Пример #1
0
        private SpreadInfo ProcessHQ(CustomMarketData m1, CustomMarketData m2)
        {
            SpreadInfo hqInfo = new SpreadInfo();

            hqInfo.Time         = m1.Time;
            hqInfo.LastIF1Price = (lastHQInfo == null) ? 0 : lastHQInfo.IF1Price;
            hqInfo.LastIF2Price = (lastHQInfo == null) ? 0 : lastHQInfo.IF2Price;
            hqInfo.IF1Price     = (m1 == null) ? double.NaN : m1.NewPrice;
            hqInfo.IF2Price     = (m2 == null) ? double.NaN : m2.NewPrice;

            if (m1 == null || m2 == null || m1.Buy.Length <= 0 || m1.Sell.Length <= 0 || m2.Buy.Length <= 0 || m2.Sell.Length <= 0)
            {
                hqInfo.IF1OpenPrice  = hqInfo.IF1ClosePrice = hqInfo.IF2OpenPrice = hqInfo.IF2ClosePrice = double.NaN;
                hqInfo.CurrentSpread = hqInfo.CloseSpread = hqInfo.OpenSpread = double.NaN;

                UpdateLogInfo(string.Format("当前行情异常:无法获得{0}的买卖盘口", (m1 == null || m1.Buy.Length <= 0 || m1.Sell.Length <= 0) ? param.InIF1 : param.InIF2));
            }
            else
            {
                hqInfo.IF1OpenPrice  = m1.Sell[0];
                hqInfo.IF1ClosePrice = m1.Buy[0];
                hqInfo.IF2OpenPrice  = m2.Buy[0];
                hqInfo.IF2ClosePrice = m2.Sell[0];
                hqInfo.MaxOpenVol    = (int)Math.Min(m1.SellVol[0], m2.BuyVol[0]);
                hqInfo.MaxCloseVol   = (int)Math.Min(m1.BuyVol[0], m2.SellVol[0]);

                hqInfo.LastSpread    = (lastHQInfo == null) ? 0 : lastHQInfo.CurrentSpread;
                hqInfo.CurrentSpread = m1.NewPrice - m2.NewPrice;                           // 实时最新价差
                hqInfo.OpenSpread    = hqInfo.IF1OpenPrice - hqInfo.IF2OpenPrice;           // 实时开仓价差
                hqInfo.CloseSpread   = hqInfo.IF1ClosePrice - hqInfo.IF2ClosePrice;         // 实时平仓价差
            }

            lastHQInfo = hqInfo;
            return(hqInfo);
        }
Пример #2
0
        private void OnMarketDataInternal(CustomMarketData m)
        {
            spreadTrader.OnMarketData(m);

            // 更新本地行情缓存
            if (m != null && m.StockCode == cB_IF1.Text)
            {
                latestM1 = m;
            }
            else if (m != null && m.StockCode == cB_IF2.Text)
            {
                latestM2 = m;
            }
            else
            {
                return;
            }

            // 当前行情时间戳是否一致,一致时才进行开仓平仓判断
            if (latestM1 != null && latestM2 != null &&
                latestM1.StockCode == cB_IF1.Text && latestM2.StockCode == cB_IF2.Text &&
                latestM1.Time == latestM2.Time && latestM1.MilliSec == latestM2.MilliSec)
            {
                // 处理行情,计算价差
                var spInfo = ProcessHQ(latestM1, latestM2);

                spreadTrader.OnSpreadData(spInfo);

                UpdateHQ(spInfo);
            }
        }
Пример #3
0
 private void UpdateMarketData(CustomMarketData marketData)
 {
     lock (mdLocker)
     {
         foreach (var f in formList)
         {
             // 推送行情
             if (!f.IsDisposed)
             {
                 f.OnMarketData(marketData);
             }
         }
     }
 }
Пример #4
0
        public void OnMarketData(CustomMarketData m)
        {
            if (inParam == null || m == null)
            {
                return;
            }

            // 更新本地行情缓存
            if (m.StockCode == inParam.InIF1)
            {
                latestM1 = m;
            }
            else if (m.StockCode == inParam.InIF2)
            {
                latestM2 = m;
            }
        }
Пример #5
0
        /*
         * --------------------------------------------------------------
         * 行情通知
         * --------------------------------------------------------------
         */
        private void OnRtnDepthMarketData(ThostFtdcDepthMarketDataField pDepthMarketData)
        {
            if (HandleRawMarketDataDel != null)
            {
                HandleRawMarketDataDel(pDepthMarketData);
            }

            if (HandleMarketDataDel != null)
            {
                CustomMarketData m = new CustomMarketData();
                m.StockCode = pDepthMarketData.InstrumentID;
                m.Exchange  = PublicDefine.EXCHANGE_SYMBOL_EN[6];
                m.Time      = int.Parse(pDepthMarketData.UpdateTime.Replace(":", ""));
                m.MilliSec  = pDepthMarketData.UpdateMillisec;
                m.NewPrice  = pDepthMarketData.LastPrice;
                m.Buy       = new double[] { pDepthMarketData.BidPrice1, pDepthMarketData.BidPrice2, pDepthMarketData.BidPrice3, pDepthMarketData.BidPrice4, pDepthMarketData.BidPrice5 };
                m.BuyVol    = new int[] { pDepthMarketData.BidVolume1, pDepthMarketData.BidVolume2, pDepthMarketData.BidVolume3, pDepthMarketData.BidVolume4, pDepthMarketData.BidVolume5 };
                m.Sell      = new double[] { pDepthMarketData.AskPrice1, pDepthMarketData.AskPrice2, pDepthMarketData.AskPrice3, pDepthMarketData.AskPrice4, pDepthMarketData.AskPrice5 };
                m.SellVol   = new int[] { pDepthMarketData.AskVolume1, pDepthMarketData.AskVolume2, pDepthMarketData.AskVolume3, pDepthMarketData.AskVolume4, pDepthMarketData.AskVolume5 };

                HandleMarketDataDel(m);
            }
        }
Пример #6
0
 public void UpdateMarketData(CustomMarketData marketData)
 {
     Instruments[marketData.StockCode].MarketData = marketData;
 }
Пример #7
0
        public void OnMarketData(CustomMarketData m)
        {
            var del = new HandleMarketDataDelegate(OnMarketDataInternal);

            this.BeginInvoke(del, new object[] { m });
        }