コード例 #1
0
ファイル: WatcherSymbol.cs プロジェクト: hombrevrc/FDK
        internal void Update(SingleAdviser <int> firstAdviser, SingleAdviser <int> secondAdviser)
        {
            Level2 f = firstAdviser.GetLevel2(m_symbol);
            Level2 s = secondAdviser.GetLevel2(m_symbol);

            if (!f.Exist || !s.Exist)
            {
                return;
            }
            if (!f.HasBeenChanged && !s.HasBeenChanged)
            {
                return;
            }
            int key = StrategyPairTransactionInfo.GetKey(firstAdviser.Tag, secondAdviser.Tag);
            StrategyPairTransactionInfo sPairs = null;

            if (!dictSPairs.TryGetValue(key, out sPairs))
            {
                sPairs = new StrategyPairTransactionInfo();
                {
                    dictSPairs.Add(key, sPairs);
                }
            }

            Run(firstAdviser, secondAdviser, s, f, ref sPairs.m_firstBidSecondAskArbitrage);
        }
コード例 #2
0
ファイル: Order.cs プロジェクト: hombrevrc/FDK
 internal Order(SingleAdviser <int> adviser, string symbol, double requestedPrice, double requestedVolume, OrderType type, TradeSide side)
 {
     m_volume         = requestedVolume;
     m_adviser        = adviser;
     m_symbol         = symbol;
     m_requestedPrice = requestedPrice;
     m_type           = type;
     m_side           = side;
 }
コード例 #3
0
        protected override void OnUpdate(SingleAdviser <int> adviser)
        {
            string symbol = "EUR/USD";
            Level2 first  = m_first.GetLevel2(symbol);
            Order  sell   = new Order(m_first, symbol, first.Bid, cVolume, OrderType.Market, TradeSide.Sell);

            sell.Run();
            sell.Join();
        }
コード例 #4
0
ファイル: Order.cs プロジェクト: ifzz/FDK
		internal Order(SingleAdviser<int> adviser, string symbol, double requestedPrice, double requestedVolume, OrderType type, TradeSide side)
		{
			m_volume = requestedVolume;
			m_adviser = adviser;
			m_symbol = symbol;
			m_requestedPrice = requestedPrice;
			m_type = type;
			m_side = side;
		}
コード例 #5
0
 internal Transaction(string symbol, SingleAdviser <int> first, SingleAdviser <int> second)
 {
     m_start     = DateTime.UtcNow;
     m_first     = first.Tag;
     m_second    = second.Tag;
     m_precision = Math.Min(first.Symbols[symbol].Precision, second.Symbols[symbol].Precision);
     m_builder.AppendFormat("{0}> symbol = {1}; first bank = {2}; second bank = {3}", UtcNow(m_start), symbol, first.Tag, second.Tag);
     m_builder.AppendLine();
 }
コード例 #6
0
ファイル: Transaction.cs プロジェクト: ifzz/FDK
		internal Transaction(string symbol, SingleAdviser<int> first, SingleAdviser<int> second)
		{
			m_start = DateTime.UtcNow;
			m_first = first.Tag;
			m_second = second.Tag;
			m_precision = Math.Min(first.Symbols[symbol].Precision, second.Symbols[symbol].Precision);
			m_builder.AppendFormat("{0}> symbol = {1}; first bank = {2}; second bank = {3}", UtcNow(m_start), symbol, first.Tag, second.Tag);
			m_builder.AppendLine();
		}
コード例 #7
0
 protected override void OnUpdate(SingleAdviser <int> adviser)
 {
     lock (m_synchronizer)
     {
         quotesCounter[adviser.Tag]++;
         for (int i = 0; i < m_listAdviser.Count; i++)
         //Array.For(0, m_listAdviser.Count, i =>
         {
             if (adviser.Tag != m_listAdviser[i].Tag)
             {
                 Parallel.ForEach <WatcherSymbol>(m_watchers, currSymbolWatcher =>
                 {
                     currSymbolWatcher.Update(m_listAdviser[i], adviser);
                     currSymbolWatcher.Update(adviser, m_listAdviser[i]);
                 });
             }
         }
     }
 }
コード例 #8
0
        protected override void OnUpdate(SingleAdviser <int> adviser)
        {
            lock (obj)
            {
                foreach (string currSymbol in listSymbols)
                {
                    Level2 level2 = adviser.GetLevel2(currSymbol);
                    if (!level2.Exist || level2.HasBeenChanged)
                    {
                        continue;
                    }

                    LastTask = LastTask.ContinueWith(ant =>
                    {
                        DataFeedStorage dfs = dictKeyToStorage[GetKey(adviser.Tag, currSymbol)];
                        dfs.Import(level2.ToQuote().ToEnumerable(), false, true, true);
                    }
                                                     );
                    //listCodeToBankSaver[adviser.Tag].AddQuote(level2);
                }
            }
        }
