예제 #1
0
        public GenericIndicatorReport(string name, string title, StockHandle stock, Data data)
            : base(name, title)
        {
            myStock = stock;

            Generate(data);
        }
예제 #2
0
        public GenericIndicatorReport( string name, string title, StockHandle stock, Data data )
            : base(name, title)
        {
            myStock = stock;

            Generate( data );
        }
예제 #3
0
        T ISingleDataSource <T> .ForStock(StockHandle stock)
        {
            var xmlDataSources = myDataStore.GetData(Name, stock);

            if (!xmlDataSources.Any())
            {
                return(default(T));
            }

            var dataSource = xmlDataSources
                             .OfType <SingleDataSource>()
                             .Where(xmlDs => HasValidCurrency(xmlDs, stock))
                             .SingleOrDefault();

            if (dataSource == null)
            {
                return(default(T));
            }

            var strValue = dataSource.Value as string;

            if (strValue == null)
            {
                return((T)dataSource.Value);
            }
            else
            {
                return((T)Blade.TypeConverter.ConvertTo(strValue, typeof(T)));
            }
        }
예제 #4
0
        private IndicatorResult EvaluateIndicator(StockHandle stock, DateTime dateUnderAnalysis)
        {
            var context = CreateIndicatorContext(dateUnderAnalysis);

            context.Stock = stock;

            return(Indicator.Calculate(context));
        }
예제 #5
0
파일: Catalogs.cs 프로젝트: riyanhax/Maui
 public IEnumerable <TradedStock> GetStocksFromWorksheet()
 {
     foreach (var isin in myIterator)
     {
         var stock = StockHandle.GetOrCreate(Isin => isin);
         yield return(stock.TradedStock);
     }
 }
예제 #6
0
        protected override void Interpret()
        {
            var stock = StockHandle.GetOrCreate(Isin => this.Isin);

            Console.WriteLine("Importing " + stock.ToString());

            this.Import(stock, Datum, true);
        }
예제 #7
0
        private IPriceSeries CreateSeries( StockHandle stock, IEnumerable<SimplePrice> prices )
        {
            var seriesId = new SeriesIdentifier(
                new StockObjectIdentifier( stock ),
                new ObjectDescriptor( Name ) );

            return new PriceSeries( seriesId, prices );
        }
예제 #8
0
 /// <summary>
 /// Gets the data for the specified datasource and stock.
 /// </summary>
 public IEnumerable <AbstractDataSource> GetData(string dataSourceName, StockHandle stock)
 {
     return(myStockDataSources
            .Where(ds => ds.Stock.Isin == stock.Isin)
            .SelectMany(ds => ds.Sources)
            .Where(ds => ds.Name == dataSourceName)
            .ToList());
 }
예제 #9
0
파일: XmlDataStore.cs 프로젝트: bg0jr/Maui
 /// <summary>
 /// Gets the data for the specified datasource and stock.
 /// </summary>
 public IEnumerable<AbstractDataSource> GetData( string dataSourceName, StockHandle stock )
 {
     return myStockDataSources
         .Where( ds => ds.Stock.Isin == stock.Isin )
         .SelectMany( ds => ds.Sources )
         .Where( ds => ds.Name == dataSourceName )
         .ToList();
 }
예제 #10
0
        private IPriceSeries CreateSeries(StockHandle stock, IEnumerable <SimplePrice> prices)
        {
            var seriesId = new SeriesIdentifier(
                new StockObjectIdentifier(stock),
                new ObjectDescriptor(Name));

            return(new PriceSeries(seriesId, prices));
        }
예제 #11
0
        protected override void Run()
        {
            DatumDefines.StockPrice.Create();

            var stock = StockHandle.GetOrCreate(Isin => this.Isin);

            DumpHighestLowestPricesPerYear(stock);
        }
예제 #12
0
파일: Import.cs 프로젝트: riyanhax/Maui
        public static void Import(this IMslScript script, StockHandle stock, string datum, bool force)
        {
            using (var trans = new ObjectTransaction())
            {
                trans.Override(() => Interpreter.Context.Scope.TryStock, stock);

                Import(script, datum, force);
            }
        }
