Пример #1
0
        //DateTime.ParseExact(SLDecodedData[i], "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);

        
        public void UpdateAll(bool save = false)
        {
            
            string[] Pairs = ForexConfiguration.Products.ToArray();
            ServiceConfiguration.TimeFrame[] Frames = Enums.ToList<ServiceConfiguration.TimeFrame>().ToArray();


            for (int p = 0; p < Pairs.Length; p++)
            {
                string pair = Pairs[p];

                if (!ForexArchive.Data.ContainsKey(pair)) ForexArchive.Data.Add(pair, new ThreadedDictionary<ServiceConfiguration.TimeFrame, ThreadedDictionary<DateTime, Rate>>()); //Add missing Key before adding new values


                for (int f = 0; f < Frames.Length; f++)
                {
                    ServiceConfiguration.TimeFrame frame = Frames[f];

                    if (frame == ServiceConfiguration.TimeFrame.LIVE) continue;
                    if (!ForexArchive.Data[pair].ContainsKey(frame)) ForexArchive.Data[pair].Add(frame, new ThreadedDictionary<DateTime, Rate>()); //Add Missing Key before adding values


                    ThreadsUpdate.Run(() => this.Update(pair, frame), "UpdatePair" + pair + "Frame" + frame.ToString(), true, true);
                }

                ThreadsUpdate.JoinAll();
            }

           
            

            

            
        }
Пример #2
0
        private void UnloadRates(string pair, ServiceConfiguration.TimeFrame frame)
        {
            string path;

            lock (Locker.Get("GetPath")) path = this.GetPath(frame, pair);

            Rate[] Rates = Data[pair][frame].Values.ToArray();

            //Do not disassembly if no data is availible
            if (Rates == null || Rates.Length <= 0)
            {
                return;
            }

            StringBuilder builder = new StringBuilder();

            for (int i = 0; i < Rates.Length; i++)
            {
                Rate rate = Rates[i];
                builder.Append(ChartPointInfo.Serialize(rate.ChartData) + "$");//ToStringQuick()
            }

            byte[] bytes = Asmodat.IO.Compression.Zip(builder.ToString());

            lock (Locker.Get("DataDisassembler")) DataDisassembler.Add(path, bytes);
        }
Пример #3
0
        public void GetStatistics(string pair, ServiceConfiguration.TimeFrame frame, int span, double confidence, ref double max, ref double average, ref double min, ref double test)
        {
            double[][] data = GetMonteCarlo(pair, frame, span, Index);
            double[]   values;

            if (Objects.IsNullOrEmpty(data))
            {
                return;
            }

            values = Doubles.ToArray(data.ToArray(), span - 1, true, false);

            if (Objects.IsNullOrEmpty(values))
            {
                return;
            }

            average = values.Average();
            double change = AMath.StandarConfidence(values, average, confidence, false);

            max = average + change;
            min = average - change;

            double success = 0;

            for (int i = 1; i < Indexes.Length; i++)
            {
                var pack = GetMonteCarlo(pair, frame, span, Indexes[i]);
                if (pack == null)
                {
                    success = 0;
                    break;
                }

                double[][] packet = pack.ToArray();
                values = Doubles.ToArray(packet, span - 1, true, false);


                if (Objects.IsNullOrEmpty(values))
                {
                    success = 0;
                    break;
                }

                double avg = values.Average();
                double ch  = AMath.StandarConfidence(values, avg, confidence, false);
                double mx  = avg + ch;
                double mn  = avg - ch;


                double value = TestData[Indexes[i] + span];

                if (value >= mn && value <= mx)
                {
                    ++success;
                }
            }

            test = ((double)success / (Indexes.Length - 1)) * 100;
        }
Пример #4
0
        public static int ToPeriodsAccess(ServiceConfiguration.TimeFrame TimeFrame)
        {
            switch (TimeFrame)
            {
            case TimeFrame.LIVE: return(0);

            case TimeFrame.ONE_MINUTE: return(15750);    //45*350

            case TimeFrame.FIVE_MINUTE: return(10150);   //29*350 ~35 days

            case TimeFrame.TEN_MINUTE: return(8750);     //25*350 ~60 days

            case TimeFrame.FIFTEEN_MINUTE: return(8400); //24*350 ~85 days

            case TimeFrame.THIRTY_MINUTE: return(7700);  //22*350 ~160 days

            case TimeFrame.ONE_HOUR: return(7350);       //21*350 ~305 days

            case TimeFrame.TWO_HOUR: return(7350);       //21*350 ~605 days

            case TimeFrame.FOUR_HOUR: return(7350);

            case TimeFrame.DAILY: return(3850);   //11*350 ~10years

            case TimeFrame.WEEKLY: return(1050);  //3*350 ~15years

            case TimeFrame.MONTHLY: return(350);  //1*350~15years

            default: return(-1);
            }
        }