コード例 #9
0
ファイル: WatcherSymbol.cs プロジェクト: ifzz/FDK
		internal void Update(SingleAdviser<int> firstAdviser, SingleAdviser<int> secondAdviser)
		{
            Level2 f = firstAdviser.GetLevel2(m_symbol);
            Level2 s = secondAdviser.GetLevel2(m_symbol);
			if (!f.Exist || !s.Exist)
			{
				return;
			}
			if (!f.HasBeenChanged && !s.HasBeenChanged)
			{
				return;
			}
            int key = StrategyPairTransactionInfo.GetKey(firstAdviser.Tag, secondAdviser.Tag);
            StrategyPairTransactionInfo sPairs = null;
            if (!dictSPairs.TryGetValue(key, out sPairs))
            {
                sPairs = new StrategyPairTransactionInfo();
                {
                    dictSPairs.Add(key, sPairs);
                }
            }

            Run(firstAdviser, secondAdviser, s, f, ref sPairs.m_firstBidSecondAskArbitrage);
		}
コード例 #10
0
ファイル: WatcherSymbol.cs プロジェクト: ifzz/FDK
		private void Run(SingleAdviser<int> first, SingleAdviser<int> second, Level2 f, Level2 s, ref  Arbitrage arb)
		{
			if ( f.Bids.Count == 0 || s.Asks.Count == 0 || s.Ask - f.Bid > -float.Epsilon)
			{
                if (null != arb)
				{
                    arb.EndDateTime = DateTime.UtcNow;
                    arb.Duration = (arb.EndDateTime - arb.StartDateTime).TotalMilliseconds;
                    ArbitrageDetail prevArbDetail = arb.ArbitrageDetails.Last();
                    prevArbDetail.EndTickTime = arb.EndDateTime;
                    prevArbDetail.duration = (prevArbDetail.EndTickTime - prevArbDetail.StartTickTime).TotalMilliseconds;

                    double test = Math.Abs(arb.ArbitrageDetails.Sum(p => p.duration));
                    if (test - arb.Duration > 0.0000000001)
                    {
                        Console.WriteLine("DurationError");
                    }

                    Arbitrage refArbitrage = arb;
                    //Task.Factory.StartNew(() =>
                    //{
                    //    using (Model.ArbitrageContext arbContext = new Model.ArbitrageContext())
                    //    {
                    //        arbContext.Arbitrages.Add(refArbitrage);
                    //        arbContext.SaveChanges();
                    //    }
                    //});

                    arb = null;

                    if (!dictSPairs.Any(p => p.Value.m_firstBidSecondAskArbitrage != null))
                    {
                        ArbitrageTimeStatistics ars = ArbitrageTimeStatistics.Instance(f.Symbol);
                        ars.TotalSecondsArbitradge += (DateTime.UtcNow - ars.StartArbitrageDateTime).TotalSeconds;
                        ars.StartArbitrageDateTime = DateTime.MinValue;

                        Console.WriteLine("Symbol={3}; ArbitrageTime={0} seconds; Percent={1}%; InHourSeconds={2}", ars.TotalSecondsArbitradge,
                            ars.TotalSecondsArbitradge * 100 / (DateTime.UtcNow - ArbitrageTimeStatistics.StartAppDateTime).TotalSeconds,
                            ars.TotalSecondsArbitradge * 3600 / (DateTime.UtcNow - ArbitrageTimeStatistics.StartAppDateTime).TotalSeconds,
                            f.Symbol);
                    }
				
                }
			}
			else
			{
                DateTime utcNow = DateTime.UtcNow;

                if (arb == null)
                    arb = new Arbitrage(utcNow, first.Tag, second.Tag, m_symbol);

                ArbitrageDetail arbDetail = new ArbitrageDetail(utcNow);
                if (f.Asks.Count > 0)
                {
                    arbDetail.B1Ask1 = f.Asks[0].Price;
                    arbDetail.B1Ask1Volume = f.Asks[0].Volume;
                }
                arbDetail.B1Bid1 = f.Bids[0].Price;
                arbDetail.B1Bid1Volume = f.Bids[0].Volume;
                arbDetail.B2Ask1 = s.Asks[0].Price;
                arbDetail.B2Ask1Volume = s.Asks[0].Volume;
                if (s.Bids.Count > 0)
                {
                    arbDetail.B2Bid1 = s.Bids[0].Price;
                    arbDetail.B2Bid1Volume = s.Bids[0].Volume;
                }
                if (arb.ArbitrageDetails.Count != 0)
                {
                    ArbitrageDetail previos = arb.ArbitrageDetails.Last();
                    previos.EndTickTime = arbDetail.StartTickTime;
                    previos.duration = (previos.EndTickTime - previos.StartTickTime).TotalMilliseconds;
                }
                arbDetail.spread = s.Ask - f.Bid;
                arb.ArbitrageDetails.Add(arbDetail);

                if (ArbitrageTimeStatistics.Instance(f.Symbol).StartArbitrageDateTime == DateTime.MinValue)
                    ArbitrageTimeStatistics.Instance(f.Symbol).StartArbitrageDateTime = DateTime.UtcNow;

                //CheckDoubleArbitrage(first.Tag, second.Tag);
			}
		}