예제 #13
0
        public IPriceSeries ForStock( StockHandle stock )
        {
            var prices = RealDataSource.ForStock( stock );

            var series = CreateSeries( stock, prices );
            series = ApplyOperators( series );

            return series;
        }
예제 #14
0
        private AbstractSection CreateMergedChartsSection(StockHandle stock, IEnumerable <GenericChartSection> sections)
        {
            var chart = new StockPriceChart(stock, Prices.ForStock(stock));

            AddIndicatorPoints(chart, sections);
            AddSignals(chart, sections);

            return(new GenericChartSection(Name, chart));
        }
예제 #15
0
        public T ForStock(StockHandle stock)
        {
            if (Data.ContainsKey(stock.Isin))
            {
                return(Data[stock.Isin]);
            }

            return(default(T));
        }
예제 #16
0
파일: Import.cs 프로젝트: bg0jr/Maui
        public static void Import( this IMslScript script, StockHandle stock, string datum, bool force )
        {
            using ( var trans = new ObjectTransaction() )
            {
                trans.Override( () => Interpreter.Context.Scope.TryStock, stock );

                Import( script, datum, force );
            }
        }
예제 #17
0
        public StockObjectIdentifier(StockHandle stock)
        {
            Isin = stock.Isin;
            StockExchangeSymbol = stock.StockExchange.Symbol;

            ShortDesignator = Isin + "+" + StockExchangeSymbol;
            LongDesignator  = ShortDesignator;
            Guid            = LongDesignator.GetHashCode();
        }
예제 #18
0
        public StockObjectIdentifier( StockHandle stock )
        {
            Isin = stock.Isin;
            StockExchangeSymbol = stock.StockExchange.Symbol;

            ShortDesignator = Isin + "+" + StockExchangeSymbol;
            LongDesignator = ShortDesignator;
            Guid = LongDesignator.GetHashCode();
        }
예제 #19
0
        private bool HasValidCurrency(AbstractDataSource source, StockHandle stock)
        {
            if (source.Currency == null)
            {
                return(true);
            }

            return(stock.StockExchange.Currency.Name.EqualsI(source.Currency));
        }
예제 #20
0
        public StockPriceChart(string name, StockHandle stock, IPriceSeries prices)
        {
            Name   = name;
            Stock  = stock;
            Prices = new PriceSeries(prices);

            IndicatorPoints = new Dictionary <string, IPriceSeries>();
            Signals         = SignalSeries.Null;
        }
예제 #21
0
        public StockPriceChart( string name, StockHandle stock, IPriceSeries prices )
        {
            Name = name;
            Stock = stock;
            Prices = new PriceSeries( prices );

            IndicatorPoints = new Dictionary<string, IPriceSeries>();
            Signals = SignalSeries.Null;
        }
예제 #22
0
        protected TData ForStock(StockHandle stock, Func <StockHandle, TData> fetchData)
        {
            if (!myCache.ContainsKey(stock.Isin))
            {
                myCache[stock.Isin] = fetchData(stock);
            }

            return(myCache[stock.Isin]);
        }
예제 #23
0
        private void RenderStockDetails(StockHandle stock, TextWriter document)
        {
            var details = new Dictionary <string, object>();

            details["Name"]     = stock.Name;
            details["Isin"]     = stock.Isin;
            details["Currency"] = stock.StockExchange.Currency.Name;

            HtmlRenderingUtils.RenderDictionary(details, document);
        }
예제 #24
0
        public IPriceSeries ForStock(StockHandle stock)
        {
            var prices = RealDataSource.ForStock(stock);

            var series = CreateSeries(stock, prices);

            series = ApplyOperators(series);

            return(series);
        }
예제 #25
0
        public SystemResult(string system, StockHandle stock, IPriceSeries prices, IndicatorResult indicatorResult)
        {
            System = system;
            Stock  = stock;
            Prices = prices;

            Signal        = indicatorResult.Signal;
            ExpectedGain  = indicatorResult.ExpectedGain;
            GainRiskRatio = indicatorResult.GainRiskRatio;
            Signals       = indicatorResult.Signals;
        }
