public GenericIndicatorReport(string name, string title, StockHandle stock, Data data) : base(name, title) { myStock = stock; Generate(data); }
public GenericIndicatorReport( string name, string title, StockHandle stock, Data data ) : base(name, title) { myStock = stock; Generate( data ); }
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))); } }
private IndicatorResult EvaluateIndicator(StockHandle stock, DateTime dateUnderAnalysis) { var context = CreateIndicatorContext(dateUnderAnalysis); context.Stock = stock; return(Indicator.Calculate(context)); }
public IEnumerable <TradedStock> GetStocksFromWorksheet() { foreach (var isin in myIterator) { var stock = StockHandle.GetOrCreate(Isin => isin); yield return(stock.TradedStock); } }
protected override void Interpret() { var stock = StockHandle.GetOrCreate(Isin => this.Isin); Console.WriteLine("Importing " + stock.ToString()); this.Import(stock, Datum, true); }
private IPriceSeries CreateSeries( StockHandle stock, IEnumerable<SimplePrice> prices ) { var seriesId = new SeriesIdentifier( new StockObjectIdentifier( stock ), new ObjectDescriptor( Name ) ); return new PriceSeries( seriesId, prices ); }
/// <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()); }
/// <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(); }
private IPriceSeries CreateSeries(StockHandle stock, IEnumerable <SimplePrice> prices) { var seriesId = new SeriesIdentifier( new StockObjectIdentifier(stock), new ObjectDescriptor(Name)); return(new PriceSeries(seriesId, prices)); }
protected override void Run() { DatumDefines.StockPrice.Create(); var stock = StockHandle.GetOrCreate(Isin => this.Isin); DumpHighestLowestPricesPerYear(stock); }
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); } }
public IPriceSeries ForStock( StockHandle stock ) { var prices = RealDataSource.ForStock( stock ); var series = CreateSeries( stock, prices ); series = ApplyOperators( series ); return series; }
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)); }
public T ForStock(StockHandle stock) { if (Data.ContainsKey(stock.Isin)) { return(Data[stock.Isin]); } return(default(T)); }
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 ); } }
public StockObjectIdentifier(StockHandle stock) { Isin = stock.Isin; StockExchangeSymbol = stock.StockExchange.Symbol; ShortDesignator = Isin + "+" + StockExchangeSymbol; LongDesignator = ShortDesignator; Guid = LongDesignator.GetHashCode(); }
public StockObjectIdentifier( StockHandle stock ) { Isin = stock.Isin; StockExchangeSymbol = stock.StockExchange.Symbol; ShortDesignator = Isin + "+" + StockExchangeSymbol; LongDesignator = ShortDesignator; Guid = LongDesignator.GetHashCode(); }
private bool HasValidCurrency(AbstractDataSource source, StockHandle stock) { if (source.Currency == null) { return(true); } return(stock.StockExchange.Currency.Name.EqualsI(source.Currency)); }
public StockPriceChart(string name, StockHandle stock, IPriceSeries prices) { Name = name; Stock = stock; Prices = new PriceSeries(prices); IndicatorPoints = new Dictionary <string, IPriceSeries>(); Signals = SignalSeries.Null; }
public StockPriceChart( string name, StockHandle stock, IPriceSeries prices ) { Name = name; Stock = stock; Prices = new PriceSeries( prices ); IndicatorPoints = new Dictionary<string, IPriceSeries>(); Signals = SignalSeries.Null; }
protected TData ForStock(StockHandle stock, Func <StockHandle, TData> fetchData) { if (!myCache.ContainsKey(stock.Isin)) { myCache[stock.Isin] = fetchData(stock); } return(myCache[stock.Isin]); }
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); }
public IPriceSeries ForStock(StockHandle stock) { var prices = RealDataSource.ForStock(stock); var series = CreateSeries(stock, prices); series = ApplyOperators(series); return(series); }
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; }
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; }
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(); }
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); } }
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); } }
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; }
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 ); }
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)); }
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); }
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), }); }
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); }
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>()); }
/// <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 ); } }
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); } }
/// <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); } }
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 ); } }
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 ), }; }
// !! 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; }
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)); } }
// !! 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); }
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" ); } }
public static void Import( this IMslScript script, StockHandle stock, Datum datum, bool force ) { Import( script, stock, datum.Name, force ); }
public void Add( StockHandle stock ) { myStocks.Add( stock ); }
public StockSection( StockHandle stock ) : base("Stock") { Stock = stock; }
public StockLookupPolicy( StockHandle stock, Dictionary<string, string> lut ) : base(lut) { myStock = stock; }
protected IndicatorResult( string indicator, StockHandle stock ) { Indicator = indicator; Stock = stock; Signals = SignalSeries.Null; }
public IndicatorResult( string indicator, StockHandle stock, Signal signal ) : this(indicator, stock) { Signal = signal; }
// 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 ); } }
public StockPriceChart( StockHandle stock, IPriceSeries prices ) : this("StockPrices", stock, prices) { }
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 ); } } }
public StockLookupPolicy( StockHandle stock ) : this(stock, new Dictionary<string, string>()) { }
public static void Import( this IMslScript script, StockHandle stock, Datum datum ) { Import( script, stock, datum, false ); }
/// <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(); } }
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 ); }
public CombinedIndicatorResult( CombinedIndicator indicator, StockHandle stock ) : base(indicator.Name, stock) { myIndicator = indicator; myResults = new List<IndicatorResult>(); }