Пример #1
0
        public void ProcessMessage(MarketEvent Data)
        {
            var path = Path.Combine(Path.GetTempPath(), $"{Data.Key()}_{DateTime.Today:yyyyMMdd}.csv"); //start new file at midnight

            using var writer = new StreamWriter(path, true);
            writer.WriteLine(Data.TextSerialize(new FileInfo(path).Length == 0));
        }
Пример #2
0
 TypePopUpWindow waitToShowWindow = TypePopUpWindow.NONE; // █ окно которое ожидается для отображения (возможно ожидается ответ от сервера)
 public static void requestContent(TypePopUpWindow type)  // █ запросить контент для окна (обычно приходит контент сразу для всех окон) контент сохраняется, потому окна при созданиях перед отправлением этого запроса туда заглядывают().
 {
     lastTimeRequest = Time.time;
     MarketEvent.requestMarketItems();
     //Debug.Log("█ запрос на получение данных, и ожидается открытие окна:" + type);
     getWinController.waitToShowWindow = type;
 }
Пример #3
0
        static bool CreateAndOpenMarket15()
        {
            //创建 IMarket
            // char* path 指 xxx.exe 同级子目录中的 xxx.dll 文件
            int err = -1;

            market = ITradeApi.XFinApi_CreateMarketApi("XTA_W32/Api/CTP_v6.3.15_20190220/XFinApi.CTPTradeApiSE.dll", out err);

            if (err > 0 || market == null)
            {
                Console.WriteLine(string.Format("* Market XFinApiCreateError={0};", StrCreateErrors[err]));
                return(false);
            }

            //注册事件
            marketEvent = new MarketEvent();
            market.SetListener(marketEvent);

            //连接服务器
            OpenParams openParams = new OpenParams();

            openParams.HostAddress = CfgSE.MarketAddress;
            openParams.BrokerID    = CfgSE.BrokerID;
            openParams.UserID      = CfgSE.UserName;
            openParams.Password    = CfgSE.Password;
            openParams.IsUTF8      = true;
            market.Open(openParams);

            return(true);
        }
Пример #4
0
 internal MarketEvent InvokeEvent(MarketEvent arg)
 {
     if (_api.ValidateEvent(arg))
     {
         Market?.Invoke(_api, arg);
     }
     return(arg);
 }
Пример #5
0
        public void SetCurrentMarket(MarketId marketId)
        {
            var market = GetMarket(marketId);

            SiteContext.Current.Currency = market.DefaultCurrency;
            _cookieService.Set(MarketCookie, marketId.Value);
            MarketEvent.OnChangeMarket(market, new EventArgs());
        }
Пример #6
0
 private static void AssertEvent(MarketEvent @event)
 {
     Assert.NotNull(@event);
     Assert.Equal(DateTime.Parse("2019-09-09T12:28:18Z"), @event.Timestamp);
     Assert.Equal(EventName, @event.Event);
     Assert.Equal(3510937344, @event.MarketId);
     Assert.Equal("Arnold Bastion", @event.StationName);
     Assert.Equal("Potrigua", @event.StarSystem);
 }
Пример #7
0
        public void UpdateTimeIndex(MarketEvent market)
        {
            var marketHoldings = this.bars.Symbols.ToDictionary(symbol => symbol, cost => decimal.Zero);

            var cash      = this.currentCash;
            var commision = this.currentComission;
            var total     = this.currentCash;

            foreach (var symbol in this.bars.Symbols)
            {
                var qty        = this.currentPositions[symbol];
                var closePrice = this.bars.GetLastClosePrice(symbol);

                if (closePrice == null)
                {
                    if (qty != 0)
                    {
                        throw new InvalidOperationException($"Unknown close price for {symbol} with position qty={qty}.");
                    }

                    closePrice = decimal.Zero;
                }

                var marketValue = qty * closePrice.Value;
                marketHoldings[symbol] = marketValue;
                total += marketValue;
            }

            var change = this.initialCapital != decimal.Zero
                ? ((total - this.initialCapital) / this.initialCapital) * 100
                : decimal.Zero;


            var holding = new Holding();

            foreach (var kvp in marketHoldings)
            {
                holding.SymbolHoldings.Add(kvp.Key, kvp.Value);
            }

            holding.Comission = commision;
            holding.Cash      = cash;
            holding.Total     = total;
            holding.Change    = change;

            var dateTime = market.CurrentTime;

            if (this.HoldingHistory.ContainsKey(dateTime))
            {
                this.HoldingHistory[dateTime] = holding;
            }
            else
            {
                this.HoldingHistory.Add(dateTime, holding);
            }
        }