Пример #5
0
        /// <summary>
        /// This method returns all chartpoints based on pair nad frame values
        /// </summary>
        /// <param name="pair"></param>
        /// <param name="frame"></param>
        /// <returns></returns>
        public ChartPoint[] GetChartPoints(string pair, ServiceConfiguration.TimeFrame frame, int start = 0)
        {
            if (System.String.IsNullOrEmpty(pair) || !Data.ContainsKey(pair) || !Data[pair].ContainsKey(frame) || Data[pair][frame].Count <= 0)
            {
                return(new ChartPoint[0]);
            }


            Rate[] data  = Data[pair][frame].ValuesArray;
            int    count = data.Length;

            if (start >= count)
            {
                return(new ChartPoint[0]);
            }

            ChartPoint[] ACPoints = new ChartPoint[count - start];


            Parallel.For(start, count, i =>//KeyValuePair<DateTime, Rate> KVP = Data[pair][frame].ElementAt(i);
            {
                ACPoints[i - start] = data[i].ChartData;
            });

            return(ACPoints);
        }
Пример #6
0
        public void Update(ServiceConfiguration.TimeFrame TimeFrame, List <Rate> Rates)
        {
            if (Rates == null || Rates.Count <= 0)
            {
                return;
            }

            string pair;

            foreach (Rate Rate in Rates)
            {
                pair = Rate.Pair;
                if (!Data.ContainsKey(pair))
                {
                    Data.Add(pair, new ThreadedDictionary <ServiceConfiguration.TimeFrame, ThreadedDictionary <DateTime, Rate> >());
                }


                if (!Data[pair].ContainsKey(TimeFrame))
                {
                    Data[pair].Add(TimeFrame, new ThreadedDictionary <DateTime, Rate>());
                }

                Data[pair][TimeFrame].Add(Rate.DateTime, Rate);
            }

            LastUpdate = DateTime.Now;
        }
Пример #7
0
        public string GetChartData(string tokem, string pair, ServiceConfiguration.TimeFrame frame, DateTime DateStart, DateTime DateEnd, bool wait = false)
        {
            string packet = "";
            bool exception = false;
            AsmodatForex.com.efxnow.democharting.chartingservice.TimeFrame OriginFrame = ForexConfiguration.TimeFrames[frame];


            do
            {
                if (wait)
                {
                    Thread.Sleep(1);
                    if (!ForexAuthentication.Connected) continue;
                }

                try
                {
                    packet = CED_ChartingService.GetChartData(ForexAuthentication.Token, pair, OriginFrame, DateStart, DateEnd).Data;
                    exception = false;
                }
                catch(Exception Ex)
                {
                    exception = true;
                    if (!wait) throw Ex;
                }

            } while (exception);


            return packet;
        }
Пример #8
0
        public DateTime GetUpToDate(string pair, ServiceConfiguration.TimeFrame frame)
        {
            if (!UpToDate.ContainsKey(pair + frame))
            {
                UpToDate.Add(pair + frame, DateTime.MinValue);
            }

            return(UpToDate[pair + frame]);
        }
Пример #9
0
 public void SetUpToDate(string pair, ServiceConfiguration.TimeFrame frame, DateTime date)
 {
     if (!UpToDate.ContainsKey(pair + frame))
     {
         UpToDate.Add(pair + frame, date);
     }
     else
     {
         UpToDate[pair + frame] = date;
     }
 }
Пример #10
0
        /// <summary>
        /// Returns folder localisation for specified currency pair and time frame
        /// </summary>
        /// <param name="pair"></param>
        /// <param name="frame"></param>
        /// <returns></returns>
        private string GetFolder(ServiceConfiguration.TimeFrame frame)
        {
            string FolderFrame = DirectoryData + @"\" + frame;

            if (!Directory.Exists(FolderFrame))
            {
                Directory.CreateDirectory(FolderFrame);
            }

            return(FolderFrame);
        }