コード例 #11
0
        protected override void OnDisconnected(SingleAdviser <int> adviser, string message)
        {
            string now = DateTime.Now.ToString("HHHH:mm:ss.fff");

            Console.WriteLine("{0}: OnDisconnected({1})", now, adviser.Tag);
        }
コード例 #12
0
ファイル: WatcherSymbol.cs プロジェクト: hombrevrc/FDK
        private void Run(SingleAdviser <int> first, SingleAdviser <int> second, Level2 f, Level2 s, ref Arbitrage arb)
        {
            if (f.Bids.Count == 0 || s.Asks.Count == 0 || s.Ask - f.Bid > -float.Epsilon)
            {
                if (null != arb)
                {
                    arb.EndDateTime = DateTime.UtcNow;
                    arb.Duration    = (arb.EndDateTime - arb.StartDateTime).TotalMilliseconds;
                    ArbitrageDetail prevArbDetail = arb.ArbitrageDetails.Last();
                    prevArbDetail.EndTickTime = arb.EndDateTime;
                    prevArbDetail.duration    = (prevArbDetail.EndTickTime - prevArbDetail.StartTickTime).TotalMilliseconds;

                    double test = Math.Abs(arb.ArbitrageDetails.Sum(p => p.duration));
                    if (test - arb.Duration > 0.0000000001)
                    {
                        Console.WriteLine("DurationError");
                    }

                    Arbitrage refArbitrage = arb;
                    //Task.Factory.StartNew(() =>
                    //{
                    //    using (Model.ArbitrageContext arbContext = new Model.ArbitrageContext())
                    //    {
                    //        arbContext.Arbitrages.Add(refArbitrage);
                    //        arbContext.SaveChanges();
                    //    }
                    //});

                    arb = null;

                    if (!dictSPairs.Any(p => p.Value.m_firstBidSecondAskArbitrage != null))
                    {
                        ArbitrageTimeStatistics ars = ArbitrageTimeStatistics.Instance(f.Symbol);
                        ars.TotalSecondsArbitradge += (DateTime.UtcNow - ars.StartArbitrageDateTime).TotalSeconds;
                        ars.StartArbitrageDateTime  = DateTime.MinValue;

                        Console.WriteLine("Symbol={3}; ArbitrageTime={0} seconds; Percent={1}%; InHourSeconds={2}", ars.TotalSecondsArbitradge,
                                          ars.TotalSecondsArbitradge * 100 / (DateTime.UtcNow - ArbitrageTimeStatistics.StartAppDateTime).TotalSeconds,
                                          ars.TotalSecondsArbitradge * 3600 / (DateTime.UtcNow - ArbitrageTimeStatistics.StartAppDateTime).TotalSeconds,
                                          f.Symbol);
                    }
                }
            }
            else
            {
                DateTime utcNow = DateTime.UtcNow;

                if (arb == null)
                {
                    arb = new Arbitrage(utcNow, first.Tag, second.Tag, m_symbol);
                }

                ArbitrageDetail arbDetail = new ArbitrageDetail(utcNow);
                if (f.Asks.Count > 0)
                {
                    arbDetail.B1Ask1       = f.Asks[0].Price;
                    arbDetail.B1Ask1Volume = f.Asks[0].Volume;
                }
                arbDetail.B1Bid1       = f.Bids[0].Price;
                arbDetail.B1Bid1Volume = f.Bids[0].Volume;
                arbDetail.B2Ask1       = s.Asks[0].Price;
                arbDetail.B2Ask1Volume = s.Asks[0].Volume;
                if (s.Bids.Count > 0)
                {
                    arbDetail.B2Bid1       = s.Bids[0].Price;
                    arbDetail.B2Bid1Volume = s.Bids[0].Volume;
                }
                if (arb.ArbitrageDetails.Count != 0)
                {
                    ArbitrageDetail previos = arb.ArbitrageDetails.Last();
                    previos.EndTickTime = arbDetail.StartTickTime;
                    previos.duration    = (previos.EndTickTime - previos.StartTickTime).TotalMilliseconds;
                }
                arbDetail.spread = s.Ask - f.Bid;
                arb.ArbitrageDetails.Add(arbDetail);

                if (ArbitrageTimeStatistics.Instance(f.Symbol).StartArbitrageDateTime == DateTime.MinValue)
                {
                    ArbitrageTimeStatistics.Instance(f.Symbol).StartArbitrageDateTime = DateTime.UtcNow;
                }

                //CheckDoubleArbitrage(first.Tag, second.Tag);
            }
        }