예제 #26
0
파일: SystemResult.cs 프로젝트: bg0jr/Maui
        public SystemResult( string system, StockHandle stock, IPriceSeries prices, IndicatorResult indicatorResult )
        {
            System = system;
            Stock = stock;
            Prices = prices;

            Signal = indicatorResult.Signal;
            ExpectedGain = indicatorResult.ExpectedGain;
            GainRiskRatio = indicatorResult.GainRiskRatio;
            Signals = indicatorResult.Signals;
        }
예제 #27
0
        protected override void Interpret()
        {
            var stock = StockHandle.GetOrCreate(Isin => this.Isin);

            Console.WriteLine("Fetching " + stock.ToString());

            var table = this.Fetch(stock, Datum);

            Console.WriteLine();
            table.Dump();
        }
예제 #28
0
        private IEnumerable <SimplePrice> FetchPrices(StockHandle stock)
        {
            using (var tom = Engine.ServiceProvider.CreateEntityRepository())
            {
                // refetch traded stock as the tom context the stock is coming from might be disposed already
                var tradedStock = tom.GetObjectByKey <TradedStock>(stock.TradedStock.EntityKey);

                var prices = tradedStock.StockPrices
                             .Select(price => new SimplePrice(price.Date, price.Close))
                             .ToList();

                return(prices);
            }
        }
예제 #29
0
파일: Fetch.cs 프로젝트: riyanhax/Maui
        public static DataTable Fetch(this IMslScript script, StockHandle stock, string datum)
        {
            var provider = Interpreter.Context.DatumProviderFactory.Create(datum);

            if (provider == null)
            {
                throw new Exception("No data provider found for datum '" + datum + "'");
            }

            using (var guard = new NestedScopeGuard())
            {
                guard.Scope.Stock = stock;

                return(provider.Fetch().ResultTable);
            }
        }
예제 #30
0
파일: TradingSystem.cs 프로젝트: bg0jr/Maui
        public SystemResult Evaluate( StockHandle stock, DateTime dateUnderAnalysis )
        {
            var indicatorResult = EvaluateIndicator( stock, dateUnderAnalysis );

            var systemResult = new SystemResult( Name, stock, Prices.ForStock( stock ), indicatorResult );

            var report = CreateReport( dateUnderAnalysis, systemResult );
            report.SystemDetails.Indicator = indicatorResult;

            systemResult.Report = report;

            AddReports( report );

            report.Sections.Add( myChartGenerator.Generate( systemResult ) );

            return systemResult;
        }
예제 #31
0
파일: QueryTool.cs 프로젝트: bg0jr/Maui
        public static StockPriceSeries GetStockPrices( this MauiX.IQuery self, StockHandle stock, DateClause dateClause, Timeframe timeframe )
        {
            var table = self.GetPriceData( stock, dateClause );

            var q = from row in table.Rows
                    select new StockPrice(
                        (long)row[ "id" ],
                        stock.TradedStock,
                        row.GetDate( table.Schema ),
                        row[ "open" ] != DBNull.Value ? (double?)row[ "open" ] : null,
                        row[ "high" ] != DBNull.Value ? (double?)row[ "high" ] : null,
                        row[ "low" ] != DBNull.Value ? (double?)row[ "low" ] : null,
                        (double)row[ "close" ],
                        ( row[ "volume" ] != DBNull.Value ? (int)(long)row[ "volume" ] : 0 )
                         );

            return new StockPriceSeries( stock.TradedStock, q, timeframe );
        }
예제 #32
0
        public static StockPriceSeries GetStockPrices(this MauiX.IQuery self, StockHandle stock, DateClause dateClause, Timeframe timeframe)
        {
            var table = self.GetPriceData(stock, dateClause);

            var q = from row in table.Rows
                    select new StockPrice(
                (long)row["id"],
                stock.TradedStock,
                row.GetDate(table.Schema),
                row["open"] != DBNull.Value ? (double?)row["open"] : null,
                row["high"] != DBNull.Value ? (double?)row["high"] : null,
                row["low"] != DBNull.Value ? (double?)row["low"] : null,
                (double)row["close"],
                (row["volume"] != DBNull.Value ? (int)(long)row["volume"] : 0)
                );

            return(new StockPriceSeries(stock.TradedStock, q, timeframe));
        }
