public void setUp() { Random r = new Random(); List <IBar> bars = new List <IBar>(); for (int i = 0; i < 1000; i++) { double open = r.NextDouble(); double close = r.NextDouble(); double max = Math.Max(close + r.NextDouble(), open + r.NextDouble()); double min = Math.Min(0, Math.Min(close - r.NextDouble(), open - r.NextDouble())); DateTime dateTime = DateTime.Now; IBar bar = new BaseBar(dateTime, (decimal)open, (decimal)close, (decimal)max, (decimal)min, i); bars.Add(bar); } this.series = new BaseTimeSeries("test", bars); this.openPriceIndicator = new OpenPriceIndicator(this.series); this.minPriceIndicator = new MinPriceIndicator(this.series); this.maxPriceIndicator = new MaxPriceIndicator(this.series); this.volumeIndicator = new VolumeIndicator(this.series); ClosePriceIndicator closePriceIndicator = new ClosePriceIndicator(this.series); this.emaIndicator = new EMAIndicator(closePriceIndicator, 20); }
/// <param name="series">a time series </param> /// <returns> a moving momentum strategy </returns> public static Strategy BuildStrategy(TimeSeries series) { if (series == null) { throw new System.ArgumentException("Series cannot be null"); } var closePrice = new ClosePriceIndicator(series); // The bias is bullish when the shorter-moving average moves above the longer moving average. // The bias is bearish when the shorter-moving average moves below the longer moving average. var shortEma = new EMAIndicator(closePrice, 9); var longEma = new EMAIndicator(closePrice, 26); var stochasticOscillK = new StochasticOscillatorKIndicator(series, 14); var macd = new MACDIndicator(closePrice, 9, 26); var emaMacd = new EMAIndicator(macd, 18); // Entry rule var entryRule = (new OverIndicatorRule(shortEma, longEma)).And(new CrossedDownIndicatorRule(stochasticOscillK, Decimal.ValueOf(20))).And(new OverIndicatorRule(macd, emaMacd)); // Signal 2 - Signal 1 - Trend // Exit rule var exitRule = (new UnderIndicatorRule(shortEma, longEma)).And(new CrossedUpIndicatorRule(stochasticOscillK, Decimal.ValueOf(80))).And(new UnderIndicatorRule(macd, emaMacd)); // Signal 2 - Signal 1 - Trend return(new Strategy(entryRule, exitRule)); }
public Analyzer(IMarket market) { _market = market; var periods = new[] { 5, 10, 20, 30, 50, 80, 100 }; emas = new EMAIndicator[periods.Length]; for (int i = 0; i < emas.Length; i++) { emas[i] = new EMAIndicator((uint)periods[i]); } }
public void TestEmaData() { var data = GetEmaData1().Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); var ema = new EMAIndicator(10); int i = 0; for (; i < 9; i++) { var value = decimal.Parse(data[i].Trim()); ema.Add(value); Assert.AreEqual(0M, ema.PeekLast()); Assert.False(ema.IsInitialized); } for (; i < data.Length; i++) { var datas = data[i].Split(new[] { '\t' }); var value = decimal.Parse(datas[0]); var expectedEma = decimal.Parse(datas[3]); ema.Add(value); Assert.IsTrue(ema.IsInitialized); Assert.AreEqual(expectedEma.ToString("C2"), ema.PeekLast().ToString("C2")); } }
/** * Constructor. * * @param series the {@link TimeSeries} * @param shortTimeFrame (usually 3) * @param longTimeFrame (usually 10) */ public ChaikinOscillatorIndicator(ITimeSeries series, int shortTimeFrame, int longTimeFrame) : base(series) { _ema3 = new EMAIndicator(new AccumulationDistributionIndicator(series), shortTimeFrame); _ema10 = new EMAIndicator(new AccumulationDistributionIndicator(series), longTimeFrame); }
public KeltnerChannelMiddleIndicator(IIndicator <decimal> indicator, int timeFrameEMA) : base(indicator) { _emaIndicator = new EMAIndicator(indicator, timeFrameEMA); }
public static void Main(string[] args) { /// <summary> /// Getting time series /// </summary> TimeSeries series = CsvTradesLoader.loadBitstampSeries(); /// <summary> /// Creating indicators /// </summary> // Close price ClosePriceIndicator closePrice = new ClosePriceIndicator(series); // Typical price TypicalPriceIndicator typicalPrice = new TypicalPriceIndicator(series); // Price variation PriceVariationIndicator priceVariation = new PriceVariationIndicator(series); // Simple moving averages SMAIndicator shortSma = new SMAIndicator(closePrice, 8); SMAIndicator longSma = new SMAIndicator(closePrice, 20); // Exponential moving averages EMAIndicator shortEma = new EMAIndicator(closePrice, 8); EMAIndicator longEma = new EMAIndicator(closePrice, 20); // Percentage price oscillator PPOIndicator ppo = new PPOIndicator(closePrice, 12, 26); // Rate of change ROCIndicator roc = new ROCIndicator(closePrice, 100); // Relative strength index RSIIndicator rsi = new RSIIndicator(closePrice, 14); // Williams %R WilliamsRIndicator williamsR = new WilliamsRIndicator(series, 20); // Average true range AverageTrueRangeIndicator atr = new AverageTrueRangeIndicator(series, 20); // Standard deviation StandardDeviationIndicator sd = new StandardDeviationIndicator(closePrice, 14); /// <summary> /// Building header /// </summary> StringBuilder sb = new StringBuilder("timestamp,close,typical,variation,sma8,sma20,ema8,ema20,ppo,roc,rsi,williamsr,atr,sd\n"); /// <summary> /// Adding indicators values /// </summary> //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final int nbTicks = series.getTickCount(); int nbTicks = series.TickCount; for (int i = 0; i < nbTicks; i++) { sb.Append(series.getTick(i).EndTime.Millis / 1000d).Append(',').Append(closePrice.getValue(i)).Append(',').Append(typicalPrice.getValue(i)).Append(',').Append(priceVariation.getValue(i)).Append(',').Append(shortSma.getValue(i)).Append(',').Append(longSma.getValue(i)).Append(',').Append(shortEma.getValue(i)).Append(',').Append(longEma.getValue(i)).Append(',').Append(ppo.getValue(i)).Append(',').Append(roc.getValue(i)).Append(',').Append(rsi.getValue(i)).Append(',').Append(williamsR.getValue(i)).Append(',').Append(atr.getValue(i)).Append(',').Append(sd.getValue(i)).Append('\n'); } /// <summary> /// Writing CSV file /// </summary> System.IO.StreamWriter writer = null; try { writer = new System.IO.StreamWriter("indicators.csv"); writer.Write(sb.ToString()); } catch (IOException ioe) { //JAVA TO C# CONVERTER WARNING: The .NET Type.FullName property will not always yield results identical to the Java Class.getName method: Logger.getLogger(typeof(IndicatorsToCsv).FullName).log(Level.SEVERE, "Unable to write CSV file", ioe); } finally { try { if (writer != null) { writer.Close(); } } catch (IOException) { } } }