Пример #8
0
        // receive update from market library
        private void r_MarketUpdate(object sender, MarketEvent e)
        {
            dBytes = e.Data;

            /* since the market update works on a different thread, it is required to
             * explicitally invoke this function on the thread it was created. Otherwise
             * it would fail, giving an error from the datagridview function specifically
             * made to give safe thread access.
             */
            BeginInvoke(new MethodInvoker(BindData));
        }
Пример #9
0
        //////////////////////////////////////////////////////////////////////////////////
        //行情测试
        static void MarketTest()
        {
            //创建 IMarket
            // char* path 指 xxx.exe 同级子目录中的 xxx.dll 文件
            int err = -1;

            market = ITradeApi.XFinApi_CreateMarketApi("XTA_W32/Api/XTP_v1.1.18.13_20180516/XFinApi.XTPTradeApi.dll", out err);


            if (err > 0 || market == null)
            {
                Console.WriteLine(string.Format("* Market XFinApiCreateError={0};", StrCreateErrors[err]));
                return;
            }

            //注册事件
            marketEvent = new MarketEvent();
            market.SetListener(marketEvent);

            //连接服务器
            OpenParams openParams = new OpenParams();

            openParams.HostAddress = Cfg.MarketAddress;
            openParams.UserID      = Cfg.UserName;
            openParams.Password    = Cfg.Password;
            openParams.Configs.Add("AuthCode", Cfg.AuthCode);
            openParams.Configs.Add("ClientID", Cfg.ClientID);//可选
            openParams.IsUTF8 = true;
            market.Open(openParams);

            /*
             * 连接成功后才能执行订阅行情等操作,检测方法有两种:
             * 1、IMarket.IsOpened()=true
             * 2、MarketListener.OnNotify中
             * (int)XFinApi.TradeApi.ActionKind.Open == notifyParams.ActionType &&
             * (int)ResultKind.Success == notifyParams.ResultType
             */

            /* 行情相关方法
             * while (!market.IsOpened())
             *   Thread.Sleep(1000);
             *
             * //订阅行情,已在MarketEvent.OnNotify中订阅
             * XFinApi.QueryParams param = new XFinApi.QueryParams();
             * param.ExchangeID = Cfg.ExchangeID;
             * param.InstrumentID = Cfg.InstrumentID;
             * market.Subscribe(param);
             *
             * //取消订阅行情
             * market.Unsubscribe(param);
             */
        }
Пример #10
0
 public MarketEvent getMarketEvent()
 {
     if (marketEvent == null)
     {
         marketEvent = GameObject.Find("Network").GetComponent <MarketEvent>();
         if (marketEvent == null)
         {
             Debug.Log("Error! [requestContent] marketEvent == null");
             return(null);
         }
         ;
     }
     //Debug.Log("Error! [requestContent] ok");
     return(marketEvent);
 }
