private static Task LoadOrderTrade(XProvider provider, CancellationTokenSource cts)
        {
            return new Task(state => {
                var ct = ((CancellationTokenSource)state).Token;
                var spi = new XSpi();
                {
                    var client = provider.CreateTrader(spi);
                    var complete = new AutoResetEvent(false);
                    var orders = new List<OrderField>();
                    var trades = new List<TradeField>();

                    spi.ErrorHappened += (s, error) => {
                        Console.WriteLine(error.Text);
                        complete.Set();
                    };
                    spi.StatusChanged += (s, status, field) => {
                        Console.WriteLine(status);
                        if (field != null && status == ConnectionStatus.Logined) {
                            Console.WriteLine(field.RawErrorID != 0 ? field.RawErrorMsg() : field.DebugInfo());
                        }

                        if (status == ConnectionStatus.Done) {
                            client.TradingDay = field.TradingDay();
                            client.QueryOrders();
                        }
                    };
                    spi.OrderReceived += (s, order, isLast) => {
                        if (order != null) {
                            orders.Add(order);
                        }
                        if (isLast) {
                            client.QueryTrades();
                        }
                    };
                    spi.TradeReceived += (s, trade, isLast) => {
                        if (trade != null) {
                            trades.Add(trade);
                        }
                        if (isLast) {
                            complete.Set();
                        }
                    };

                    client.Connect();
                    while (!ct.IsCancellationRequested) {
                        if (complete.WaitOne(0)) {
                            break;
                        }
                        Skyline.Utility.Sleep(100, ct);
                    }
                    client.Disconnect();
                    var global = provider.Framework.StrategyManager;
                    orders.Sort((x, y) => x.UpdateTime().CompareTo(y.UpdateTime()));
                    trades.Sort((x, y) => x.UpdateTime().CompareTo(y.UpdateTime()));
                    global.SetExOrders(orders, provider.Id);
                    global.SetExTrades(trades, provider.Id);
                    global.SetExTradingDay(client.TradingDay);
                }
            }, cts, cts.Token, TaskCreationOptions.LongRunning);
        }
Exemple #2
0
 protected XApiClient(XProvider provider, ConnectionInfo info, IXSpi spi = null)
 {
     Info     = info;
     Provider = provider;
     User     = provider.GetUserInfo(info.User);
     Server   = provider.GetServerInfo(info.Server, info.UseType);
     Logger   = LogManager.GetLogger($"{provider.Name}.{info.LogPrefix}.{User.UserID}");
     Api      = provider.CreateXApi(info);
     if (spi != null)
     {
         Api.RegisterSpi(spi);
     }
     Api.ErrorHappened           += OnErrorHappened;
     Api.StatusChanged           += OnStatusChanged;
     Api.InvestorReceived        += OnInvestorReceived;
     Api.AccountReceived         += OnRspQryAccount;
     Api.PositionReceived        += OnRspQryPositions;
     Api.OrderReturn             += OnRtnOrder;
     Api.TradeReturn             += OnRtnTrade;
     Api.InstrumentReceived      += OnInstrumentReceived;
     Api.MarketDataReceived      += OnMarketDataReceived;
     Api.OrderReceived           += OnOrderReceived;
     Api.TradeReceived           += OnTradeReceived;
     Api.InstrumentStatusChanged += OnInstrumentStatusChanged;
 }
        private void ProviderEventHappened(XProvider s, XProviderEventType type)
        {
            switch (type)
            {
            case XProviderEventType.TraderCreated:
                LoadPositions();
                break;

            case XProviderEventType.ConnectDone:
                break;

            case XProviderEventType.DisconnectDone:
                break;

            case XProviderEventType.AutoDisconnect:
                break;

            default:
                _logger.Debug($"{AgentId}, status={type}");
                TradingStatus = type;
                var reminder = new Reminder(OnMarketStatusEvent, DateTime.Now, type);
                reminder.SetClock(_eventClock);
                _eventQueue.Enqueue(reminder);
                break;
            }
        }
Exemple #4
0
 public EventDebugEmitter(XProvider provider)
 {
     _provider  = provider;
     _dataPipe  = new EventPipe(provider.framework);
     _dataQueue = new EventQueue(1, 0, 2, 25000, provider.framework.EventBus);
     _dataPipe.Add(_dataQueue);
     _executionPipe  = new EventPipe(provider.framework);
     _executionQueue = new EventQueue(2, 0, 2, 25000, provider.framework.EventBus);
     _executionPipe.Add(_executionQueue);
     _accountQueue = new EventQueue(2, 0, 2, 100, provider.framework.EventBus);
     _executionPipe.Add(_accountQueue);
 }
Exemple #5
0
        private void ProviderEventHappened(XProvider s, XProviderEventType type)
        {
            switch (type)
            {
            case XProviderEventType.ConnectDone:
                InitProcessor();
                break;

            case XProviderEventType.DisconnectDone:
                break;

            case XProviderEventType.AutoDisconnect:
                break;

            case XProviderEventType.TraderCreated:
                break;

            default:
                AddProviderEventReminder(type);
                break;
            }
        }
Exemple #6
0
 public ConnectManager(XProvider provider)
 {
     _provider = provider;
     _block    = new ActionBlock <Event>((Action <Event>)Process);
 }
Exemple #7
0
 public DealProcessor(XProvider provider)
 {
     _provider = provider;
     InitHandler();
 }
Exemple #8
0
 public Convertor(XProvider provider)
 {
     _provider = provider;
     Init();
 }
 public TraderClient(XProvider provider, ConnectionInfo info, IXSpi spi = null)
     : base(provider, info, spi)
 {
 }
 public TimedTask(XProvider provider)
 {
     _provider       = provider;
     _timer          = new Timer(1000);
     _timer.Elapsed += TimerOnElapsed;
 }
 public SubscribeManager(XProvider provider)
 {
     _provider = provider;
     _action   = new ActionBlock <Event>(SubscribeAction, DataflowHelper.SpscBlockOptions);
 }
Exemple #12
0
 public EventEmitter(XProvider provider)
 {
     _provider = provider;
 }
 public ConnectManager(XProvider provider)
 {
     _provider = provider;
     _block    = new ActionBlock <Event>(Process, DataflowHelper.SpscBlockOptions);
 }
Exemple #14
0
 public MarketDataClient(XProvider provider, ConnectionInfo info)
     : base(provider, info)
 {
 }
 public SubscribeManager(XProvider provider)
 {
     _provider = provider;
     _action   = new ActionBlock <Event>((Action <Event>)SubscribeAction);
 }
Exemple #16
0
 public TraderClient(XProvider provider, ConnectionInfo info)
     : base(provider, info)
 {
 }