Beispiel #1
0
        /// <summary>
        /// @"Token\Pair\BID\OFFER\HIGH\LOW\STATUS\NOTATION\DECIMALS\CLOSINGBID", @"\");
        /// </summary>
        /// <param name="data"></param>
        /// <param name="dateTimeFormat"></param>
        /// <returns></returns>
        public Rate ToRateOnConnect(string data, ref TickTime origin)
        {
            if (System.String.IsNullOrEmpty(data) || data.Length < 10)
            {
                return(null);
            }

            //Ignore token, might be corrupted
            string[] properties = Asmodat.Abbreviate.String.ToList(data, "\\");
            if (properties.Length != 10)
            {
                return(null);
            }


            string status   = properties[6];
            string notation = properties[7];

            if (status != "D" && status != "R")
            {
                return(null);
            }

            if (notation != "E" && notation != "A")
            {
                return(null);
            }

            Rate rate = new Rate();

            try
            {
                rate.Pair       = properties[1];
                rate.DECIMALS   = ForexConfiguration.GetDecimals(rate.Pair);
                rate.BID        = Doubles.Parse(properties[2], rate.DECIMALS);
                rate.OFFER      = Doubles.Parse(properties[3], rate.DECIMALS);
                rate.HIGH       = Doubles.Parse(properties[4], rate.DECIMALS);
                rate.LOW        = Doubles.Parse(properties[5], rate.DECIMALS);
                rate.STATUS     = status;
                rate.NOTATION   = notation;
                rate.CLOSINGBID = Doubles.Parse(properties[8], rate.DECIMALS);

                rate.ChartData.TickTime = (origin += 1);


                //backtest
                double pchange = RateInfo.ChangePercentage(rate.BID, rate.OFFER, rate.HIGH, rate.LOW);
                if (pchange < 25)
                {
                    return(null);
                }
            }
            catch (Exception e)
            {
                Exceptions.Add(e);
                return(null);
            }

            return(rate);
        }
Beispiel #2
0
        /// <summary>
        /// @"DateTime\OPEN\HIGH\LOW\CLOSE"
        /// Example: "2/18/2015 5:45:00 PM\\119.220\\119.228\\119.220\\119.227"
        /// DateTime.ParseExact(SLDecodedData[i], "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
        /// separator - \\
        /// </summary>
        /// <param name="data"></param>
        /// <param name="decimals"></param>
        /// <returns></returns>
        public Rate ToRateChartData(string pair, string data, int decimals)
        {
            if (System.String.IsNullOrEmpty(data) || data.Length < 5)
            {
                return(null);
            }

            string[] properties = Asmodat.Abbreviate.String.ToList(data, "\\");

            if (properties.Length != 5)
            {
                throw new Exception("ServiceCharting.DecodeRates Amount of separators don't match Rate Format !");
            }

            if (Asmodat.Abbreviate.String.IsNullOrEmpty(properties))
            {
                throw new Exception("ServiceCharting.DecodeRates Amount properties cannot be null !");
            }

            Rate rate = new Rate();

            try
            {
                rate.Pair     = pair;
                rate.DateTime = DateTime.ParseExact(properties[0], "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
                //"4/3/2015 12:00:00 AM\\16.76\\17.058\\16.683\\17.033"
                rate.OPEN  = Doubles.Parse(properties[1], decimals);
                rate.HIGH  = Doubles.Parse(properties[2], decimals);
                rate.LOW   = Doubles.Parse(properties[3], decimals);
                rate.CLOSE = Doubles.Parse(properties[4], decimals);

                //backtest
                double pchange = RateInfo.ChangePercentage(rate.OPEN, rate.HIGH, rate.LOW, rate.CLOSE);


                if (pchange < 1.5)
                {
                    return(null);
                }

                if (pchange < 25)
                {
                    pchange = 25;
                }
            }
            catch (Exception e)
            {
                Exceptions.Add(e);
                return(null);
            }
            return(rate);
        }
Beispiel #3
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);
            }
        }
Beispiel #4
0
        private double FixIt(Rate current_rate, double previous, double current)
        {
            //int ptl = Math.Truncate(previous).ToString().Length;
            //int ctl = Math.Truncate(current).ToString().Length;
            int    decimals = current_rate.DECIMALS;
            double pchange  = RateInfo.ChangePercentage(previous, current);



            if (pchange < 25)//ptl > ctl + 1 ||
            {
                //double parse = Doubles.Parse(value, decimals);

                return(current);
            }

            return(current);
        }
Beispiel #5
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());
                 */
            }
        }
