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); *****/ }
/// <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)); }
/// <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)]); }
/// <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(); } }