Пример #11
0
        /// <summary>
        /// This method returns last rate based on pair nad frame values
        /// </summary>
        /// <param name="pair"></param>
        /// <param name="frame"></param>
        /// <returns></returns>
        public Rate GetRate(string pair, ServiceConfiguration.TimeFrame frame)
        {
            if (System.String.IsNullOrEmpty(pair) || !Data.ContainsKey(pair) || !Data[pair].ContainsKey(frame) || Data[pair][frame].Count <= 0)
            {
                return(null);
            }

            Rate rate = Data[pair][frame].Last().Value;

            rate.Frame = frame;

            return(rate);
        }
Пример #12
0
        public void MonteCarlo(string pair, ServiceConfiguration.TimeFrame frame, int span, int tests)
        {
            if (Methods.Count >= tests + 1)
            {
                return;
            }


            Rate[] Rates = ForexArchive.Data.GetValuesArray <ServiceConfiguration.TimeFrame, DateTime, Rate>(pair, frame); //Manager.ForexArchive.Data[pair][ServiceConfiguration.TimeFrame.DAILY].ValuesArray;// //
            if (Objects.IsNullOrEmpty(Rates) || !ServiceConfiguration.IsSpan(frame))
            {
                return;
            }

            double[] data = Objects.ToArray <double>(RateInfo.Extract(Rates, RateInfo.Properties.CLOSE));
            TestData = data;

            Key = pair + frame + span;
            int[] points = AMath.Random(Rates.Length / 2, Rates.Length - 2 - span, tests);

            if (Objects.IsNullOrEmpty(points) && tests > 0)
            {
                return;
            }

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

            indexes.Add(data.Length - 1);
            if (points != null)
            {
                indexes.AddRange(points);
            }
            Indexes = indexes.ToArray();

            if (Objects.IsNullOrEmpty(Indexes))
            {
                return;
            }

            StopSimulations = false;


            foreach (int i in Indexes)
            {
                Methods.Run(() => this.MonteCarlo(data, Key + "idx" + i, span, i), Key + "idx" + i, true, false);
            }
        }
Пример #13
0
        public double[][] GetMonteCarlo(string pair, ServiceConfiguration.TimeFrame frame, int span, int index = -1)
        {
            if (index < 0)
            {
                index = Index;
            }

            string key = pair + frame + span + "idx" + index;


            var data = MonteCarloData.GetValue(key);

            if (Objects.IsNullOrEmpty(data))
            {
                return(null);
            }
            return(data.ValuesArray);
        }
Пример #14
0
        private string GetPath(ServiceConfiguration.TimeFrame frame, string pair)
        {
            string FolderFrame = DirectoryData + @"\" + frame;
            string path        = FolderFrame + @"\" + pair.Replace("/", "-") + FileDataExtention;

            if (!Directory.Exists(FolderFrame))
            {
                Directory.CreateDirectory(FolderFrame);
            }

            if (!File.Exists(path))
            {
                File.CreateText(path).Close();
            }



            return(path);
        }
Пример #15
0
        private void UpdateItemsPair()
        {
            if (Manager == null)
            {
                return;
            }

            string pair   = CmbxPair.Text;
            string sframe = CmbxTimeFrame.Text;

            if (System.String.IsNullOrEmpty(sframe) || !Manager.IsLoadedRate)
            {
                return;
            }


            ServiceConfiguration.TimeFrame frame = (ServiceConfiguration.TimeFrame)Enum.Parse(typeof(ServiceConfiguration.TimeFrame), sframe);

            List <string> Pairs = new List <string>();

            if (frame == ServiceConfiguration.TimeFrame.LIVE)
            {
                Pairs.AddRange(Manager.Service.Rates.Data.Keys);
            }
            else
            {
                Pairs.AddRange(Manager.Service.Archive.Data.Keys);
            }

            CmbxPair.Items.Clear();
            CmbxPair.Items.AddRange(Pairs.ToArray());

            if (System.String.IsNullOrEmpty(pair) || !Pairs.Contains(pair))
            {
                CmbxPair.SelectedIndex = 0;
            }
            else
            {
                CmbxPair.Text = pair;
            }
        }
