예제 #1
0
파일: MainWindow.cs 프로젝트: ssh352/ctp-1
        private void btnStart_Click(object sender, EventArgs e)
        {
            ChinaMarketValue.isStartMarket = true;
            if (ChinaMarketValue.threadMarket == null)
            {
                ChinaMarketValue.threadMarket = new Thread(UpdateMarkets);
                ChinaMarketValue.threadMarket.IsBackground = true;
                ChinaMarketValue.threadMarket.Start();
            }


            if (openSettins == null)
            {
                openSettins = new TDFOpenSetting()
                {
                    Ip             = System.Configuration.ConfigurationManager.AppSettings["IP"],                         //服务器Ip
                    Port           = System.Configuration.ConfigurationManager.AppSettings["Port"],                       //服务器端口
                    Username       = System.Configuration.ConfigurationManager.AppSettings["Username"],                   //服务器用户名
                    Password       = System.Configuration.ConfigurationManager.AppSettings["Password"],                   //服务器密码
                    Subscriptions  = System.Configuration.ConfigurationManager.AppSettings["SubScriptions"],              //订阅列表,以 ; 分割的代码列表,例如:if1406.cf;if1403.cf;如果置为空,则全市场订阅
                    Markets        = System.Configuration.ConfigurationManager.AppSettings["Markets"],                    //市场列表,以 ; 分割,例如: sh;sz;cf;shf;czc;dce
                    ReconnectCount = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ReconnectCount"]), //当连接断开时重连次数,断开重连在TDFDataSource.Connect成功之后才有效
                    ReconnectGap   = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ReconnectGap"]),   //重连间隔秒数
                    ConnectionID   = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ConnectionID"]),   //连接ID,标识某个Open调用,跟回调消息中TDFMSG结构nConnectionID字段相同
                    Date           = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["Date"]),           //请求的日期,格式YYMMDD,为0则请求今天
                    Time           = (uint)int.Parse(System.Configuration.ConfigurationManager.AppSettings["Time"]),      //请求的时间,格式HHMMSS,为0则请求实时行情,为(uint)-1从头请求
                    TypeFlags      = (uint)int.Parse(System.Configuration.ConfigurationManager.AppSettings["TypeFlags"])  //unchecked((uint)DataTypeFlag.DATA_TYPE_ALL);   //为0请求所有品种,或者取值为DataTypeFlag中多种类别,比如DATA_TYPE_MARKET | DATA_TYPE_TRANSACTION
                };
            }


            if (dataSource == null)
            {
                dataSource = new TDFSourceImp(openSettins);
                dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_OUT_LOG, 1);
                TDFERRNO nOpenRet = dataSource.Open();
                if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS)
                {
                    PrintHelper.PrintText("connect success!\n");
                }
                else
                {
                    //这里判断错误代码,进行对应的操作,对于 TDF_ERR_NETWORK_ERROR,用户可以选择重连
                    PrintHelper.PrintText(string.Format("open returned:{0}, program quit", nOpenRet));
                }
            }

            btnStart.Enabled = false;
            btnClose.Enabled = true;
        }
