Пример #1
0
        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);
        }
Пример #2
0
        /// <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));
        }
Пример #3
0
        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]);
            }
        }
Пример #4
0
        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"));
            }
        }
Пример #5
0
 /**
  * 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);
 }
Пример #6
0
 public KeltnerChannelMiddleIndicator(IIndicator <decimal> indicator, int timeFrameEMA)
     : base(indicator)
 {
     _emaIndicator = new EMAIndicator(indicator, timeFrameEMA);
 }
Пример #7
0
        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)
                {
                }
            }
        }