Пример #11
0
        private static void AssertFileEvent(MarketEvent @event)
        {
            Assert.NotNull(@event);
            Assert.Equal(DateTime.Parse("2019-09-07T12:48:31Z"), @event.Timestamp);
            Assert.Equal(EventName, @event.Event);
            Assert.Equal(3511645184, @event.MarketId);
            Assert.Equal("Michell Depot", @event.StationName);
            Assert.Equal("Eurybia", @event.StarSystem);
            Assert.Equal(96, @event.Items.Length);

            Assert.Equal(128049152, @event.Items[0].Id);
            Assert.Equal("$platinum_name;", @event.Items[0].Name);
            Assert.Equal("Платина", @event.Items[0].NameLocalised);
            Assert.Equal("$MARKET_category_metals;", @event.Items[0].Category);
            Assert.Equal("Металлы", @event.Items[0].CategoryLocalised);
            Assert.Equal(0, @event.Items[0].BuyPrice);
            Assert.Equal(56471, @event.Items[0].SellPrice);
            Assert.Equal(42494, @event.Items[0].MeanPrice);
            Assert.Equal(0, @event.Items[0].StockBracket);
            Assert.Equal(3, @event.Items[0].DemandBracket);
            Assert.Equal(0, @event.Items[0].Stock);
            Assert.Equal(5053, @event.Items[0].Demand);
            Assert.True(@event.Items[0].Consumer);
            Assert.False(@event.Items[0].Producer);
            Assert.False(@event.Items[0].Rare);

            Assert.Equal(128924332, @event.Items[95].Id);
            Assert.Equal("$opal_name;", @event.Items[95].Name);
            Assert.Equal("Опалы бездны", @event.Items[95].NameLocalised);
            Assert.Equal("$MARKET_category_minerals;", @event.Items[95].Category);
            Assert.Equal("Минералы", @event.Items[95].CategoryLocalised);
            Assert.Equal(0, @event.Items[95].BuyPrice);
            Assert.Equal(753733, @event.Items[95].SellPrice);
            Assert.Equal(182168, @event.Items[95].MeanPrice);
            Assert.Equal(0, @event.Items[95].StockBracket);
            Assert.Equal(1, @event.Items[95].DemandBracket);
            Assert.Equal(0, @event.Items[95].Stock);
            Assert.Equal(1, @event.Items[95].Demand);
            Assert.True(@event.Items[95].Consumer);
            Assert.False(@event.Items[95].Producer);
            Assert.False(@event.Items[95].Rare);
        }
Пример #12
0
    void OnMarketEventRespound() // получения ответа от сервера
    {
        //Debug.Log("█ данные получил");
        MarketEvent marketEvent = GameObject.Find("Network").GetComponent <MarketEvent>();
        //marketEvent.response;
        //Debug.Log("[OnReady] in WindowController" + waitToShowWindow);
        var name = getStringByType(waitToShowWindow);

        crystalItems            = main.purchase.getMarketItesByName(name);
        goldFromCrystalExchange = getMarketEvent().response.data.Exchange;
        sortRubinItems();
        sortGoldItems();

        if (waitToShowWindow != TypePopUpWindow.NONE)
        {
            showingWindow = waitToShowWindow;
            Debug.Log("█ showingWindow == " + showingWindow);
            createAndShowWindow(showingWindow);
            //waitToShowWindow = TypePopUpWindow.NONE;
        }
    }
Пример #13
0
 internal void InvokeMarketEvent(MarketEvent arg)
 {
     MarketEvent?.Invoke(this, arg);
 }
        public void UpdateTimeIndex(MarketEvent market)
        {
            var marketHoldings = this.bars.Symbols.ToDictionary(symbol => symbol, cost => decimal.Zero);

            var cash = this.currentCash;
            var commision = this.currentComission;
            var total = this.currentCash;

            foreach (var symbol in this.bars.Symbols)
            {
                var qty = this.currentPositions[symbol];
                var closePrice = this.bars.GetLastClosePrice(symbol);

                if (closePrice == null)
                {
                    if (qty != 0)
                    {
                        throw new InvalidOperationException($"Unknown close price for {symbol} with position qty={qty}.");
                    }

                    closePrice = decimal.Zero;
                }

                var marketValue = qty * closePrice.Value;
                marketHoldings[symbol] = marketValue;
                total += marketValue;
            }

            var change = this.initialCapital != decimal.Zero
                ? ((total - this.initialCapital) / this.initialCapital) * 100
                : decimal.Zero;

            var holding = new Holding();

            foreach (var kvp in marketHoldings)
            {
                holding.SymbolHoldings.Add(kvp.Key, kvp.Value);
            }

            holding.Comission = commision;
            holding.Cash = cash;
            holding.Total = total;
            holding.Change = change;

            var dateTime = market.CurrentTime;

            if (this.HoldingHistory.ContainsKey(dateTime))
            {
                this.HoldingHistory[dateTime] = holding;
            }
            else
            {
                this.HoldingHistory.Add(dateTime, holding);
            }
        }
Пример #15
0
 internal void InvokeMarketEvent(MarketEvent arg) => MarketEvent?.Invoke(null, arg);
Пример #16
0
 public void ProcessMessage(MarketEvent Data)
 {
     Log.Information(Data.TextSerialize(false));
 }