Пример #16
0
        public void Update(string pair, ServiceConfiguration.TimeFrame frame)
        {
            List<DateTime> frames = this.GetMissingDates(pair, frame);
            if (frames.Count <= 1)
                return;

            //frames.Reverse();
            double dTimePeriod = ServiceConfiguration.ToMinutes(frame);

            //Decimals must be backchecked with number of decimals in order to set correct value;
            int decimals = ForexConfiguration.GetDecimals(pair);

            string data = "";
            for (int i = 0; i < frames.Count - 1; i++)
            {
                DateTime DateStart = frames[i + 1];
                DateTime DateEnd = frames[i];

                Thread.Sleep(1); //Wait not to spam the server with requests
                string packet = this.GetChartData(ForexAuthentication.Token, pair, frame, DateStart, DateEnd, true); //fresh data cames first

                if (!System.String.IsNullOrEmpty(packet))
                    data = data + "$" + packet;
            }

            List<Rate> Rates;
            if (!System.String.IsNullOrEmpty(data))
                Rates = this.DecodeRates(pair, data); //Data is sorted by threaded dictionary
            else Rates = new List<Rate>();


            foreach (Rate rate in Rates)
            {
                if (ForexArchive.Data[pair][frame].ContainsKey(rate.DateTime)) continue;
                
                ForexArchive.Data[pair][frame].Add(rate.DateTime, rate);
                ++ForexArchive.Updates;
            }
        }
Пример #17
0
        private SplitOptions ToSplitOption(ServiceConfiguration.TimeFrame frame)
        {
            if (frame <= ServiceConfiguration.TimeFrame.LIVE)
            {
                return(SplitOptions.Daily);
            }
            else if (frame <= ServiceConfiguration.TimeFrame.THIRTY_MINUTE)
            {
                return(SplitOptions.Monthly);
            }
            else if (frame <= ServiceConfiguration.TimeFrame.FOUR_HOUR)
            {
                return(SplitOptions.Yearly);
            }
            else if (frame > ServiceConfiguration.TimeFrame.FOUR_HOUR)
            {
                return(SplitOptions.AllTimes);
            }


            throw new Exception("Unknown frame option");
        }
Пример #18
0
        /// <summary>
        /// This method loads specified pair-frame data from file in hard drive
        /// </summary>
        /// <param name="pair"></param>
        /// <param name="frame"></param>
        private void LoadRates(string pair, ServiceConfiguration.TimeFrame frame)
        {
            if (DataAssembler.ContainsKey(frame) && DataAssembler[frame].ContainsKey(pair))
            {
                Dictionary <DateTime, Rate> Rates = RateInfo.ParseRates(DataAssembler[frame][pair]);

                if (Rates == null || Rates.Count <= 0)
                {
                    return;
                }

                this.Data[pair][frame].AddRange(Rates);
                lock (Locker.Get("DataAssembler")) SetUpToDate(pair, frame, this.Data[pair][frame].Keys.Last());

                /*
                 * string data;
                 * lock (Locker.Get("DataAssembler")) data = DataAssembler[frame][pair];//.ToString();
                 * Dictionary<DateTime, Rate> Rates = RateInfo.ParseRates(data);
                 * this.Data[pair][frame].AddRange(Rates);
                 * lock (Locker.Get("DataAssembler")) SetUpToDate(pair, frame, this.Data[pair][frame].Keys.Last());
                 */
            }
        }