예제 #33
0
        public SystemResult Evaluate(StockHandle stock, DateTime dateUnderAnalysis)
        {
            var indicatorResult = EvaluateIndicator(stock, dateUnderAnalysis);

            var systemResult = new SystemResult(Name, stock, Prices.ForStock(stock), indicatorResult);

            var report = CreateReport(dateUnderAnalysis, systemResult);

            report.SystemDetails.Indicator = indicatorResult;

            systemResult.Report = report;

            AddReports(report);

            report.Sections.Add(myChartGenerator.Generate(systemResult));

            return(systemResult);
        }
예제 #34
0
파일: TopFlop.cs 프로젝트: riyanhax/Maui
        private Result GetYield(StockHandle stock)
        {
            var series = MauiX.Query.GetStockPrices(stock,
                                                    new DateClause(DateTimeExtensions.FirstOfYear(Year), DateTimeExtensions.LastOfYear(Year)),
                                                    Timeframes.DAY);

            if (series.Count <= 2)
            {
                Console.WriteLine("Not enough data for: " + stock);
                return(null);
            }

            return(new Result()
            {
                Stock = stock,
                YearYield = MauiX.Calc.Yield(series.First, series.Last),
                DecemberYield = CalculateDecemberYield(series),
            });
        }
예제 #35
0
        private static string GenerateOutputFile(string output, bool loopCatalog)
        {
            if (!loopCatalog || output == null)
            {
                return(output);
            }

            // XXX: hack to write to different out-files

            StockHandle stock = Interpreter.Context.Scope.Stock;

            var outFile = Path.Combine(Path.GetDirectoryName(output), Path.GetFileNameWithoutExtension(output));

            outFile += "-";
            outFile += (string.IsNullOrEmpty(stock.TradedStock.Symbol) ? stock.Stock.Isin : stock.TradedStock.Symbol);
            outFile += Path.GetExtension(output);

            return(outFile);
        }
예제 #36
0
        public IEnumerable <double> ForStock(StockHandle stock)
        {
            if (stock.Isin == "a")
            {
                return(new List <double>()
                {
                    1, 2, 3
                });
            }
            else if (stock.Isin == "b")
            {
                return(new List <double>()
                {
                    1, 2, 3
                });
            }

            return(new List <double>());
        }
예제 #37
0
파일: ImportTool.cs 프로젝트: bg0jr/Maui
        /// <summary>
        /// Imports the given result into TOM.
        /// </summary>
        public static void Import( this MauiX.IImport self, StockHandle stock, IResultPolicy result )
        {
            using ( var tom = Engine.ServiceProvider.CreateEntityRepository() )
            {
                var originName = result.Sites.First().Name;
                var origin = tom.DatumOrigins.FirstOrDefault( o => o.Name == originName );
                if ( origin == null )
                {
                    origin = new DatumOrigin( originName );
                    tom.DatumOrigins.AddObject( origin );
                    tom.SaveChanges();
                }

                var currencyName = result.Sites.First().Content.Currency;
                var currency = tom.Currencies.FirstOrDefault( c => c.Name == currencyName );

                MauiX.Import.Import( stock, result.ResultTable, origin, currency );
            }
        }
예제 #38
0
        private void DumpHighestLowestPricesPerYear(StockHandle stock)
        {
            var series = MauiX.Query.GetStockPrices(stock, DateClause.All, Timeframes.DAY);

            var highLowByYear = series
                                .GroupBy(price => price.Date.Year)
                                .Select(group => new
            {
                Year    = group.Key,
                Lowest  = group.Min(p => p.Close),
                Highest = group.Max(p => p.Close)
            });

            Console.WriteLine("{0,5} {1,10} {2,10}", "year", "lowest", "highest");
            foreach (var highLowGroup in highLowByYear.OrderBy(g => g.Year))
            {
                Console.WriteLine("{0,5} {1,10:#0.00} {2,10:#0.00}", highLowGroup.Year, highLowGroup.Lowest, highLowGroup.Highest);
            }
        }