Beispiel #6
0
        /// <summary>
        /// Converts string data into Rate property
        /// Example rate: "EUR/USD\\1.17684\\1.17701\\D\\1.18485\\1.17619\\5\\A\\1.18385\\EUR/USD\\EUR/USD$"
        /// Example data: "Pair\BID\OFFER\STATUS\HIGH\LOW\DECIMALS\NOTATION\CLOSINGBID\CONTRACTPAIR\COUNTERPAIR$"
        ///              @"Pair\BID\OFFER\STATUS\HIGH\LOW\DECIMALS\NOTATION\CLOSINGBID\CONTRACTPAIR\COUNTERPAIR\DateTime\Token\OPEN\CLOSE", @"\");
        /// </summary>
        /// <param name="getRateString">Sting formattes as: Pair\BID\OFFER\STATUS\HIGH\LOW\DECIMALS\NOTATION\CLOSINGBID\CONTRACTPAIR\COUNTERPAIR$ without $ char</param>
        /// <returns>Rate based on string input.</returns>
        private Rate ToRate(string data, ref TickTime origin)
        {
            if (System.String.IsNullOrEmpty(data) || data.Length < 11)
            {
                return(null);
            }

            data = data.Replace("$", "");


            string[] properties = Asmodat.Abbreviate.String.ToList(data, "\\");
            if (properties.Length != 11)
            {
                return(null);
            }

            string status   = properties[3];
            string notation = properties[7];

            if (status != "D" && status != "R")
            {
                return(null);
            }

            if (notation != "E" && notation != "A")
            {
                return(null);
            }


            Rate rate = new Rate();

            try
            {
                rate.Pair     = properties[0];
                rate.DECIMALS = int.Parse(properties[6]);

                if (rate.DECIMALS != ForexConfiguration.GetDecimals(rate.Pair))
                {
                    return(null);
                }

                rate.BID      = Doubles.Parse(properties[1], rate.DECIMALS);
                rate.OFFER    = Doubles.Parse(properties[2], rate.DECIMALS);
                rate.STATUS   = status;
                rate.NOTATION = notation;
                //rate.HIGH = Doubles.Parse(properties[4], rate.DECIMALS);
                //rate.LOW = Doubles.Parse(properties[5], rate.DECIMALS);
                //rate.CLOSINGBID = Doubles.Parse(properties[8], rate.DECIMALS);
                //rate.CONTRACTPAIR = properties[9];
                //rate.COUNTERPAIR = properties[10];

                rate.ChartData.TickTime = (origin += 1);

                //backtest
                double pchange = RateInfo.ChangePercentage(rate.BID, rate.OFFER);
                if (pchange < 25)
                {
                    return(null);
                }
            }
            catch (Exception e)
            {
                Exceptions.Add(e);
                return(null);
            }
            return(rate);
        }
Beispiel #7
0
        /// <summary>
        /// @"Token\BID\OFFER\\\\\"
        /// "R27\\89.514\\89.549\\D\\\\\\02/19/2015 09:25:55\\"
        /// TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"));
        /// </summary>
        /// <param name="data"></param>
        /// <param name="dateTimeFormat"></param>
        /// <returns></returns>
        public Rate ToRateOnChange(string data, ref TickTime origin)
        {
            if (System.String.IsNullOrEmpty(data) || data.Length < 7)
            {
                return(null);
            }

            char cMessageType = data[0];

            if (!Char.IsLetter(cMessageType))
            {
                return(null);                          //This is not RateChange frame
            }
            data = data.Substring(1, data.Length - 1); //Remove Message Type Rate

            string[] properties = Asmodat.Abbreviate.String.ToList(data, "\\");
            if (properties.Length != 7)
            {
                return(null);
            }

            string status = properties[3];

            if (status != "D" && status != "R")
            {
                return(null);
            }

            Rate rate = new Rate();

            try
            {
                rate.Token    = int.Parse(properties[0]);
                rate.Pair     = ForexConfiguration.OrderPair[rate.Token];
                rate.DECIMALS = ForexConfiguration.GetDecimals(rate.Pair);



                rate.BID    = Doubles.Parse(properties[1], rate.DECIMALS);
                rate.OFFER  = Doubles.Parse(properties[2], rate.DECIMALS);
                rate.STATUS = status;

                rate.ChartData.TickTime = (origin += 1);

                //backtest
                double pchange = RateInfo.ChangePercentage(rate.BID, rate.OFFER);
                if (pchange < 50)
                {
                    return(null);
                }
            }
            catch (Exception e)
            {
                Exceptions.Add(e);
                return(null);
            }



            return(rate);
        }