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