예제 #39
0
파일: ImportTool.cs 프로젝트: riyanhax/Maui
        /// <summary>
        /// Imports the given result into TOM.
        /// </summary>
        public static void Import(this MauiX.IImport self, StockHandle stock, IResultPolicy result)
        {
            using (var tom = Engine.ServiceProvider.CreateEntityRepository())
            {
                var originName = result.Sites.First().Name;
                var origin     = tom.DatumOrigins.FirstOrDefault(o => o.Name == originName);
                if (origin == null)
                {
                    origin = new DatumOrigin(originName);
                    tom.DatumOrigins.AddObject(origin);
                    tom.SaveChanges();
                }

                var currencyName = result.Sites.First().Content.Currency;
                var currency     = tom.Currencies.FirstOrDefault(c => c.Name == currencyName);

                MauiX.Import.Import(stock, result.ResultTable, origin, currency);
            }
        }
예제 #40
0
        private void DumpHighestLowestPricesPerYear( StockHandle stock )
        {
            var series = MauiX.Query.GetStockPrices( stock, DateClause.All, Timeframes.DAY );

            var highLowByYear = series
                .GroupBy( price => price.Date.Year )
                .Select( group => new
                {
                    Year = group.Key,
                    Lowest = group.Min( p => p.Close ),
                    Highest = group.Max( p => p.Close )
                } );

            Console.WriteLine( "{0,5} {1,10} {2,10}", "year", "lowest", "highest" );
            foreach ( var highLowGroup in highLowByYear.OrderBy( g => g.Year ) )
            {
                Console.WriteLine( "{0,5} {1,10:#0.00} {2,10:#0.00}", highLowGroup.Year, highLowGroup.Lowest, highLowGroup.Highest );
            }
        }
예제 #41
0
파일: TopFlop.cs 프로젝트: bg0jr/Maui
        private Result GetYield( StockHandle stock )
        {
            var series = MauiX.Query.GetStockPrices( stock,
                new DateClause( DateTimeExtensions.FirstOfYear( Year ), DateTimeExtensions.LastOfYear( Year ) ),
                Timeframes.DAY );

            if ( series.Count <= 2 )
            {
                Console.WriteLine( "Not enough data for: " + stock );
                return null;
            }

            return new Result()
                {
                    Stock = stock,
                    YearYield = MauiX.Calc.Yield( series.First, series.Last ),
                    DecemberYield = CalculateDecemberYield( series ),
                };
        }