예제 #2
0
파일: Program.cs 프로젝트: LaoKpa/HFT-3
        static void Main(string[] args)
        {
            var openSettins = new TDFOpenSetting()
            {
                Ip             = System.Configuration.ConfigurationManager.AppSettings["IP"],                         //服务器Ip
                Port           = System.Configuration.ConfigurationManager.AppSettings["Port"],                       //服务器端口
                Username       = System.Configuration.ConfigurationManager.AppSettings["Username"],                   //服务器用户名
                Password       = System.Configuration.ConfigurationManager.AppSettings["Password"],                   //服务器密码
                Subscriptions  = System.Configuration.ConfigurationManager.AppSettings["SubScriptions"],              //订阅列表,以 ; 分割的代码列表,例如:if1406.cf;if1403.cf;如果置为空,则全市场订阅
                Markets        = System.Configuration.ConfigurationManager.AppSettings["Markets"],                    //市场列表,以 ; 分割,例如: sh;sz;cf;shf;czc;dce
                ReconnectCount = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ReconnectCount"]), //当连接断开时重连次数,断开重连在TDFDataSource.Connect成功之后才有效
                ReconnectGap   = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ReconnectGap"]),   //重连间隔秒数
                ConnectionID   = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ConnectionID"]),   //连接ID,标识某个Open调用,跟回调消息中TDFMSG结构nConnectionID字段相同
                Date           = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["Date"]),           //请求的日期,格式YYMMDD,为0则请求今天
                Time           = (uint)int.Parse(System.Configuration.ConfigurationManager.AppSettings["Time"]),      //请求的时间,格式HHMMSS,为0则请求实时行情,为(uint)-1从头请求
                TypeFlags      = (uint)int.Parse(System.Configuration.ConfigurationManager.AppSettings["TypeFlags"])  //unchecked((uint)DataTypeFlag.DATA_TYPE_ALL);   //为0请求所有品种,或者取值为DataTypeFlag中多种类别,比如DATA_TYPE_MARKET | DATA_TYPE_TRANSACTION
            };

            // 使用者请注意:
            //  1. 请保持TDFSourceImp的实例到进程销毁。TDFSourceImp是数据接收者
            //  2. 本Demo只是做最简单演示,在进程(main函数)结束的时候销毁TDFSourceImp实例
            using (var dataSource = new TDFSourceImp(openSettins))
            {
                #region 调用Open,登陆服务器。初始化过程到此结束,对数据的操作,请到TDFSourceImp的两个虚函数里进行
                TDFERRNO nOpenRet = dataSource.Open();
                if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS)
                {
                    Console.WriteLine("connect success!\n");
                }
                else
                {
                    //这里判断错误代码,进行对应的操作,对于 TDF_ERR_NETWORK_ERROR,用户可以选择重连
                    Console.WriteLine("open returned:{0}, program quit", nOpenRet);
                    Console.ReadLine();
                    return;
                }
                #endregion
                #region 以下代码是演示订阅功能
                //主线程阻塞在这里,等待回调消息通知(其他消息)
                String strHelp = @"键入q退出
    以下命令,请用逗号分隔
    a 添加订阅
    d 删除订阅
    f 清除订阅
    s 设置订阅
    hs 显示完全数据
    hh 显示股票名称";
                Console.WriteLine(strHelp);
                var input = Console.ReadLine();

                while (input != "q")
                {
                    var inArgs = input.Split(',');
                    if (inArgs.Length > 1)
                    {
                        ToString convert = (String[] ary) =>
                        {
                            System.Text.StringBuilder sb = new StringBuilder();
                            for (int i = 1; i < ary.Length; ++i)
                            {
                                sb.AppendFormat("{0};", ary[i]);
                            }

                            return(sb.ToString());
                        };

                        switch (inArgs[0])
                        {
                        case "a":
                            dataSource.SetSubscription(convert(inArgs), SubscriptionType.SUBSCRIPTION_ADD);
                            break;

                        case "d":
                            dataSource.SetSubscription(convert(inArgs), SubscriptionType.SUBSCRIPTION_DEL);
                            break;

                        case "s":
                            dataSource.SetSubscription(convert(inArgs), SubscriptionType.SUBSCRIPTION_SET);
                            break;

                        case "f":
                            dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_FULL);
                            break;

                        case "hs":
                            dataSource.ShowAllData = true;
                            break;

                        case "hh":
                            dataSource.ShowAllData = false;
                            break;
                        }
                    }
                    else if (inArgs.Length == 1)
                    {
                        switch (inArgs[0])
                        {
                        case "f":
                            dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_FULL);
                            break;

                        case "hs":
                            dataSource.ShowAllData = true;
                            break;

                        case "hh":
                            dataSource.ShowAllData = false;
                            break;
                        }
                    }

                    Console.WriteLine(strHelp);
                    input = Console.ReadLine();
                }
                #endregion      //演示订阅功能
            }
        }
예제 #3
0
파일: DataClass.cs 프로젝트: LaoKpa/HFT-3
 public void LoadFromTDF()
 {
     nOpenRet = this.Open();
     //nOpenRet = TDFERRNO.TDF_ERR_UNKOWN;
     //WriteLog(this, null);
 }
