Ejemplo n.º 1
0
        string UserID = "80003"; // 投资者代码

        #endregion Fields

        #region Methods

        public void Run()
        {
            api = new KSFTMDAdapter();
            api.OnFrontConnected += new FrontConnected(OnFrontConnected);
            api.OnFrontDisconnected += new FrontDisconnected(OnFrontDisconnected);
            api.OnHeartBeatWarning += new HeartBeatWarning(OnHeartBeatWarning);
            api.OnRspError += new RspError(OnRspError);
            api.OnRspSubMarketData += new RspSubMarketData(OnRspSubMarketData);
            api.OnRspUnSubMarketData += new RspUnSubMarketData(OnRspUnSubMarketData);
            api.OnRspUserLogin += new RspUserLogin(OnRspUserLogin);
            api.OnRspUserLogout += new RspUserLogout(OnRspUserLogout);
            api.OnRtnDepthMarketData += new RtnDepthMarketData(OnRtnDepthMarketData);

            try
            {
                api.RegisterFront(FRONT_ADDR);
                api.Init();
                api.Join(); // 阻塞直到关闭或者CTRL+C
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                api.Release();
            }
        }
Ejemplo n.º 2
0
        public void Run()
        {
            api = new KSFTMDAdapter();
            api.OnFrontConnected     += new FrontConnected(OnFrontConnected);
            api.OnFrontDisconnected  += new FrontDisconnected(OnFrontDisconnected);
            api.OnHeartBeatWarning   += new HeartBeatWarning(OnHeartBeatWarning);
            api.OnRspError           += new RspError(OnRspError);
            api.OnRspSubMarketData   += new RspSubMarketData(OnRspSubMarketData);
            api.OnRspUnSubMarketData += new RspUnSubMarketData(OnRspUnSubMarketData);
            api.OnRspUserLogin       += new RspUserLogin(OnRspUserLogin);
            api.OnRspUserLogout      += new RspUserLogout(OnRspUserLogout);
            api.OnRtnDepthMarketData += new RtnDepthMarketData(OnRtnDepthMarketData);

            try
            {
                api.RegisterFront(FRONT_ADDR);
                api.Init();
                api.Join(); // 阻塞直到关闭或者CTRL+C
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                api.Release();
            }
        }
Ejemplo n.º 3
0
        private IDictionary <int, ICollection <ThostFtdcInvestorPositionField> > _positions = new Dictionary <int, ICollection <ThostFtdcInvestorPositionField> >();  // 键是reqeust id

        public void Initialize()
        {
            var configPath = Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.Location), "Kingstar.yaml");

            if (!File.Exists(configPath))
            {
                throw new Exception(string.Format("{0}初始化失败,配置文件{1}不存在", this.GetType().FullName, configPath));
            }

            using (var reader = new StreamReader(configPath))
            {
                var deserializer = new Deserializer(namingConvention: new UnderscoredNamingConvention());
                this._config = deserializer.Deserialize <Config>(reader);
            }

            // ================================================================================
            // 交易初始化
            // ================================================================================
            this._trade = new KSFTTraderAdapter(Path.GetDirectoryName(this.GetType().Assembly.Location));
            this._trade.OnFrontConnected       += _trade_OnFrontConnected;
            this._trade.OnRspUserLogin         += _trade_OnRspUserLogin;
            this._trade.OnRspQryInstrument     += _trade_OnRspQryInstrument;
            this._trade.OnRspError             += OnRspError;
            this._trade.OnRspQryTradingAccount += _trade_OnRspQryTradingAccount;
            this._trade.OnRspQryOrder          += _trade_OnRspQryOrder;
            this._trade.OnRspOrderInsert       += (order, rsp, _3, _4) =>
            {
                if (rsp.ErrorID != 0)
                {
                    this.OnLog($"ERROR: OnRspOrderInsert: {nameof(rsp.ErrorID) + rsp.ErrorID}, {nameof(rsp.ErrorMsg) + rsp.ErrorMsg}");
                }
            };
            this._trade.OnRtnOrder += _trade_OnRtnOrder;
            this._trade.OnRtnTrade += _ =>
            {
                this.QueryPositions();
                this.OnTrade(new Trade {
                    InstrumentID = _.InstrumentID, Price = _.Price, Qty = _.Volume
                });
            };
            this._trade.OnRspQryInvestorPosition += (positionField, rspField, requestId, isLast) =>
            {
                if (positionField != null)
                {
                    this._positions[requestId].Add(positionField);
                }
                if (isLast)
                {
                    if (rspField.ErrorID != 0)
                    {
                        throw new Exception($"查询持仓失败,代码:{rspField.ErrorID},描述:{rspField.ErrorMsg}");
                    }

                    this.Account.Positions = this._positions[requestId].Select(_ => _.ToOptionPosition()).ToList();
                    this._positions.Remove(requestId);
                }
            };

            foreach (var f in this._config.TradingFrontends)
            {
                this._trade.RegisterFront(f);
            }
            this._trade.SubscribePrivateTopic(EnumTeResumeType.THOST_TERT_QUICK);
            this._trade.Init();

            this.OnLog("等待交易登录响应。。。");
            this._asyncWaiter.WaitOne();

            // ================================================================================
            // 行情初始化
            // ================================================================================
            this._market                       = new KSFTMDAdapter();
            this._market.OnRspError           += OnRspError;
            this._market.OnFrontConnected     += _market_OnFrontConnected;
            this._market.OnRspUserLogin       += _market_OnRspUserLogin;
            this._market.OnRtnDepthMarketData += _market_OnRtnDepthMarketData;
            foreach (var f in this._config.MarketFrontends)
            {
                this._market.RegisterFront(f);
            }
            this._market.Init();

            this.OnLog("等待行情登录响应。。。");
            this._asyncWaiter.WaitOne();

            this.OnLog("查询合约并订阅行情。。。");
            var ret = this._trade.ReqQryInstrument(new ThostFtdcQryInstrumentField {
                ExchangeID = "SSE"
            }, this._session.NextRequestID());

            this._asyncWaiter.WaitOne();
        }