public static List <News> Load(string path, IStrategyLogger stategyLogger) { List <News> retList = new List <News>(); if (!File.Exists(path)) { throw new ApplicationException("Can`t find news file. Path " + path); } using (StreamReader strReader = new StreamReader(path)) { DateTime lastDateTime = DateTime.MinValue; while (strReader.Peek() >= 0) { string currNews = strReader.ReadLine().Trim(); if (currNews.Length == 0) { continue; } News lastNews = News.ParseFromFile(currNews, ref lastDateTime, stategyLogger); retList.Add(lastNews); } } return(retList); }
public bool TesterInit(StrategyParameter param, IStrategyLogger logger) { TestingMode = true; this.param = param; this.logger = logger; return(true); }
internal override void OnRemmoteAdvisorInit(RemoteAdvisor rmAdviser) { try { Meta = rmAdviser; ForexAPI fAPI = new ForexAPI(Meta, rmAdviser.MagicNumber); OrderOperation = fAPI; Account = fAPI; History = fAPI; this.Symbol = rmAdviser.Symbol(); if (this.param != null) { throw new ApplicationException("Param was initalized"); } this.param = new StrategyParameter(); foreach (string paramKey in rmAdviser.Parameters.Keys) { if (paramKey == "NewsFilePath") { this.param.NewsFilePath = rmAdviser.Parameters[paramKey]; continue; } if (paramKey.EndsWith("String")) { this.param.Add(paramKey, rmAdviser.Parameters[paramKey]); continue; } if (paramKey == "InvertedMetaStrategy") { rmAdviser.IsInverted = rmAdviser.Parameters[paramKey] == "1" || rmAdviser.Parameters[paramKey] == "true"; continue; } this.param[paramKey] = Int32.Parse(rmAdviser.Parameters[paramKey]); } this.logger = new MetaStrategyLogger(Meta); onStart(0); this.Meta.Print("onStart finidshed successfully"); } catch (Exception exc) { string excString = "Start up exception: " + exc.ToString(); Meta.Comment(excString); Meta.Print(excString); } }
protected static News ParseFromFile(string str, ref DateTime lastDateTime, IStrategyLogger stategyLogger) { try { string regex = "[\"][^\"]*[\"] | [^,]*"; RegexOptions options = ((System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace | System.Text.RegularExpressions.RegexOptions.Multiline) | System.Text.RegularExpressions.RegexOptions.IgnoreCase); Regex reg = new Regex(regex, options); string[] strTokens = (from c in reg.Matches(str).OfType <Match>() select c.Value).ToArray(); strTokens[0] = strTokens[0].Replace("\"", "").Trim(); News n = new News(); n.currency = strTokens[2].Trim(); if (strTokens.Count() > 4) { n.Desription = strTokens[4].Trim(); } bool result = DateTime.TryParseExact(strTokens[0], "yyyy.MM.dd HH:mm GMT", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out n.DateTime); if (result) { lastDateTime = n.DateTime; } else { throw new ApplicationException(string.Format("Can`t parse date: {0}", str)); } n.Importance = ConvertStringToNewsImportance(strTokens[6].Trim()); n.Actual = strTokens[8].Trim(); n.Forecast = strTokens[10].Trim(); n.Previous = strTokens[12].Trim(); return(n); } catch (Exception exc) { throw new ApplicationException("Can`t parse news: " + str, exc); } }
public SuperAdaptStrategy(StrategyParameter param, IStrategyLogger logger) { this.logger = logger; this.param = param; this.logger.AddMessage("Start strategy with parameter {0}", param.ToString()); }
public GreatStrategy(Parameters param, IStrategyLogger logger) { this.param = param; this.logger = logger; }
public CasinoStrategy(CasinoParameters param, IStrategyLogger logger) { this.param = param; this.logger = logger; }
public SuperStrategy(SuperParametersCollection param, IStrategyLogger logger) { this.logger = logger; this.param = param; this.logger.AddMessage("Start strategy with parameter {0}", param.ToString()); }
public SuperStrategy(StrategyParameter param, IStrategyLogger logger) { TestingMode = true; this.logger = logger; this.param = param; }
private void LoadNews(IStrategyLogger stategyLogger) { List <string> currencyList = GetCurrenciesFromSymbol(Symbol); List <News> allNewsCollection = News.Load(NewsPath, stategyLogger); if (stategyLogger != null) { stategyLogger.AddMessage("{0} news were loaded.", allNewsCollection.Count); } List <TimeRange> timeRangeNewsCollection = new List <TimeRange>(); List <TimeRange> timeRangeHolidayCollection = new List <TimeRange>(); int gmt = IsCacheNews ? 0 : this.GMT; foreach (News currNews in allNewsCollection) { //if (stategyLogger != null) // stategyLogger.AddMessage("{0}, {1}", currNews.currency.ToLower(), currNews.Importance.ToString()); if (currencyList.Contains(currNews.currency.ToLower()) && currNews.Importance == NewsImportance.High) { timeRangeNewsCollection.Add(new TimeRange(currNews.DateTime.AddMinutes(-MinutesBefore), currNews.DateTime.AddMinutes(MinutesAfter), currNews.Desription)); } } DateTime firstDate = timeRangeNewsCollection.Count > 0 ? timeRangeNewsCollection[0].StartDateTime.Date : DateTime.Now.Date.AddYears(-1); DateTime lastDate = timeRangeNewsCollection.Count > 0 ? timeRangeNewsCollection[timeRangeNewsCollection.Count - 1].EndDateTime.Date : DateTime.Now.Date.AddYears(-1).AddDays(1); while (firstDate.DayOfWeek != DayOfWeek.Saturday) { firstDate = firstDate.AddDays(-1); } while (lastDate.DayOfWeek != DayOfWeek.Saturday) { lastDate = lastDate.AddDays(1); } DateTime iteratorDateTime = firstDate; while (iteratorDateTime <= lastDate) { if (iteratorDateTime.DayOfWeek == DayOfWeek.Saturday) { timeRangeHolidayCollection.Add(new TimeRange(iteratorDateTime.AddHours(-gmt).AddMinutes(-MinutesBefore), iteratorDateTime.AddHours(-gmt).AddMinutes(MinutesAfter), "DayOfWeek.Saturday")); } if (iteratorDateTime.DayOfWeek == DayOfWeek.Sunday) { timeRangeHolidayCollection.Add(new TimeRange(iteratorDateTime.AddDays(1).AddHours(-gmt).AddMinutes(-MinutesBefore), iteratorDateTime.AddDays(1).AddHours(-gmt).AddMinutes(MinutesAfter), "DayOfWeek.Sunday")); } iteratorDateTime = iteratorDateTime.AddDays(1); } int iterNews = 0; int iterHolidays = 0; for (int i = 0; i < timeRangeHolidayCollection.Count + timeRangeNewsCollection.Count; i++) { if (iterNews >= timeRangeNewsCollection.Count) { timeRangeCollection.Add(timeRangeHolidayCollection[iterHolidays++]); continue; } if (iterHolidays >= timeRangeHolidayCollection.Count) { timeRangeCollection.Add(timeRangeNewsCollection[iterNews++]); continue; } if (timeRangeHolidayCollection[iterHolidays].StartDateTime < timeRangeNewsCollection[iterNews].StartDateTime) { timeRangeCollection.Add(timeRangeHolidayCollection[iterHolidays++]); } else { timeRangeCollection.Add(timeRangeNewsCollection[iterNews++]); } } if (stategyLogger != null) { foreach (TimeRange currTimeRange in timeRangeCollection) { stategyLogger.AddMessage("{0} - {1}, {2}", currTimeRange.StartDateTime, currTimeRange.EndDateTime, currTimeRange.Description); } } }
public NewsPeriods(string newsPath, int minutesBefore, int minutesAfter, string symbol, bool isCacheNews, int gmt, IStrategyLogger stategyLogger) { this.NewsPath = newsPath; this.MinutesBefore = minutesBefore; this.MinutesAfter = minutesAfter; this.Symbol = symbol; this.IsCacheNews = isCacheNews; this.GMT = gmt; stategyLogger.AddMessage("Start load news with the following parameters:"); stategyLogger.AddMessage("NewsPath={0}", this.NewsPath); stategyLogger.AddMessage("MinutesBefore={0}", this.MinutesBefore); stategyLogger.AddMessage("MinutesAfter={0}", this.MinutesAfter); stategyLogger.AddMessage("Symbol={0}", this.Symbol); stategyLogger.AddMessage("GMT={0}", this.GMT); try { LoadNews(null); } catch (Exception exc) { stategyLogger.AddMessage(exc.ToString()); throw; } }