Example #1
0
        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();
        }
Example #2
0
    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);
        }
    }
Example #3
0
        public MainForm()
        {
            InitializeComponent();

            AddItemToCb();

            data = new DataReception();
            Task.Run(() => {
                data.Start();
            });
        }
Example #4
0
        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();
            }
        }
Example #5
0
        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);
            });
        }
Example #6
0
        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;
        }
Example #7
0
        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();
        }
Example #8
0
 public FormAllSignal(DataReception data)
 {
     InitializeComponent();
     this.data = data;
 }
Example #9
0
 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;
     }
 }
Example #10
0
        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();
        }
Example #11
0
    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();
    }
Example #12
0
        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();
        }