예제 #42
0
        // !! duplicate code in Maui.Tasks.StockLookupPolicy
        private static string EvaluateStock( string var, StockHandle stock )
        {
            if ( var.StartsWith( "stock." ) )
            {
                return stock[ var.Substring( "stock.".Length ) ].ToString();
            }

            // further special vars
            if ( var == "today.de" )
            {
                return string.Format( "{0}.{1}.{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year );
            }

            // TODO: that should be located near provider or navigation or whatever
            if ( var == "ariva.stockexchange.id" )
            {
                // Xetra: boerse_id = 6
                // Frankfurt: boerse_id = 1
                // Nasdaq: boerse_id = 40
                // NYSE: boerse_id = 21
                var stockExchange = stock.StockExchange;
                if ( stockExchange.Symbol == "DE" )
                {
                    return "6";
                }
                else if ( stockExchange.Symbol == "F" )
                {
                    return "1";
                }
                else if ( stockExchange.Symbol == "NASDAQ" )
                {
                    return "40";
                }
                else if ( stockExchange.Symbol == "NYSE" )
                {
                    return "21";
                }
            }

            return null;
        }
예제 #43
0
파일: Import.cs 프로젝트: riyanhax/Maui
        private static bool RequiredDataAvailable(string datum, bool force)
        {
            if (force)
            {
                return(false);
            }

            // is "from"/"to" set?
            if (null == Interpreter.Context.Scope.TryFrom || null == Interpreter.Context.Scope.TryTo)
            {
                return(false);
            }

            StockHandle stock = Interpreter.Context.Scope.Stock;
            DateTime    from  = Interpreter.Context.Scope.From;
            DateTime    to    = Interpreter.Context.Scope.To;

            var mgr = Interpreter.Context.TomScripting.GetManager(datum);

            long ownerId = stock.GetId(mgr.Schema.OwnerIdColumn);
            var  result  = mgr.Query(ownerId, new DateClause(from, to), OriginClause.Default);

            if (result.Rows.Count() == 0)
            {
                return(false);
            }

            // HACK: now we only check first and last
            var dates = result.Rows.Select(r => r.GetDate(result.Schema)).OrderBy(d => d);
            var first = dates.First();
            var last  = dates.Last();

            if (result.Schema.DateColumn.Equals("year", StringComparison.OrdinalIgnoreCase))
            {
                return(from.Year == first.Year && to.Year == last.Year);
            }
            else
            {
                return(from.AlmostEquals(first, 3) && to.AlmostEquals(last, 3));
            }
        }
예제 #44
0
        // !! duplicate code in Maui.Tasks.StockLookupPolicy
        private static string EvaluateStock(string var, StockHandle stock)
        {
            if (var.StartsWith("stock."))
            {
                return(stock[var.Substring("stock.".Length)].ToString());
            }

            // further special vars
            if (var == "today.de")
            {
                return(string.Format("{0}.{1}.{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year));
            }

            // TODO: that should be located near provider or navigation or whatever
            if (var == "ariva.stockexchange.id")
            {
                // Xetra: boerse_id = 6
                // Frankfurt: boerse_id = 1
                // Nasdaq: boerse_id = 40
                // NYSE: boerse_id = 21
                var stockExchange = stock.StockExchange;
                if (stockExchange.Symbol == "DE")
                {
                    return("6");
                }
                else if (stockExchange.Symbol == "F")
                {
                    return("1");
                }
                else if (stockExchange.Symbol == "NASDAQ")
                {
                    return("40");
                }
                else if (stockExchange.Symbol == "NYSE")
                {
                    return("21");
                }
            }

            return(null);
        }
예제 #45
0
파일: DBViewer.cs 프로젝트: bg0jr/Maui
        protected override void Run()
        {
            if ( ListCatalogs )
            {
                using ( var tom = Engine.ServiceProvider.CreateEntityRepository() )
                {
                    foreach ( var catalog in tom.StockCatalogs )
                    {
                        Console.WriteLine( "{0,4} {1}", catalog.Id, catalog.Name );
                    }
                }
            }
            else if ( ListCatalogContent.HasValue )
            {
                using ( var tom = Engine.ServiceProvider.CreateEntityRepository() )
                {
                    var catalog = tom.StockCatalogs.FirstOrDefault( c => c.Id == ListCatalogContent );
                    if ( catalog == null )
                    {
                        throw new Exception( "No such catalog" );
                    }

                    foreach ( var tsh in catalog.TradedStocks )
                    {
                        var stock = new StockHandle( tsh );
                        Console.WriteLine( "{0,4} {1,-30} {2,5} {3,12} {4,10}", stock.TradedStockId,
                            stock.Name.LimitTo( 30 ), stock.Symbol, stock.Isin, stock.Wpkn );
                    }
                }
            }
            else if ( ListStocks )
            {
                ListAllStocks();
            }
            else
            {
                throw new ArgumentException( "Arguments missing" );
            }
        }
예제 #46
0
파일: Import.cs 프로젝트: bg0jr/Maui
 public static void Import( this IMslScript script, StockHandle stock, Datum datum, bool force )
 {
     Import( script, stock, datum.Name, force );
 }
예제 #47
0
 public void Add( StockHandle stock )
 {
     myStocks.Add( stock );
 }
예제 #48
0
파일: StockSection.cs 프로젝트: bg0jr/Maui
 public StockSection( StockHandle stock )
     : base("Stock")
 {
     Stock = stock;
 }
예제 #49
0
 public StockLookupPolicy( StockHandle stock, Dictionary<string, string> lut )
     : base(lut)
 {
     myStock = stock;
 }
예제 #50
0
 protected IndicatorResult( string indicator, StockHandle stock )
 {
     Indicator = indicator;
     Stock = stock;
     Signals = SignalSeries.Null;
 }
예제 #51
0
 public IndicatorResult( string indicator, StockHandle stock, Signal signal )
     : this(indicator, stock)
 {
     Signal = signal;
 }
예제 #52
0
파일: StockCreator.cs 프로젝트: bg0jr/Maui
        // TODO: dublicate of Functions.Stocks.GetOrCreateStock() but we first need some
        // kind of protocol (for user and developer) before we can remove this code here
        public StockHandle Create( StockDescriptor stockDescriptor )
        {
            if ( stockDescriptor.Isin.IsNullOrTrimmedEmpty() )
            {
                throw new ArgumentException( "Isin not set" );
            }
            if ( stockDescriptor.StockExchange.IsNullOrTrimmedEmpty() )
            {
                throw new ArgumentException( "Stock exchange not set" );
            }

            myLogger.Notice( "Creating stock: {0}", stockDescriptor.Isin );

            using ( var tom = Engine.ServiceProvider.CreateEntityRepository() )
            {
                var tradedStock = tom.TradedStocks.FindTradedStockByDescription( stockDescriptor );
                if ( tradedStock != null )
                {
                    var sh = new StockHandle( tradedStock );

                    myLogger.Info( "Stock already exists: Company = {0},Isin = {1}, Symbol = {2}, Exchange = {3}",
                        sh.Company.Name, stockDescriptor.Isin, sh.TradedStock.Symbol, stockDescriptor.StockExchange );

                    return sh;
                }

                // TODO: this is somehow duplicate code from StockHandle.GetOrCreate - remove StockHandle.GetOrCreate

                // ok - so no traded stock available for the given description - but maybe a stock is already there?
                var stock = tom.Stocks.FirstOrDefault( s => s.Isin == stockDescriptor.Isin );
                if ( stock == null )
                {
                    var companyName = stockDescriptor.Name;
                    if ( companyName.IsNullOrTrimmedEmpty() )
                    {
                        companyName = DatumLocatorDefinitions.Standing.CompanyName.FetchSingle<string>( stockDescriptor.Isin ).Value;
                    }

                    // company name is not uniq enough so lets create a new one
                    var company = new Company( companyName );
                    stock = new Stock( company, stockDescriptor.Isin );
                }

                // we got a stock so lets create a traded stock - we already checked that there is none

                // but first we need a stockexchange
                var se = tom.StockExchanges.FindBySymbolOrName( stockDescriptor.StockExchange );
                if ( se == null )
                {
                    throw new InvalidOperationException( "Could not find StockExchange by symbol or name with: " + stockDescriptor.StockExchange );
                }

                var symbol = stockDescriptor.Symbol;
                if ( symbol.IsNullOrTrimmedEmpty() )
                {
                    symbol = DatumLocatorDefinitions.Standing.StockSymbol.FetchSingle<string>( stockDescriptor.Isin ).Value;
                }
                var wpkn = DatumLocatorDefinitions.Standing.Wpkn.FetchSingle<string>( stockDescriptor.Isin ).Value;

                tradedStock = new TradedStock( stock, se );
                tradedStock.Symbol = symbol;
                tradedStock.Wpkn = wpkn;

                tom.TradedStocks.AddObject( tradedStock );

                tom.SaveChanges();

                myLogger.Info( "Created stock with: Company = {0},Isin = {1}, Symbol = {2}, Exchange = {3}",
                    stock.Company.Name, stock.Isin, symbol, stockDescriptor.StockExchange );

                return new StockHandle( tradedStock );
            }
        }
예제 #53
0
 public StockPriceChart( StockHandle stock, IPriceSeries prices )
     : this("StockPrices", stock, prices)
 {
 }
예제 #54
0
        private void ResolveCatalogReference( StockCatalogDescriptor catalog )
        {
            if ( string.IsNullOrEmpty( catalog.Name ) )
            {
                return;
            }

            using ( var tom = Engine.ServiceProvider.CreateEntityRepository() )
            {
                var stockCatalog = tom.StockCatalogs.FirstOrDefault( sc => sc.Name.Equals( catalog.Name, StringComparison.OrdinalIgnoreCase ) );
                if ( stockCatalog == null )
                {
                    throw new Exception( "No such catalog in MauiDB: " + catalog.Name );
                }

                foreach ( var tradedStock in stockCatalog.TradedStocks )
                {
                    var stock = new StockHandle( tradedStock );
                    Add( stock );
                }
            }
        }
예제 #55
0
 public StockLookupPolicy( StockHandle stock )
     : this(stock, new Dictionary<string, string>())
 {
 }
예제 #56
0
파일: Import.cs 프로젝트: bg0jr/Maui
 public static void Import( this IMslScript script, StockHandle stock, Datum datum )
 {
     Import( script, stock, datum, false );
 }
예제 #57
0
파일: ImportTool.cs 프로젝트: bg0jr/Maui
        /// <summary>
        /// Imports the given table into TOM.
        /// <remarks>
        /// The values of the table belong to the given origin and the given currency.
        /// All rows are owned by the given stock. The table name identifies the datum
        /// (and so the target table).
        /// </remarks>
        /// </summary>
        public static void Import( this MauiX.IImport self, StockHandle stock, DataTable table, DatumOrigin origin, Maui.Entities.Currency currency )
        {
            // XXX: how to handle origin and currency if we allow "merged results"?
            //  then we actually already need to enrich the result table from the policy
            //  with origin and currency ...

            var tomScripting = Engine.ServiceProvider.TomScripting();

            var datum = table.TableName;

            using ( TransactionScope trans = new TransactionScope() )
            {
                // we have a datum so we need the table now
                var mgr = tomScripting.GetManager( datum );
                if ( mgr == null )
                {
                    throw new Exception( "No table found for datum: " + datum );
                }

                // get scoped data for owner id
                long ownerId = stock.GetId( mgr.Schema.OwnerIdColumn );
                ScopedTable output = mgr.Query( ownerId );

                var resultColumns = table.Columns.ToSet();
                var dateCol = resultColumns.FirstOrDefault( c => c.IsDateColumn() );

                // setting date and values depend on the format
                Action<DataRow, DataRow> SetValues = null;
                // default date setter: assume there is no date
                Action<DataRow, DataRow> SetDate = ( dest, src ) => { };
                if ( dateCol != null )
                {
                    SetDate = ( dest, src ) => dest.SetDate( mgr.Schema, src.GetDate( dateCol.ColumnName ) );
                }

                var datumCols = output.Schema.DatumColumns
                    .Where( col => resultColumns.Any( c => c.ColumnName.Equals( col.ColumnName, StringComparison.OrdinalIgnoreCase ) ) );
                SetValues = ( dest, src ) =>
                {
                    foreach ( var col in datumCols )
                    {
                        dest[ col.ColumnName ] = src[ col.ColumnName ];
                    }
                };

                // ok - now import the data

                DateIdCache<long> cache = new DateIdCache<long>();
                if ( output.Schema.DateColumn != null )
                {
                    cache.Fill( output );
                }

                foreach ( DataRow row in table.Rows )
                {
                    var newRow = output.NewRow();

                    // set owner id
                    newRow[ output.Schema.OwnerIdColumn ] = ownerId;

                    // a "datum" always need a date
                    SetDate( newRow, row );

                    // set values
                    SetValues( newRow, row );

                    // set currency (the value is of no use when there is no currency)
                    // -> currency might implicitly available through TradedStock->StockExchange
                    if ( output.Schema.CurrencyColumn != null )
                    {
                        newRow[ output.Schema.CurrencyColumn ] = currency.Id;
                    }

                    // set origin (optional)
                    if ( output.Schema.OriginColumn != null )
                    {
                        newRow[ output.Schema.OriginColumn ] = origin.Id;
                    }

                    if ( output.Schema.DateColumn != null && cache.Contains( newRow.GetDate( output.Schema ) ) )
                    {
                        long id = cache[ newRow.GetDate( output.Schema ) ];
                        output.Update( id, newRow );
                    }
                    else
                    {
                        output.Add( newRow );
                    }
                }

                trans.Complete();
            }
        }
예제 #58
0
파일: TradingSystem.cs 프로젝트: bg0jr/Maui
        private IndicatorResult EvaluateIndicator( StockHandle stock, DateTime dateUnderAnalysis )
        {
            var context = CreateIndicatorContext( dateUnderAnalysis );
            context.Stock = stock;

            return Indicator.Calculate( context );
        }
        private AbstractSection CreateMergedChartsSection( StockHandle stock, IEnumerable<GenericChartSection> sections )
        {
            var chart = new StockPriceChart( stock, Prices.ForStock( stock ) );

            AddIndicatorPoints( chart, sections );
            AddSignals( chart, sections );

            return new GenericChartSection( Name, chart );
        }
예제 #60
0
 public CombinedIndicatorResult( CombinedIndicator indicator, StockHandle stock )
     : base(indicator.Name, stock)
 {
     myIndicator = indicator;
     myResults = new List<IndicatorResult>();
 }