public void GetTransformedPositionRecordsTest()
        {
            FXEntities.FXEntities fxEntities = new FXEntities.FXEntities();
            CurrencyDataSource currencyDataSource = new CurrencyDataSource(fxEntities);
           
            var startDate = new DateTime(2000, 1, 4);
            var endDate = new DateTime(2003, 1, 4);
            var periodicTimeDef = new PeriodicTimeDefinition(3, PeriodicType.Month);
            periodicTimeDef.Initialize(startDate, endDate);
            ProfitCalculationEngine_Accessor target = new ProfitCalculationEngine_Accessor(currencyDataSource);

            PositionRuntime positionRuntime = new PositionRuntime(FXStrategy.Interpreter.PositionType.Long);
            positionRuntime.PositionRecords.Add(new PositionRecord(
                new DateTime(2000, 1, 4), new Currency("USD"), new Currency("EUR"),
                 FXStrategy.Interpreter.PositionType.Long, positionRuntime)
                 {
                     EndDate = new DateTime(2001,3,2)
                 });

            //var actual = target.GetTransformedPositionRecords(positionRuntime, periodicTimeDef);

            //Assert.AreEqual(actual.Count, 6);
            //Assert.IsTrue(actual.ElementAt(5).Type == FXStrategy.Interpreter.PositionType.Short);
            //Assert.IsTrue(actual.Take(5).All(t => t.Type == FXStrategy.Interpreter.PositionType.Long));
        }
        public CurrencyDataSource(FXEntities.FXEntities fxEntities)
        {
            _fxEntities = fxEntities;

            _exRateAdapter = new ExchangeRateAdapter(_fxEntities);
            _inRateAdapter = new InterestRateAdapter(_fxEntities);
            _currencyPairDataTable = new Dictionary<Tuple<string, string>, CurrencyPairData>();
            _currencyNameInterestRateTable = new Dictionary<string, TimeSeriesCollection<InterestRate>>();
        }
 public void GetCurrencyNamesSortByInRateTest()
 {
     FXEntities.FXEntities fxEntities = new FXEntities.FXEntities();
     Currency baseCurrency = new Currency("EUR"); // TODO: Initialize to an appropriate value
     CurrencyDataSource target = new CurrencyDataSource(fxEntities); // TODO: Initialize to an appropriate value
     IEnumerable<string> actual;
     actual = target.GetCurrencyNameOrderByInterestRate(new DateTime(2000,1,7)).Reverse();
     Assert.IsTrue(actual.ElementAt(0) == "GBP");
     Assert.IsTrue(actual.ElementAt(1) == "USD");
     Assert.IsTrue(actual.ElementAt(2) == "NOK");
     Assert.IsTrue(actual.ElementAt(3) == "NZD");
     Assert.IsTrue(actual.ElementAt(4) == "AUD");
     Assert.IsTrue(actual.ElementAt(5) == "CAD");
     Assert.IsTrue(actual.ElementAt(6) == "SEK");
     Assert.IsTrue(actual.ElementAt(7) == "EUR");
     Assert.IsTrue(actual.ElementAt(8) == "CHF");
     Assert.IsTrue(actual.ElementAt(9) == "JPY");
 }
 public StrategyAnalyzer()
 {
     var fxEntities = new FXEntities.FXEntities();
     _currencyDataSource = new CurrencyDataSource(fxEntities);
     _currencyDataSource.PreLoad();
 }
 public void Top3CurrenciesConstructorTest()
 {
     FXEntities.FXEntities fxEntities = new FXEntities.FXEntities();
     Currency baseCurrency = new Currency("EUR");; // TODO: Initialize to an appropriate value
     CurrencyDataSource currencyDataSource = new CurrencyDataSource(fxEntities);
     
     Top3Currencies target = new Top3Currencies(currencyDataSource, baseCurrency);
     var result = target.GetCurrencies(new DateTime(2000, 1, 7));
     Assert.IsTrue(result.Any(r => r == "USD"));
     Assert.IsTrue(result.Any(r => r == "GBP"));
     Assert.IsTrue(result.Any(r => r == "NOK"));
 }
        public void ExchangeRateAccessorTest()
        {

            TradingStrategy tradingStrategy = new TradingStrategy()
            {
                ConstantVariableDefinitions = new System.Collections.Generic.List<GlobalIdentifier>(){
                     new GlobalIdentifier(){ 
                         Variable = new Variable("reEntryExRatePercent", typeof(int)),
                         Constant = new Constant(typeof(decimal),0.05)},
                    new GlobalIdentifier(){ 
                         Variable = new Variable("noOfLongPosition",typeof(int)),
                         Constant = new Constant(typeof(int),3)},
                    new GlobalIdentifier(){ 
                         Variable = new Variable("noOfShortPosition",typeof(int)),
                         Constant = new Constant(typeof(int),3)}
                 },
                Portfolio = new Portfolio()
                {
                    HomeCurrency = "EUR",
                    PositionSets = new List<PositionSet>()
                    {
                        new PositionSet(){
                             Name = "LongPositions", Number = new Variable("noOfLongPosition",typeof(int)), PositionType = FXStrategy.MetaModel.PositionType.Long
                        },
                        new PositionSet(){
                            Name = "ShortPositions", Number = new Variable("noOfShortPosition", typeof(int)), PositionType = FXStrategy.MetaModel.PositionType.Short
                        }
                    }
                },

                TradingRules = new System.Collections.Generic.List<TradingRule>()
                {
                    new TradingRule("test", new ConcreteTimeDefinition(){
                         ExecuteTime = new DateTime(2006,1,30)
                    },
                     new Assignment(
                        new Variable("exRateMVG", typeof(decimal)),
                        new AtTime(
                        new ExchangeRateAccessor(
                            new Constant(typeof(string), "EUR"),
                            new Constant(typeof(string), "USD"))
                            ,
                            new Constant(typeof(DateTime), new DateTime(2006,1,30)))))
                }
            };

            FXEntities.FXEntities fxEntities = new FXEntities.FXEntities();
             CurrencyDataSource currencyDataSource = new CurrencyDataSource(fxEntities);
            StrategyInterpreter target = new StrategyInterpreter(fxEntities, currencyDataSource);
             DateTime startDate = new DateTime(2006, 1, 29);
            DateTime endDate = new DateTime(2006, 1, 31);
            target.Execute(tradingStrategy, startDate, endDate);


        }
        public void ExecutionTimeTest()
        {
            TradingStrategy tradingStratgy = ConstructTradingStrategy();

            FXEntities.FXEntities fxEntities = new FXEntities.FXEntities();
            CurrencyDataSource currencyDataSource = new CurrencyDataSource(fxEntities);
            currencyDataSource.PreLoad();
            StrategyInterpreter target = new StrategyInterpreter(fxEntities, currencyDataSource);
            DateTime startExecutionTime;
            DateTime endExecutionTime;
            DateTime startDate = new DateTime(2000, 1, 1);
            List<List<double>> results = new List<List<double>>();
            StringBuilder output = new StringBuilder();
            for (int j = 0; j < 10; j++)
            {
                results.Add(new List<double>());
                output.AppendLine("Run no.: " + j);
                for (int i = 0; i < 11; i++)
                {
                    startExecutionTime = DateTime.Now;
                    target.Execute(tradingStratgy, startDate, startDate.AddYears(i + 1));
                    endExecutionTime = DateTime.Now;
                    results[j].Add((endExecutionTime - startExecutionTime).TotalMilliseconds);
                    output.AppendLine(String.Format("Execution time: {0}ms, Number of positionRecord: {1} ",
                        (endExecutionTime - startExecutionTime).TotalMilliseconds,
                        target.PositionSetTable.Sum(p => p.Value.Positions.SelectMany(pos => pos.PositionRecords).Count()
                        )
                        ));
                    target.Clear();

                    //results.Add(endExecutionTime - startExecutionTime);
                }
                output.AppendLine();
            }

            output.AppendLine("Average: ");
            for (int i = 0; i < 10; i++)
            {
                output.AppendLine( (i+1) + " Year: \t" + results.Select(r => r.ElementAt(i)).Average());
            }


            using (StreamWriter writer = new StreamWriter(@"D:\Documents\Study Materials\Master Thesis\Main Thesis\executionTime.txt"))
            {
                
                //for (int i = 1; i <= 10; i++)
                //{
                //    output += String.Format(results[i - 1].Milliseconds + " ms \n");
                //}

                writer.WriteLine(output);
            }

            
        }
        public void CalculationTest()
        {
            FXEntities.FXEntities fxEntities = new FXEntities.FXEntities();
            CurrencyDataSource currencyDataSource = new CurrencyDataSource(fxEntities);
            StrategyInterpreter target = new StrategyInterpreter(fxEntities, currencyDataSource);
            TradingStrategy tradingStrategy = ConstructTradingStrategy();

            DateTime startDate = new DateTime(2000, 1, 4);
            DateTime endDate = new DateTime(2002, 1, 1);
            target.Execute(tradingStrategy, startDate, endDate);

            ProfitCalculationEngine calEngine = new ProfitCalculationEngine(
                currencyDataSource
                );

            calEngine.Evaluate(target.PositionSetTable["ShortPositions"].Positions,
                startDate,
                endDate, new PeriodicTimeDefinition(3, PeriodicType.Month)
                );
            //calEngine.Analyze(target.PositionSetTable["LongPositions"].Positions
            //    .Union(target.PositionSetTable["ShortPositions"].Positions).ToList(),
            //    startDate, 
            //    endDate, new PeriodicTimeDefinition(3, PeriodicType.Month)
            //    );

            List<TimeSeriesData> returnOverTime = calEngine.ReturnOverTime;
            string dest = @"C:\temp\ReturnOverTime.txt";

            WriteToFile(returnOverTime, dest);

            WriteToFile(calEngine.IndexOverTime, @"C:\temp\IndexOverTime.txt");
        }
 public void GetCurrenciesTest1()
 {
     Currency baseCurrency = new Currency("EUR");
     FXEntities.FXEntities fxEntities = new FXEntities.FXEntities();
     CurrencyDataSource currencyDataSource = new CurrencyDataSource(fxEntities); // TODO: Initialize to an appropriate value
     Bottom3Currencies target = new Bottom3Currencies(currencyDataSource, baseCurrency); // TODO: Initialize to an appropriate value
     DateTime time = new DateTime(2000, 1, 7); // TODO: Initialize to an appropriate value
     IEnumerable<string> expected = new string[]{"JPY","CHF"};
     IEnumerable<string> actual;
     actual = target.GetCurrencies(time);
     Assert.IsTrue(expected.All(a => actual.Contains(a)));
 }
 public ExchangeRateAdapter(FXEntities.FXEntities fxEntities)
 {
     _fxEntities = fxEntities;
 }
 public CurrencyAdapter(FXEntities.FXEntities fxEntities)
 {
     _fxEntities = fxEntities;
 }