public void ResetsProperly() { var rsi = new RelativeStrengthIndex(2); rsi.Update(DateTime.Today, 1m); rsi.Update(DateTime.Today.AddSeconds(1), 2m); Assert.IsFalse(rsi.IsReady); rsi.Reset(); TestHelper.AssertIndicatorIsInDefaultState(rsi); TestHelper.AssertIndicatorIsInDefaultState(rsi.AverageGain); TestHelper.AssertIndicatorIsInDefaultState(rsi.AverageLoss); }
public override void Initialize() { SetStartDate(2016, 01, 01); //Set Start Date SetEndDate(2016, 06, 30); //Set End Date SetCash(100000); //Set Strategy Cash AddEquity(symbol, Resolution.Daily); rsi = RSI(symbol, 14, MovingAverageType.Simple, Resolution.Daily); mom = MOM(symbol, 10, Resolution.Daily, Field.Close); engine = new FuzzyEngine(); }
/// <summary> /// Initializes a new instance of the <see cref="CrossEMAStrategy"/> class. /// </summary> /// <param name="Price">The injected price indicator.</param> /// <param name="SlowEMAPeriod">The slow EMA period.</param> /// <param name="FastEMAPeriod">The fast EMA period.</param> public RSIStrategy(Indicator Price, int RSIPeriod = 40, decimal Threshold = 20) { // Initialize fields. _threshold = Threshold; _price = Price; ActualSignal = OrderSignal.doNothing; Position = StockState.noInvested; EntryPrice = null; rsi = new RelativeStrengthIndex(RSIPeriod).Of(_price); // Fill the RSI rolling windows at every new RSI update. Once the // rolling windows is ready, at every indicator update the CheckSignal method will be called. rsi.Updated += (object sender, IndicatorDataPoint updated) => { if (rsi.IsReady) rsiRW.Add(rsi); if (rsiRW.IsReady) CheckSignal(); }; }
/// <summary> /// Called at the start of your algorithm to setup your requirements: /// </summary> public override void Initialize() { SetCash(100000); symbols.Add("SPY"); SetStartDate(1998, 1, 1); SetEndDate(2014, 6, 1); //Present Social Media Stocks: // symbols.Add("FB");symbols.Add("LNKD");symbols.Add("GRPN");symbols.Add("TWTR"); // SetStartDate(2011, 1, 1); // SetEndDate(2014, 12, 1); //2008 Financials: // symbols.Add("C");symbols.Add("AIG");symbols.Add("BAC");symbols.Add("HBOS"); // SetStartDate(2003, 1, 1); // SetEndDate(2011, 1, 1); //2000 Dot.com: // symbols.Add("IPET");symbols.Add("WBVN");symbols.Add("GCTY"); // SetStartDate(1998, 1, 1); // SetEndDate(2000, 1, 1); //CAPE data AddData<CAPE>("CAPE"); foreach (string stock in symbols) { AddSecurity(SecurityType.Equity, stock, Resolution.Minute); macd = MACD(stock, 12, 26, 9, MovingAverageType.Exponential, Resolution.Daily); macdDic.Add(stock, macd); rsi = RSI(stock, 14, MovingAverageType.Exponential, Resolution.Daily); rsiDic.Add(stock, rsi); Securities[stock].SetLeverage(10); } }
/// <summary> /// Initialize the data and resolution you require for your strategy /// </summary> public override void Initialize() { //Initialize SetStartDate(2013, 1, 1); SetEndDate(2014, 12, 31); SetCash(25000); //Add as many securities as you like. All the data will be passed into the event handler: AddSecurity(SecurityType.Equity, _symbol, Resolution.Minute); //Add the Custom Data: AddData<Bitcoin>("BTC"); //Set up default Indicators, these indicators are defined on the Value property of incoming data (except ATR and AROON which use the full TradeBar object) _indicators = new Indicators { BB = BB(_symbol, 20, 1, MovingAverageType.Simple, Resolution.Daily), RSI = RSI(_symbol, 14, MovingAverageType.Simple, Resolution.Daily), ATR = ATR(_symbol, 14, MovingAverageType.Simple, Resolution.Daily), EMA = EMA(_symbol, 14, Resolution.Daily), SMA = SMA(_symbol, 14, Resolution.Daily), MACD = MACD(_symbol, 12, 26, 9, MovingAverageType.Simple, Resolution.Daily), AROON = AROON(_symbol, 20, Resolution.Daily), MOM = MOM(_symbol, 20, Resolution.Daily), MOMP = MOMP(_symbol, 20, Resolution.Daily), STD = STD(_symbol, 20, Resolution.Daily), MIN = MIN(_symbol, 14, Resolution.Daily), // by default if the symbol is a tradebar type then it will be the min of the low property MAX = MAX(_symbol, 14, Resolution.Daily) // by default if the symbol is a tradebar type then it will be the max of the high property }; // Here we're going to define indicators using 'selector' functions. These 'selector' functions will define what data gets sent into the indicator // These functions have a signature like the following: decimal Selector(BaseData baseData), and can be defined like: baseData => baseData.Value // We'll define these 'selector' functions to select the Low value // // For more information on 'anonymous functions' see: http://en.wikipedia.org/wiki/Anonymous_function // https://msdn.microsoft.com/en-us/library/bb397687.aspx // _selectorIndicators = new Indicators { BB = BB(_symbol, 20, 1, MovingAverageType.Simple, Resolution.Daily, Field.Low), RSI = RSI(_symbol, 14, MovingAverageType.Simple, Resolution.Daily, Field.Low), EMA = EMA(_symbol, 14, Resolution.Daily, Field.Low), SMA = SMA(_symbol, 14, Resolution.Daily, Field.Low), MACD = MACD(_symbol, 12, 26, 9, MovingAverageType.Simple, Resolution.Daily, Field.Low), MOM = MOM(_symbol, 20, Resolution.Daily, Field.Low), MOMP = MOMP(_symbol, 20, Resolution.Daily, Field.Low), STD = STD(_symbol, 20, Resolution.Daily, Field.Low), MIN = MIN(_symbol, 14, Resolution.Daily, Field.High), // this will find the 14 day min of the high property MAX = MAX(_symbol, 14, Resolution.Daily, Field.Low), // this will find the 14 day max of the low property // ATR and AROON are special in that they accept a TradeBar instance instead of a decimal, we could easily project and/or transform the input TradeBar // before it gets sent to the ATR/AROON indicator, here we use a function that will multiply the input trade bar by a factor of two ATR = ATR(_symbol, 14, MovingAverageType.Simple, Resolution.Daily, SelectorDoubleTradeBar), AROON = AROON(_symbol, 20, Resolution.Daily, SelectorDoubleTradeBar) }; //Custom Data Indicator: _rsiCustom = RSI(_customSymbol, 14, MovingAverageType.Simple, Resolution.Daily); _minCustom = MIN(_customSymbol, 14, Resolution.Daily); _maxCustom = MAX(_customSymbol, 14, Resolution.Daily); // in addition to defining indicators on a single security, you can all define 'composite' indicators. // these are indicators that require multiple inputs. the most common of which is a ratio. // suppose we seek the ratio of BTC to SPY, we could write the following: var spyClose = Identity(_symbol); var btcClose = Identity(_customSymbol); // this will create a new indicator whose value is BTC/SPY _ratio = btcClose.Over(spyClose); // we can also easily plot our indicators each time they update using th PlotIndicator function PlotIndicator("Ratio", _ratio); }
public void ComparesAgainstExternalData() { var rsi = new RelativeStrengthIndex("rsi", 14, MovingAverageType.Simple); TestHelper.TestIndicator(rsi, "RSI 14"); }
/// <summary> /// Initializes a new instance of the RSIBullBearIndicator class with the specified name and Relative Strength Indicator /// </summary> /// <param name="name">The name of this indicator</param> /// <param name="rsi">The Relative Strength Index used by this indicator</param> public RSIBullBearIndicator(String name, RelativeStrengthIndex rsi) : base(name) { _rsi = rsi; WarmUpPeriod = rsi.WarmUpPeriod; }