public Chart(Bars bars, SignalData signal, DataReception data) { InitializeComponent(); this.data = data; this.bars = bars; label1.Text = String.Empty; label2.Text = String.Empty; label3.Text = String.Empty; label4.Text = String.Empty; timeLastData = bars.LastGet; this.signal = signal; CreateChart(); LoadCandleFromFile(bars); PaintData(signal); textBox1.Text = signal.Level.ToString(); stepPrice = bars.StepPrice; CalculatePesent(); ChartResize(); this.Text = String.Format($"{bars.Name}_{bars.TimeFrame} - {signal.SignalType} || Люфт - {signal.CancelSignal}"); textBox2.Text = "1"; textBox3.Text = GetOneLotPrice(bars.Name).ToString(); }
public static void CycleSetCommand(StreamWriter SW_Command, StreamReader SR_FlagCommand, StreamWriter SW_FlagCommand) { string temp = String.Empty; while (true) { mtx.WaitOne(); if (listBars.OfType <Bars>().All(x => x.ProcessType == "SendCommand")) { foreach (Bars i in listBars.OfType <Bars>()) { if (i.ProcessType == "SendCommand" && i.Count > 0 && DateTime.Now >= i.LastTime.AddMinutes(i.TimeFrame).AddSeconds(-i.SecondsCycle)) { i.ProcessType = "Accept"; if (temp != String.Empty) { temp += ';'; } temp += i.ClassCod + ';' + i.Name + ';' + i.TimeFrame + ';' + i.Count; } } } mtx.ReleaseMutex(); if (temp != String.Empty) { Task.Run(() => { Console.WriteLine("================================================================================"); DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp); temp = String.Empty; }); } Thread.Sleep(1000); } }
public MainForm() { InitializeComponent(); AddItemToCb(); data = new DataReception(); Task.Run(() => { data.Start(); }); }
public static void CheckOrders(List <Data> listBars, String[] substrings, StreamWriter SW_Command, StreamReader SR_FlagCommand, StreamWriter SW_FlagCommand) { Bars bars = (Bars)listBars.FirstOrDefault(x => x.Name == substrings[1] && x.TimeFrame == Int32.Parse(substrings[2]) && x.Orders.Count > 0 && x.Orders.Any(y => y.StopProfitId > 0 && y.transactionId > 0)); if (bars != null) { Order order = bars.Orders.FirstOrDefault(y => y.StopProfitId > 0 && y.transactionId > 0); bool tmp = false; if (substrings[3] == "DeleteAllOrders" || substrings[4] == "DeleteAllStopProfitOrders") { if (substrings[3] == "DeleteAllOrders" && substrings[4] != "DeleteAllStopProfitOrders") { DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, bars.ClassCod + ';' + bars.Name + ';' + order.numberStopProfitOrder + ';' + bars.Account, "KillStopOrder"); mtx.WaitOne(); tmp = true; bars.Orders.RemoveAll(x => x.transactionId == order.transactionId && x.StopProfitId == order.StopProfitId); } if (substrings[3] != "DeleteAllOrders" && substrings[4] == "DeleteAllStopProfitOrders") { DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, bars.ClassCod + ';' + bars.Name + ';' + order.numberOrder + ';' + bars.Account, "KillOrder"); mtx.WaitOne(); tmp = true; bars.Orders.RemoveAll(x => x.transactionId == order.transactionId && x.StopProfitId == order.StopProfitId); } if (substrings[3] == "DeleteAllOrders" && substrings[4] == "DeleteAllStopProfitOrders" && !tmp) { mtx.WaitOne(); tmp = true; bars.Orders.RemoveAll(x => x.transactionId == order.transactionId && x.StopProfitId == order.StopProfitId); } } else { mtx.WaitOne(); tmp = true; if (Int64.Parse(substrings[3]) != order.numberOrder) { order.numberOrder = Int64.Parse(substrings[3]); } if (Int64.Parse(substrings[4]) != order.numberStopProfitOrder) { order.numberStopProfitOrder = Int64.Parse(substrings[4]); } } if (!tmp) { mtx.WaitOne(); } bars.LastCheckTable = DateTime.Now; bars.SendCheckTable = true; mtx.ReleaseMutex(); } }
public MainForm() { InitializeComponent(); grid = this.dataGridView1; AddItemToCb(); data = new DataReception(); first = Task.Run(() => { data.Start(ref cycleRead); }); two = Task.Run(() => { data.CycleSetCommand(data.SW_Command, data.SR_FlagCommand, data.SW_FlagCommand, ref cycleWrite); }); }
private void button1_Click(object sender, EventArgs e) { TimeFrame frame = Enum.GetValues(typeof(TimeFrame)).Cast <TimeFrame>().First(x => x.ToString() == cbTimeFrame.Text); string classCod = cbClass.Text; string security = cbSecurity.Text; Task.Run(() => { data.SetQUIKCommandDataObject(DataReception.SW_Command, DataReception.SR_FlagCommand, DataReception.SW_FlagCommand, DataReception.GetCommandStringCb(classCod, security, frame)); }); listSecurity.Text += cbSecurity + "\n"; cbClass.Text = String.Empty; cbSecurity.Text = String.Empty; cbTimeFrame.Text = String.Empty; }
public static void AddData(List <Data> listBars, String[] substrings, StreamWriter SW_Command, StreamReader SR_FlagCommand, StreamWriter SW_FlagCommand) { //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%// //if (substrings[0] == "orders") //{ // CheckOrders(listBars, substrings, SW_Command, SR_FlagCommand, SW_FlagCommand); // return; //} //if (substrings[0] == "Order") //{ // AddOrder(listBars, substrings); // return; //} //else if (substrings[0] == "StopProfitOrder") //{ // AddStopProfitId(listBars, substrings); // return; //} //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%// mtx.WaitOne(); Data temp = listBars.FirstOrDefault(x => x.Name == substrings[0] && x.TimeFrame == Int32.Parse(substrings[1])); if (substrings[1] != "0") { Bars tmp = temp as Bars; if (tmp.Count > 0 && !tmp.Time.Contains(DateTime.Parse(substrings[2]))) { Task.Run(() => { Logger.Info($@"Не обнаружено прежних данных, формирую еще запрос на данные, теперь увеличу глубину запроса для - " + temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';'); // MessageBox.Show("Не обнаружено прежних данных"); int tempCount = (DateTime.Parse(substrings[2]) - tmp.LastTime).Minutes / tmp.TimeFrame; DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + (temp.Count - tempCount - 1), "GetCandle"); }); return; } if (tmp.Count == 0 && tmp.history) { DateTime time = tmp.From; for (int i = 2; i < substrings.Length - 1; i += 6) { if (DateTime.Parse(substrings[i]) >= time) { tmp.temp = substrings.Length / 6 - (substrings.Length - i) / 6; break; } } } for (int i = 2; i <= substrings.Length + -1 /*(tmp.temp <= 0 ? -1 : -tmp.temp)*/; i += 6) { if (substrings[i] == String.Empty) { break; } if (tmp.Time.Contains(DateTime.Parse(substrings[i]))) { RemoveBarsIndex(tmp, tmp.Time.IndexOf(DateTime.Parse(substrings[i]))); } tmp.Time.Add(DateTime.Parse(substrings[i])); tmp.Open.Add(Double.Parse(substrings[i + 1], CultureInfo.InvariantCulture)); tmp.High.Add(Double.Parse(substrings[i + 2], CultureInfo.InvariantCulture)); tmp.Low.Add(Double.Parse(substrings[i + 3], CultureInfo.InvariantCulture)); tmp.Close.Add(Double.Parse(substrings[i + 4], CultureInfo.InvariantCulture)); tmp.Volume.Add(Double.Parse(substrings[i + 5], CultureInfo.InvariantCulture)); if (tmp.Count > tmp.temp && tmp.first == "first" && tmp.history) { Worker.StartStrategy(tmp); } } tmp.first = "second"; tmp.LastGet = DateTime.Now; //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%// if (tmp.Orders.Count > 0)// && tmp.Orders.Any(x => x.StopProfitId > 0 && x.transactionId > 0)) { CheckForKillOrders(tmp, SW_Command, SR_FlagCommand, SW_FlagCommand); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%// //if (tmp.temp > 0) // tmp.temp -= 6; Logger.Info($@"Данные принял и добавил успешно, отправляю на высчитыванеи индикаторов"); //if (tmp.temp < 6) //{ // Worker.StartStrategy(tmp); // temp.ProcessType = "SendCommand"; // mtx.ReleaseMutex(); // return; //} //else Worker.StartStrategy(tmp); //Task.Run(() => //{ // DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + (temp.Count), "GetCandle"); //}); } else { Ticks ticks = temp as Ticks; if (substrings[2] == "0") { ticks.CountTicks = Int32.Parse(substrings[3]); Task.Run(() => { int tempCount = ticks.CountTicks - 1 > -1 ? ticks.CountTicks - 1 : 0; DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + (tempCount), "GetCandle"); }); } else { for (int i = 3; i < substrings.Length - 1; i = i + 3) { temp.Time.Add(DateTime.Parse(substrings[i])); temp.Close.Add(Double.Parse(substrings[i + 1], CultureInfo.InvariantCulture)); temp.Volume.Add(Double.Parse(substrings[i + 2], CultureInfo.InvariantCulture)); } ticks = temp as Ticks; ticks.worker.StartFind((Ticks)temp); } } temp.ProcessType = "SendCommand"; mtx.ReleaseMutex(); }
public FormAllSignal(DataReception data) { InitializeComponent(); this.data = data; }
private void button1_Click(object sender, EventArgs e) { if (cbClass.Text != String.Empty && cbSecurity.Text != String.Empty && cbTimeFrame.Text != String.Empty && !this.data.listBars.Any(x => x.Name == cbSecurity.Text && x.TimeFrame == (int)Enum.GetValues(typeof(TimeFrame)).Cast <TimeFrame>().First(y => y.ToString() == cbTimeFrame.Text))) { TimeFrame frame = Enum.GetValues(typeof(TimeFrame)).Cast <TimeFrame>().First(x => x.ToString() == cbTimeFrame.Text); string classCod = cbClass.Text; string security = cbSecurity.Text; Task.Run(() => { data.SetQUIKCommandDataObject(data.SW_Command, data.SR_FlagCommand, data.SW_FlagCommand, DataReception.GetCommandStringCb(classCod, security, frame)); }); listSecurity.Text += cbSecurity.Text + "\n"; listSecurity.AppendText(Environment.NewLine); cbClass.Text = String.Empty; cbSecurity.Text = String.Empty; cbTimeFrame.Text = String.Empty; } }
public static void AddData(List <Data> listBars, String[] substrings, StreamWriter SW_Command, StreamReader SR_FlagCommand, StreamWriter SW_FlagCommand) { mtx.WaitOne(); Data temp = listBars.FirstOrDefault(x => x.Name == substrings[0] && x.TimeFrame == Int32.Parse(substrings[1])); if (substrings[1] != "0") { Bars tmp = temp as Bars; if (tmp.Count > 0 && !tmp.Time.Contains(DateTime.Parse(substrings[2]))) { Task.Run(() => { Logger.Info($@"Не обнаружено прежних данных, формирую еще запрос на данные теперь увеличу глубину запроса для - " + temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';'); // MessageBox.Show("Не обнаружено прежних данных"); int tempCount = (DateTime.Parse(substrings[2]) - tmp.LastTime).Minutes / tmp.TimeFrame; DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + (temp.Count - tempCount - 1)); }); return; } if (tmp.Count == 0) { //DateTime time = tmp.From; //for (int i = 2; i < substrings.Length - 1; i += 6) //{ // if (DateTime.Parse(substrings[i]) >= time) // { // tmp.temp = substrings.Length - i; // break; // } //} } for (int i = 2; i <= substrings.Length + (tmp.temp <= 0 ? -1 : -tmp.temp); i += 6) { if (substrings[i] == String.Empty) { break; } if (tmp.Time.Contains(DateTime.Parse(substrings[i]))) { RemoveBarsIndex(tmp, tmp.Time.IndexOf(DateTime.Parse(substrings[i]))); } tmp.Time.Add(DateTime.Parse(substrings[i])); tmp.Open.Add(Double.Parse(substrings[i + 1], CultureInfo.InvariantCulture)); tmp.High.Add(Double.Parse(substrings[i + 2], CultureInfo.InvariantCulture)); tmp.Low.Add(Double.Parse(substrings[i + 3], CultureInfo.InvariantCulture)); tmp.Close.Add(Double.Parse(substrings[i + 4], CultureInfo.InvariantCulture)); tmp.Volume.Add(Double.Parse(substrings[i + 5], CultureInfo.InvariantCulture)); } if (tmp.temp > 0) { tmp.temp -= 6; } Logger.Info($@"Данные принял и добавил успешно, отправляю на высчитыванеи индикаторов"); //if (tmp.temp < 6) //{ // Worker.StartStrategy(tmp); // return; //} //else Worker.StartStrategy(tmp); //Task.Run(() => //{ // DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + (temp.Count)); //}); } else { if (substrings[2] == "0") { temp.Count = Int32.Parse(substrings[3]); Task.Run(() => { int tempCount = temp.Count - 1 > -1 ? temp.Count - 1 : 0; DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + (tempCount)); }); } else { for (int i = 3; i < substrings.Length - 1; i = i + 3) { temp.Time.Add(DateTime.Parse(substrings[i])); temp.Close.Add(Double.Parse(substrings[i + 1], CultureInfo.InvariantCulture)); temp.Volume.Add(Double.Parse(substrings[i + 2], CultureInfo.InvariantCulture)); } } } temp.ProcessType = "SendCommand"; mtx.ReleaseMutex(); }
public void Start() { mtx = new Mutex(); listBars = new List <Data>(); try { mutexCmd = Mutex.OpenExisting(mutexCommand); } catch { mutexCmd = new Mutex(false, mutexCommand); } try { mutexDat = Mutex.OpenExisting(mutexData); } catch { mutexDat = new Mutex(false, mutexData); } // Создаст, или подключится к уже созданной памяти с таким именем MemoryMappedFile Memory = MemoryMappedFile.CreateOrOpen("Memory", 200000, MemoryMappedFileAccess.ReadWrite); MemoryMappedFile Flag = MemoryMappedFile.CreateOrOpen("Flag", 1, MemoryMappedFileAccess.ReadWrite); MemoryMappedFile Command = MemoryMappedFile.CreateOrOpen("Command", 128, MemoryMappedFileAccess.ReadWrite); MemoryMappedFile FlagCommand = MemoryMappedFile.CreateOrOpen("FlagCommand", 1, MemoryMappedFileAccess.ReadWrite); // Создает поток для чтения StreamReader SR_Memory = new StreamReader(Memory.CreateViewStream(), System.Text.Encoding.Default); // Создает поток для записи StreamWriter SW_Memory = new StreamWriter(Memory.CreateViewStream(), System.Text.Encoding.Default); StreamReader SR_Flag = new StreamReader(Flag.CreateViewStream(), System.Text.Encoding.Default); StreamWriter SW_Flag = new StreamWriter(Flag.CreateViewStream(), System.Text.Encoding.Default); StreamReader SR_Command = new StreamReader(Command.CreateViewStream(), System.Text.Encoding.Default); SW_Command = new StreamWriter(Command.CreateViewStream(), System.Text.Encoding.Default); SR_FlagCommand = new StreamReader(FlagCommand.CreateViewStream(), System.Text.Encoding.Default); SW_FlagCommand = new StreamWriter(FlagCommand.CreateViewStream(), System.Text.Encoding.Default); //Task.Run(() => { // CycleSetCommand(SW_Command, SR_FlagCommand, SW_FlagCommand); //}); string Msg = ""; string flag = ""; SW_Flag.BaseStream.Seek(0, SeekOrigin.Begin); SW_Flag.Write("o"); SW_Flag.Flush(); SW_FlagCommand.BaseStream.Seek(0, SeekOrigin.Begin); SW_FlagCommand.Write("o"); SW_FlagCommand.Flush(); //Task.Run(() => //{ // DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, GetCommandString(Security.LKOH, TimeFrame.INTERVAL_M5) + ";" + GetCommandString(Security.NLMK, TimeFrame.INTERVAL_M5)); // DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, GetCommandString(Security.GMKN, TimeFrame.INTERVAL_M5)); //}); // Цикл работает пока Run == true int m = 0; while (true) { do { SR_Flag.BaseStream.Seek(0, SeekOrigin.Begin); flag = SR_Flag.ReadToEnd().Trim('\0', '\r', '\n'); }while (flag == "o" || flag == "c"); SR_Flag.BaseStream.Seek(0, SeekOrigin.Begin); flag = SR_Flag.ReadToEnd().Trim('\0', '\r', '\n'); if (flag != "c" && (flag == "p" || flag == "l")) { mutexDat.WaitOne(); ++m; // Console.WriteLine("Get data from c++"); if (flag == "p") { // Console.WriteLine("Get data == p"); string str; do { SR_Flag.BaseStream.Seek(0, SeekOrigin.Begin); flag = SR_Flag.ReadToEnd().Trim('\0', '\r', '\n'); if (flag != "e") { // Встает в начало потока для чтения SR_Memory.BaseStream.Seek(0, SeekOrigin.Begin); // Считывает данные из потока памяти, обрезая ненужные байты str = SR_Memory.ReadToEnd().Trim('\0', '\r', '\n'); Msg += str; // Console.WriteLine(Msg.Length); // Встает в начало потока для записи SW_Memory.BaseStream.Seek(0, SeekOrigin.Begin); // Очищает память, заполняя "нулевыми байтами" for (int i = 0; i < 200000; i++) { SW_Memory.Write("\0"); } SW_Memory.Flush(); if (flag == "l") { //SW_Flag.BaseStream.Seek(0, SeekOrigin.Begin); //SW_Flag.Write("e"); //SW_Flag.Flush(); } else if (flag == "p") { // Console.WriteLine("Write e"); SW_Flag.BaseStream.Seek(0, SeekOrigin.Begin); SW_Flag.Write("e"); SW_Flag.Flush(); SR_Flag.BaseStream.Seek(0, SeekOrigin.Begin); flag = SR_Flag.ReadToEnd().Trim('\0', '\r', '\n'); while (flag == "e") { mutexDat.ReleaseMutex(); --m; SR_Flag.BaseStream.Seek(0, SeekOrigin.Begin); flag = SR_Flag.ReadToEnd().Trim('\0', '\r', '\n'); mutexDat.WaitOne(); ++m; Thread.Sleep(100); } } } // Thread.Sleep(10); }while (flag != "l"); } if (flag == "l") { SW_Flag.BaseStream.Seek(0, SeekOrigin.Begin); SW_Flag.Write("c"); SW_Flag.Flush(); // Встает в начало потока для чтения SR_Memory.BaseStream.Seek(0, SeekOrigin.Begin); // Считывает данные из потока памяти, обрезая ненужные байты Msg += SR_Memory.ReadToEnd().Trim('\0', '\r', '\n'); } String[] substrings = Msg.Split(';'); if (Msg != "" && substrings.Count() > 3) { // Потокобезопасно выводит сообщение в текстовое поле // TB delegateShow = Program.ShowText; delegateShow.BeginInvoke(listBars, substrings, SW_Command, SR_FlagCommand, SW_FlagCommand, null, null); Msg = String.Empty; SW_Flag.BaseStream.Seek(0, SeekOrigin.Begin); SW_Flag.Write("c"); SW_Flag.Flush(); // Встает в начало потока для записи SW_Memory.BaseStream.Seek(0, SeekOrigin.Begin); // Очищает память, заполняя "нулевыми байтами" for (int i = 0; i < 200000; i++) { SW_Memory.Write("\0"); } // Очищает все буферы для SW_Memory и вызывает запись всех данных буфера в основной поток SW_Flag.BaseStream.Seek(0, SeekOrigin.Begin); SW_Flag.Write("o"); SW_Flag.Flush(); SW_Memory.Flush(); } else { Data temp = listBars.FirstOrDefault(x => x.Name == substrings[0] && x.TimeFrame == Int32.Parse(substrings[1])); Task.Run(() => { Console.WriteLine("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + temp.Time.Count); }); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + temp.Time.Count); Console.ResetColor(); Msg = String.Empty; SW_Flag.BaseStream.Seek(0, SeekOrigin.Begin); SW_Flag.Write("c"); SW_Flag.Flush(); // Встает в начало потока для записи SW_Memory.BaseStream.Seek(0, SeekOrigin.Begin); // Очищает память, заполняя "нулевыми байтами" for (int i = 0; i < 200000; i++) { SW_Memory.Write("\0"); } // Очищает все буферы для SW_Memory и вызывает запись всех данных буфера в основной поток SW_Flag.BaseStream.Seek(0, SeekOrigin.Begin); SW_Flag.Write("o"); SW_Flag.Flush(); SW_Memory.Flush(); } mutexDat.ReleaseMutex(); --m; } } // По завершению цикла, закрывает все потоки и освобождает именованную память SR_Memory.Close(); SW_Memory.Close(); Memory.Dispose(); }
public static void AddData(List <Data> listBars, String[] substrings, StreamWriter SW_Command, StreamReader SR_FlagCommand, StreamWriter SW_FlagCommand) { mtx.WaitOne(); Data temp = listBars.FirstOrDefault(x => x.Name == substrings[0] && x.TimeFrame == Int32.Parse(substrings[1])); // temp.FlagAccess = false; if (substrings[1] != "0") { Bars tmp = temp as Bars; if (tmp.Count > 0 && !tmp.Time.Contains(DateTime.Parse(substrings[2]))) { Task.Run(() => { Console.WriteLine("Не обнаружено прежних данных"); int tempCount = (DateTime.Parse(substrings[2]) - tmp.LastTime).Minutes / tmp.TimeFrame; DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + (temp.Count - tempCount - 1)); }); return; } if (tmp.Count == 0) { DateTime time = tmp.From; for (int i = 2; i < substrings.Length - 1; i += 6) { if (DateTime.Parse(substrings[i]) >= time) { tmp.temp = substrings.Length - i; break; } } } for (int i = 2; i <= substrings.Length - (tmp.temp == 0 ? -1 : tmp.temp); i += 6) { if (tmp.Time.Contains(DateTime.Parse(substrings[i]))) { RemoveBarsIndex(tmp, tmp.Time.IndexOf(DateTime.Parse(substrings[i]))); } tmp.Time.Add(DateTime.Parse(substrings[i])); tmp.Open.Add(Double.Parse(substrings[i + 1], CultureInfo.InvariantCulture)); tmp.High.Add(Double.Parse(substrings[i + 2], CultureInfo.InvariantCulture)); tmp.Low.Add(Double.Parse(substrings[i + 3], CultureInfo.InvariantCulture)); tmp.Close.Add(Double.Parse(substrings[i + 4], CultureInfo.InvariantCulture)); tmp.Volume.Add(Double.Parse(substrings[i + 5], CultureInfo.InvariantCulture)); } if (tmp.temp > 0) { tmp.temp -= 6; } if (tmp.temp < 6) { Console.WriteLine("Stop"); Worker.StartStrategy(tmp); return; } Worker.StartStrategy(tmp); //Task.Run(() => //{ // DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + (temp.Count)); //}); tmp.ProcessType = "SendCommand"; } else { if (substrings[2] == "0") { temp.Count = Int32.Parse(substrings[3]); Task.Run(() => { Console.WriteLine("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); int tempCount = temp.Count - 1 > -1 ? temp.Count - 1 : 0; DataReception.SetQUIKCommandData(SW_Command, SR_FlagCommand, SW_FlagCommand, temp.ClassCod + ';' + temp.Name + ';' + temp.TimeFrame + ';' + (tempCount)); }); } else { for (int i = 3; i < substrings.Length - 1; i = i + 3) { temp.Time.Add(DateTime.Parse(substrings[i])); temp.Close.Add(Double.Parse(substrings[i + 1], CultureInfo.InvariantCulture)); temp.Volume.Add(Double.Parse(substrings[i + 2], CultureInfo.InvariantCulture)); } } } // temp.FlagAccess = true; mtx.ReleaseMutex(); }