예제 #4
0
        private bool InitDataSource()
        {
            var setting = GetSetting();

            _dataSource             = new TDFImp(setting);
            _dataSource.SysMsgDeal  = OnRecvSysMsg;
            _dataSource.DataMsgDeal = OnRecvDataMsg;

            _dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_OUT_LOG, 1);

            //TODO:订阅多支股票和股指期货
            //增加订阅列表中的股票
            //dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_ADD);
            //删除订阅列表中的订阅
            //dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_DEL);
            //设置为订阅列表中的股票
            //dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_SET);

            TDFERRNO openRet = _dataSource.Open();

            if (openRet != TDFERRNO.TDF_ERR_SUCCESS)
            {
                var msg = string.Format("宏汇行情初始化失败:{0}", openRet.ToString());
                logger.Error(msg);

                if (_connectCallback != null)
                {
                    _connectCallback(ServiceType.TDFQuote, (int)openRet, msg);
                }

                if (_notify != null)
                {
                    NotifyArgs args = new NotifyArgs
                    {
                        ServiceType = ServiceInterface.ServiceType.TDFQuote,
                        Code        = (int)openRet,
                        Message     = msg,
                    };

                    _notify(args);
                }

                Close();

                return(false);
            }
            else
            {
                var msg = "宏汇行情初始化成功!";
                logger.Info(msg);

                if (_connectCallback != null)
                {
                    _connectCallback(ServiceType.TDFQuote, (int)openRet, msg);
                }
                //_waitHandle.WaitOne();

                //Close();

                return(true);
            }
        }
예제 #5
0
        //delegate String ToString(String[] args);
        /// <summary>
        /// 行情订阅主线程
        /// </summary>
        static void MainThread()
        {
            TDFServerInfo[] theServers = new TDFServerInfo[4];
            uint            iServerNum = 1;

            theServers[0] = new TDFServerInfo()
            {
                //Ip = CHangQingPARA.IP,
                //Port = CHangQingPARA.PORT,
                //Username = CHangQingPARA.USERNAME,
                //Password = CHangQingPARA.PASSWORD

                //Ip = "114.80.154.34",
                //Port = "6231",                              //服务器端口
                //Username = "******",                        //服务器用户名
                //Password = "******"

                Ip       = ip,
                Port     = port,
                Username = userName,
                Password = password
            };

            /******即使不用,也要初始化******/
            theServers[1] = new TDFServerInfo();
            theServers[2] = new TDFServerInfo();
            theServers[3] = new TDFServerInfo();


            //初始化行情模拟系统
            simulate_trade.InitSimTable(simulate_trade.SimMarketCode);

            /************订阅的类型需要再确认***********/
            var openSetting_ext = new TDFOpenSetting_EXT()
            {
                Servers       = theServers,
                ServerNum     = iServerNum,
                Markets       = "",
                Subscriptions = subscribeList.Replace('\n', ';'),
                ConnectionID  = 1,
                Time          = 0,
                TypeFlags     = 0
            };

            using (var dataSource = new TDFSourceImp(openSetting_ext))
            {
                dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_HEART_BEAT_INTERVAL, 0); //环境设置
                dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_MISSED_BEART_COUNT, 0);  //环境设置
                dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_OPEN_TIME_OUT, 0);       //环境设置

                TDFERRNO nOpenRet = dataSource.Open();

                if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS)
                {
                    //连接成功
                    Queue_Data.Connected = true;
                }
                else
                {
                    Queue_Data.Connected = false;

                    MessageBox.Show(nOpenRet.ToString());
                    //连接失败,告警顶级日志
                    //GlobalErrorLog.LogInstance.LogEvent(String.Format("open returned:{0}, program quit", nOpenRet));
                }



                while (true)
                {
                    if (webservice.STOP)
                    {
                        break;
                    }
                    Thread.Sleep(1000);

                    //每隔10s发送一次停盘信息
                    if ((DateTime.Now - RunningTime.CurrentTime).TotalSeconds > 10)
                    {
                        foreach (TDFMarketData data in stop_plate_stocks.GetInstance().GetStopList())
                        {
                            EnQueueType obj = new EnQueueType()
                            {
                                Type = "S", value = (object)data
                            };



                            if (simulate_trade.MarketRecorder)
                            {
                                MarketInfoQueue.EnQueueNew(data);
                            }
                            else
                            {
                                Queue_Data.GetQueue().Enqueue((object)obj);
                            }
                        }
                        RunningTime.CurrentTime = DateTime.Now;
                    }



                    if ((simulate_trade.SimSwitch) && (Queue_Data.Suspend == false))
                    {
                        for (int i = 0; i < simulate_trade.SimMarketPerSecond; i++)
                        {
                            TDFMarketData objs = simulate_trade.GetSimMarketDate();
                            new EnQueueType()
                            {
                                Type = "S", value = (object)objs
                            };
                            if (Queue_Data.Suspend == false)
                            {
                                Queue_Data.GetQueue().Enqueue((object)(new EnQueueType()
                                {
                                    Type = "S", value = (object)objs
                                }));
                            }

                            TDFFutureData objf = simulate_trade.GetSimFutureData();
                            Queue_Data.GetQueue().Enqueue((object)(new EnQueueType()
                            {
                                Type = "F", value = (object)objf
                            }));
                        }
                    }
                    continue;
                }
            }
        }