Пример #19
0
        private void Peacemaker()
        {
            if (!IsFeed || !Manager.IsLoadedRate)
            {
                return;
            }


            string pair = this.Pair;

            ServiceConfiguration.TimeFrame frame = this.Frame;
            int    span       = this.Span;
            double confidence = this.Confidecne;
            int    tests      = TTbxBacktests.GetInt(this);

            Rate[] Rates = Manager.ForexArchive.Data.GetValuesArray <ServiceConfiguration.TimeFrame, DateTime, Rate>(pair, frame); //Manager.ForexArchive.Data[pair][ServiceConfiguration.TimeFrame.DAILY].ValuesArray;// //


            // TTbxMax.dec


            if (Objects.IsNullOrEmpty(Rates) || !ServiceConfiguration.IsSpan(frame))
            {
                return;
            }



            Manager.ForexAnalysis.MonteCarlo(pair, frame, span, tests);


            double[][] MonteCarloData = Manager.ForexAnalysis.GetMonteCarlo(pair, frame, span, -1);
            if (Objects.IsNullOrEmpty(MonteCarloData))
            {
                Chart.Main.ClearSeries(this);
                return;
            }

            double[]   data  = Objects.ToArray <double>(RateInfo.Extract(Rates, RateInfo.Properties.CLOSE));
            DateTime[] dates = Objects.ToArray <DateTime>(RateInfo.Extract(Rates, RateInfo.Properties.DateTime));


            double Min  = 0;
            double Avg  = 0;
            double Max  = 0;
            double Test = 0;

            Manager.ForexAnalysis.GetStatistics(pair, frame, span, confidence, ref Max, ref Avg, ref Min, ref Test);

            this.SetOutputStatistic(pair, Max, Avg, Min);
            TTbxBacktestConfidence.SetValue(this, Test);
            TTbxBacktestSamples.SetValue(this, Manager.ForexAnalysis.MonteCarloBacktestSamples);

            double[] next = MonteCarloData.Last();// MonteCarloSimulation.Next(data, 50).ToArray();
            if (next == null)
            {
                return;
            }

            TTbxTestSamples.SetValue(this, MonteCarloData.Length);

            List <double> combine = new List <double>();

            combine.AddRange(data);
            combine.AddRange(next);

            if (Chart.Main.Series.Count <= 0 || Chart.Main.Series[0].Name != pair || Chart.Main.ID != frame + pair + span + tests)
            {
                Chart.Main.ID = frame + pair + span + tests;
                Chart.Main.ClearSeries(this);
                Chart.Main.Add(pair, SeriesChartType.Line, this);
                DataPoint[] points = ChartPointInfo.ToDataPoints(data, dates, ServiceConfiguration.Span(frame));
                Chart.Main.AddRange(this, pair, points, ChartValueType.DateTime, ChartValueType.Double);
            }
            else
            {
                DataPoint[] points = ChartPointInfo.ToDataPoints(next, dates.Last(), ServiceConfiguration.Span(frame));
                Chart.Main.UpdateRange(this, pair, points, ChartValueType.DateTime, ChartValueType.Double);
            }
        }
Пример #20
0
        /// <summary>
        /// This method searches and returns missing time periods in DateTime list in archive data.
        /// This data is stored in UTC format
        /// </summary>
        /// <param name="pair"></param>
        /// <param name="TimeFrame"></param>
        public List<DateTime> GetMissingDates(string pair, ServiceConfiguration.TimeFrame TimeFrame)
        {
            double dTimePeriod = ServiceConfiguration.ToMinutes(TimeFrame);
            int iPeriodMultiplayer = 350; //This value defines time span between values inside list
            int iMaxPeriods = ServiceConfiguration.ToPeriodsAccess(TimeFrame); //Maximum periods of data that are avalaible for download
            List<DateTime> Data = ForexArchive.Data[pair][TimeFrame].Keys.ToList();// .SortedKeys;
            List<DateTime> DataMissing = new List<DateTime>();
            int iDataCount = Data.Count;

            if (dTimePeriod <= 0) throw new Exception("This time period is not vaild.");

            DateTime CurrentDate = LatestMarketOppened;
            DateTime EndDate;
            if (Data.Count <= 0)
                EndDate = DateTime.UtcNow.AddMinutes(-dTimePeriod * iMaxPeriods);
            else EndDate = Data.Max();

            DataMissing.Add(CurrentDate);

            do
            {
                DateTime DateChangeStart = CurrentDate;

                do
                    CurrentDate = CurrentDate.AddMinutes(-1);
                while ((DateChangeStart - CurrentDate).TotalMinutes < iPeriodMultiplayer * dTimePeriod);//Continue while period change is less then multiplayer

                if (CurrentDate >= EndDate)
                {
                    //CurrentDate = FutureMarketOppened(CurrentDate);
                    DataMissing.Add(CurrentDate);
                }
                else
                {
                    DataMissing.Add(EndDate);
                    break;
                }


            } while (CurrentDate > EndDate);


            DateTime[] DateArray = DataMissing.ToArray();

            //remove spare data
            if (DateArray != null)
            for (int i = 1; i < DateArray.Length - 1; )
            {
                DateTime last = DateArray[i - 1];
                DateTime current = DateArray[i];
                DateTime future = DateArray[i + 1];
                bool lastClosed = !IsMarketOppened(last);
                bool currentClosed = !IsMarketOppened(current);
                bool futureCloased = !IsMarketOppened(future);


                if (lastClosed && currentClosed && futureCloased)
                    DataMissing.Remove(current);
                if ((currentClosed && futureCloased && i + 1 == DateArray.Length - 1))
                    DataMissing.Remove(future);

                ++i;
            }

            if (DataMissing.Count <= 1 || DataMissing.Last() >= DataMissing.First())
                return new List<DateTime>();

            return DataMissing;
        }