public override void managedAccounts(string accountsList)
        {
            var splittedAccounts = accountsList.Split(',').Where(e => e.Length > 0).ToList();

            splittedAccounts.ForEach(account =>
            {
                var positionId  = RandomGen3.Next();
                var portfolioId = RandomGen3.Next();
                var pnlId       = RandomGen3.Next();

                links.TryAdd(positionId, account);
                links.TryAdd(portfolioId, account);
                links.TryAdd(pnlId, account);

                var newAccount = new Account()
                {
                    AccountName  = account,
                    PnLContainer = new PnLContainerEx()
                    {
                        Id = pnlId
                    },
                    PortfolioContainer = new PortfolioContainerEx()
                    {
                        Id = portfolioId
                    },
                    PositionContainer = new PositionContainerEx()
                    {
                        Id = positionId
                    },
                    OrderContainer = new OrderContainerEx()
                };

                accountList.TryAdd(account, newAccount);

                clientSocket.reqAccountUpdatesMulti(portfolioId, account, "", true);
                clientSocket.reqPnL(pnlId, account, "");
                clientSocket.reqPositionsMulti(positionId, account, "");
            });

            foreach (var elem in assetLoader.Elements)
            {
                GetContract(elem.Symbol, elem.SecType, elem.Exchange, elem.Currency);
            }

            clientSocket.reqMarketDataType(1);
            clientSocket.reqAllOpenOrders();
            clientSocket.reqIds(-1);
        }
        public void GetContract(string code, string type, string exchange, string currency)
        {
            var contract = new Contract()
            {
                Symbol   = code,
                SecType  = type,
                Exchange = exchange,
                Currency = currency
            };

            int id = RandomGen3.Next();

            symbolPermission.TryAdd(code, true);


            /*****
            *  clientSocket.reqContractDetails(id, contract);
            *  clientSocket.reqMktData(id, contract, string.Empty, false, false, null);
            *****/
        }
Beispiel #3
0
 /// <summary>
 /// 返回介于min和max之间的一个随机数。包括min,不包括max
 /// </summary>
 /// <param name="min"></param>
 /// <param name="max"></param>
 /// <returns></returns>
 public static int Random(int min, int max)
 {
     return(RandomGen3.Next(min, max));
 }
Beispiel #4
0
 /// <summary>
 /// 返回数组中的随机元素
 /// </summary>
 /// <typeparam name="T">元素类型</typeparam>
 /// <param name="random"></param>
 /// <param name="items">元素数组</param>
 /// <returns>元素数组中的某个随机项</returns>
 public static T NextItem <T>(T[] items)
 {
     return(items[RandomGen3.Next(0, items.Length)]);
 }
Beispiel #5
0
 /// <summary>
 /// 返回非负随机数(多线程下也严格随机)
 /// </summary>
 /// <returns></returns>
 public static int Random()
 {
     return(RandomGen3.Next());
 }
        static void Main(string[] args)
        {
            Debug.WriteLine("main thread id " + Thread.CurrentThread.ManagedThreadId);

            List <int> lstNumbersToIterate = new List <int>();

            for (int i = 0; i < 1000000; i++)
            {
                lstNumbersToIterate.Add(i);
            }

            ParallelOptions paralelOp = new ParallelOptions();

            paralelOp.MaxDegreeOfParallelism = 10;
            //since we have 1m items and maximum 8 threads, the .net has split our list into 8 parts starting from 0, 125k, 250k, 375k, 500k, ..
            //Parallel.ForEach(lstNumbersToIterate, paralelOp, number => {

            //    //Debug.WriteLine("each iteration inside parallel foreach scope thread id " + Thread.CurrentThread.ManagedThreadId); each one runs in a task not in the main thread

            //    Console.WriteLine(number);

            //});


            Random rand = new Random();

            Parallel.For(0, 1000000, (i, loop) =>
            {
                if (rand.Next() == 0)
                {
                    loop.Stop();
                }
            });

            while (true)
            {
                Console.WriteLine(rand.Next());
                Console.ReadLine();
            }

            //int lastNumber = 1, count = 0;
            //Parallel.For(0, 1000000, (i, loop) =>
            //{
            //    // Get the next number
            //    int curNumber = new Random().Next();

            //    // If it’s the same as the previous number,
            //    // note the increased count
            //    if (curNumber == lastNumber) count++;

            //    // Otherwise, we have a different number than
            //    // the previous. Write out the previous number
            //    // and its count, then start
            //    // over with the new number.
            //    else
            //    {
            //        if (count > 0)
            //            Console.WriteLine(
            //                count + ": " + lastNumber);
            //        lastNumber = curNumber;

            //    }
            //});

            Stopwatch sw;
            const int NUM = 100000;

            StreamWriter swWrite = new StreamWriter("classic non locking random generator.txt");

            swWrite.AutoFlush = true;

            paralelOp.MaxDegreeOfParallelism = 100;

            List <int> lstGeneratedNumbers = new List <int>();

            while (true)
            {
                sw = Stopwatch.StartNew();
                Parallel.For(0, NUM, paralelOp, i =>
                {
                    lstGeneratedNumbers.Add(RandomGen0.Next());
                });
                Console.WriteLine(sw.Elapsed);


                File.WriteAllLines("0 static non locking random generator.txt", lstGeneratedNumbers.Select(p => p.ToString()));
                lstGeneratedNumbers = new List <int>();

                sw = Stopwatch.StartNew();
                var vrResult = Parallel.For(0, NUM, paralelOp, i =>
                {
                    lstGeneratedNumbers.Add(RandomGen1.Next());
                });
                Console.WriteLine(sw.Elapsed);



                File.WriteAllLines("1 thread static random generator.txt", lstGeneratedNumbers.Select(p => p.ToString()));
                lstGeneratedNumbers = new List <int>();

                sw = Stopwatch.StartNew();
                Parallel.For(0, NUM, paralelOp, i =>
                {
                    lstGeneratedNumbers.Add(RandomGen2.Next());
                });
                Console.WriteLine(sw.Elapsed);


                File.WriteAllLines("2 thread static and RNGCryptoServiceProvider random generator.txt", lstGeneratedNumbers.Select(p => p.ToString()));
                lstGeneratedNumbers = new List <int>();

                sw = Stopwatch.StartNew();
                Parallel.For(0, NUM, paralelOp, i =>
                {
                    lstGeneratedNumbers.Add(RandomGen3.Next());
                });
                Console.WriteLine(sw.Elapsed);


                File.WriteAllLines("3 thread local and RNGCryptoServiceProvider random generator.txt", lstGeneratedNumbers.Select(p => p.ToString()));
                lstGeneratedNumbers = new List <int>();

                sw = Stopwatch.StartNew();
                Parallel.For(0, NUM, paralelOp, i =>
                {
                    lstGeneratedNumbers.Add(RandomGen4.Next());
                });
                Console.WriteLine(sw.Elapsed);


                lstGeneratedNumbers = new List <int>();

                sw = Stopwatch.StartNew();
                Parallel.For(0, NUM, paralelOp, i =>
                {
                    lstGeneratedNumbers.Add(threadSafeRandomWithCrypto(0, Int32.MaxValue));
                });
                Console.WriteLine(sw.Elapsed);

                File.WriteAllLines("5 thread safe random generator.txt", lstGeneratedNumbers.Select(p => p.ToString()));

                swWrite.Flush();

                Console.ReadLine();
            }
        }