예제 #6
0
        public int Start()
        {
            if (_isRunning == true)
            {
                App.Logger.Info("TDF数据服务:已启动!");
                return(1);
            }

            try
            {
                TDFServerInfo[] theServers = new TDFServerInfo[4];

                theServers[0] = new TDFServerInfo()
                {
                    Ip       = _config.Ip,                              //服务器Ip
                    Port     = _config.Port.ToString(),                 //服务器端口
                    Username = _config.Username,                        //服务器用户名
                    Password = _config.Password,                        //服务器密码
                };
                //theServers[0].Username = "******";
                //theServers[0].Password = "******";
                //Setting.IsHistory = true;
                theServers[1] = new TDFServerInfo();
                if (_config.Ip == "114.80.154.34")
                {
                    bool isSpec = false;
                    if (_config.Port == 6221)
                    {
                        isSpec             = true;
                        theServers[1].Port = "6231";
                    }
                    else if (_config.Port == 6231)
                    {
                        isSpec             = true;
                        theServers[1].Port = "6221";
                    }
                    if (isSpec)
                    {
                        theServers[1].Ip       = _config.Ip;
                        theServers[1].Username = _config.Username;
                        theServers[1].Password = _config.Password;
                    }
                }

                theServers[2] = new TDFServerInfo();
                theServers[3] = new TDFServerInfo();

                TDFOpenSetting_EXT openSetting = new TDFOpenSetting_EXT()
                {
                    Servers       = theServers,
                    ServerNum     = 1,
                    Subscriptions = "600000.sh;000001.sz",                                                                                                    //订阅列表,以 ; 分割的代码列表,例如:if1406.cf;if1403.cf;如果置为空,则全市场订阅
                    Markets       = "sh-2;sz-2;",                                                                                                             //市场列表,以 ; 分割,例如: sh;sz;cf;shf;czc;dce
                    ConnectionID  = 1,                                                                                                                        //连接ID,标识某个Open调用,跟回调消息中TDFMSG结构nConnectionID字段相同
                    Time          = Setting.IsHistory ? -1 : 0,                                                                                               //请求的时间,格式HHMMSS,为0则请求实时行情,为(uint)-1从头请求
                    TypeFlags     = unchecked ((uint)(DataTypeFlag.DATA_TYPE_ORDER | DataTypeFlag.DATA_TYPE_TRANSACTION | DataTypeFlag.DATA_TYPE_ORDERQUEUE)) //为0请求所有品种,或者取值为DataTypeFlag中多种类别,比如DATA_TYPE_MARKET | DATA_TYPE_TRANSACTION
                };

                if (IsAllCodes)
                {
                    openSetting.Subscriptions = string.Empty;
                    openSetting.Markets       = "SH-2;SZ-2";
                }
                _source = new TDFSourceImp(openSetting);

                _source.NewSysEvent += _source_NewSysEvent;
                TDFERRNO nOpenRet = _source.Open();
                if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS)
                {
                    App.Logger.Info("TDF数据服务:登陆成功!");
                    _isRunning = true;
                    if (_subCodes.Count > 0)
                    {
                        //重新注册
                        StringBuilder s = new StringBuilder();
                        foreach (string wind in _subCodes)
                        {
                            s.Append(wind);
                            s.Append(";");
                        }
                        string substring = s.ToString().TrimEnd(new char[] { ';' });
                        _source.SetSubscription(substring, SubscriptionType.SUBSCRIPTION_ADD);
                    }
                }
                else
                {
                    App.Logger.Error(string.Format("TDF数据服务:连接失败,错误代码{0}", nOpenRet));
                    return(2);
                }
            }
            catch (Exception ex)
            {
                App.Logger.Error(ex);
                App.Logger.Error("TDF数据服务:初始化错误!" + ex.Message);
                return(100);
            }

            return(0);
        }