/// <summary>
        /// BuySignal; the details of the buy signal are filled in by the concrete
        /// implementations.
        /// </summary>
        /// <param name="eventArgs">incoming market tick event arguments</param>
        /// <returns><c>possibly</c> a buy event; may be null to do hold or do nothing</returns>
        public override BuyEventArgs BuySignal(MarketTickEventArgs eventArgs)
        {
            if (skipFirst)
            {
                skipFirst = false;
                return(null);
            }

            var numSecurities = eventArgs.SecuritiesData.Keys.Count;
            var security      = eventArgs.Symbol;

            if (numSecurities <= 0)
            {
                return(null);
            }

            var numShares = (int)Math.Floor((eventArgs.StrategyInfo.Cash / numSecurities) / eventArgs.MarketData.Close);
            var retVal    = numShares > 0 ? new BuyEventArgs(eventArgs, numShares) : null;

            if (!inMarket.ContainsKey(security))
            {
                inMarket.Add(security, new BuyHoldTracking()
                {
                    Shares   = numShares,
                    Symbol   = security,
                    InMarket = true,
                });
            }
            else
            {
                retVal = null;
            }

            return(retVal);
        }
        public override Events.StrategyMarketTickResult MarketTick(object sender, MarketTickEventArgs e)
        {
            string symbol = e.Symbol;

            this[symbol].Process(e);

            return(base.MarketTick(sender, e));
        }
 /// <summary>
 /// TradeEventArgs given a market tick and some Shares
 /// </summary>
 /// <param name="e">market tick</param>
 /// <param name="Shares">Shares</param>
 public TradeEventArgs(TradeType tradeType, MarketTickEventArgs e, int shares)
 {
     TradeType  = tradeType;
     MarketData = e.MarketData;
     Symbol     = e.Symbol;
     Shares     = shares;
     Price      = e.MarketData.Close;
 }
Example #4
0
 /// <summary>
 /// BuySignal
 /// </summary>
 /// <param name="eventArgs"></param>
 /// <returns></returns>
 public override Events.BuyEventArgs BuySignal(MarketTickEventArgs eventArgs)
 {
     if (R.Random.Next(0, 100) <= 1)
     {
         return(Buy(10));
     }
     return(null);
 }
        public override void MarketTick(object sender, MarketTickEventArgs e)
        {
            base.MarketTick(sender, e);

            Idx++;
            previous13EMA = e.EMA13;
            previousMACD  = e.MACDHistogram;
        }
Example #6
0
 /// <summary>
 /// SellSignal
 /// </summary>
 /// <param name="eventArgs"></param>
 /// <returns></returns>
 public override Events.SellEventArgs SellSignal(MarketTickEventArgs eventArgs)
 {
     if (R.Random.Next(0, 100) <= 1)
     {
         return(Sell(10));
     }
     return(null);
 }
Example #7
0
        /// <summary>
        /// Market tick event invocator
        /// </summary>
        /// <param name="e">market tick event args</param>
        public MarketTickEventArgs OnMarketTickEvent(MarketTickEventArgs e)
        {
            if (MarketTickEvent != null && e != null)
            {
                MarketTickEvent(this, e);
            }

            return(e);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="eventArgs"></param>
        /// <returns></returns>
        private static SellEventArgs SellCondition(MarketTickEventArgs eventArgs)
        {
            if (eventArgs.RSI > 90)
            {
                return(new SellEventArgs(eventArgs.MarketData, MarketSimulator.Instance.Shares));
            }

            return(null);
        }
Example #9
0
        /// <summary>
        /// SellSignal
        /// </summary>
        /// <param name="eventArgs"></param>
        /// <returns></returns>
        public override Events.SellEventArgs SellSignal(MarketTickEventArgs eventArgs)
        {
            var sma50 = GetTechnicalValue <SMA50, double>();

            if (Math.Abs(sma50 - 0) > 0.001 && eventArgs.MarketData.Close < sma50)
            {
                return(new SellEventArgs(eventArgs, eventArgs.StrategyInfo.PositionData.SecurityShares(eventArgs.MarketData.Date, eventArgs.Symbol)));
            }

            return(null);
        }
 /// <summary>
 /// OnMarketTickEvent
 /// </summary>
 /// <param name="sender">event sender</param>
 /// <param name="eventArgs">event args</param>
 public void OnMarketTickEvent(object sender, MarketTickEventArgs eventArgs)
 {
     if (eventArgs.MarketData != null)
     {
         if (eventArgs.MarketData.IsValid)
         {
             Date = eventArgs.MarketData.Date;
             MarketTicks.Add(eventArgs);
         }
     }
 }
Example #11
0
        /// <summary>
        /// SellWhenDoubled
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public static SellEventArgs SellWhenNAVDoubledForSecurity(MarketTickEventArgs e)
        {
            var startingCash   = e.StrategyInfo.ParentSandbox.StartingCash;
            var securityNAV    = e.StrategyInfo.PositionData.SecurityValue(e.MarketData.Date, e.Symbol);
            var securityShares = e.StrategyInfo.PositionData.SecurityShares(e.MarketData.Date, e.Symbol);

            if (securityNAV > startingCash * 2)
            {
                return(new SellEventArgs(e, securityShares));
            }

            return(null);
        }
 /// <summary>
 /// SellSignal; the details of the sell signal are filled in by the concrete
 /// implementations.
 /// </summary>
 /// <param name="eventArgs">incoming market tick event arguments</param>
 /// <returns><c>possibly</c> a buy event; may be null to do hold or do nothing</returns>
 public override SellEventArgs SellSignal(MarketTickEventArgs eventArgs)
 {
     if (eventArgs.MarketData.HasNext && eventArgs.MarketData.Next.HasNext)
     {
         return(null);
     }
     else
     {
         if (inMarket.ContainsKey(eventArgs.Symbol) && inMarket[eventArgs.Symbol].InMarket)
         {
             return(Sell(inMarket[eventArgs.Symbol].Shares));
         }
     }
     return(null);
 }
        public override Events.BuyEventArgs BuySignal(MarketTickEventArgs eventArgs)
        {
            int maxShares = (int)(eventArgs.StrategyInfo.Cash / eventArgs.MarketData.Close);

            string symbol = eventArgs.Symbol;

            if (this[symbol].UpDays > this[symbol].StreakAverage)
            {
                if (maxShares > this[symbol].Streak)
                {
                    return(Buy(this[symbol].Streak));
                }
            }

            return(null);
        }
Example #14
0
        /// <summary>
        /// BuySignal
        /// </summary>
        /// <param name="eventArgs"></param>
        /// <returns></returns>
        public override Events.BuyEventArgs BuySignal(MarketTickEventArgs eventArgs)
        {
            var sma50 = GetTechnicalValue <SMA50, double>();

            if (Math.Abs(sma50 - 0) > 0.001)
            {
                if (eventArgs.MarketData.Close > sma50)
                {
                    var cashPerSecurity = eventArgs.StrategyInfo.Cash / eventArgs.SecuritiesData.Count;
                    var sharesToBuy     = (int)(cashPerSecurity / eventArgs.MarketData.Close);
                    return(new BuyEventArgs(eventArgs, sharesToBuy));
                }
            }

            return(null);
        }
        private static SellEventArgs SellCondition(MarketTickEventArgs eventArgs)
        {
            if (Idx % 5 != 0)
            {
                return(null);
            }


            if (eventArgs.EMA13 < previous13EMA && eventArgs.MACDHistogram < previousMACD)
            {
                bought = false;
                return(new SellEventArgs(eventArgs.MarketData, MarketSimulator.Instance.Shares));
            }
            else
            {
                return(null);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="eventArgs"></param>
        /// <returns></returns>
        private static BuyEventArgs BuyCondition(MarketTickEventArgs eventArgs)
        {
            BuyEventArgs buyEventArgs = null;



            if (eventArgs.RSI < 20)
            {
                buyEventArgs = new BuyEventArgs(eventArgs.MarketData, (int)eventArgs.RSI);
            }

            if (buyEventArgs != null && buyEventArgs.Shares == 0)
            {
                return(null);
            }

            return(buyEventArgs);
        }
        private static BuyEventArgs BuyCondition(MarketTickEventArgs eventArgs)
        {
            if (Idx % 5 != 0)
            {
                return(null);
            }


            if (!bought && eventArgs.EMA13 > previous13EMA && eventArgs.MACDHistogram > previousMACD)
            {
                var shares = (int)(MarketSimulator.Instance.Balance / eventArgs.MarketData.Close);
                bought = true;
                return(new BuyEventArgs(eventArgs.MarketData, shares));
            }
            else
            {
                return(null);
            }
        }
Example #18
0
        /// <summary>
        /// MarketTick
        /// </summary>
        /// <param name="sender">event sender</param>
        /// <param name="e">market Tick event arguments</param>
        public virtual StrategyMarketTickResult MarketTick(object sender, MarketTickEventArgs e)
        {
            // TODO: Determine if strategies should be prevented from buying AND selling in the same tick.
            // if not; determine precedence; for now it's sell first (for liquidity) and purchase 2nd.
            currentMarketTick = e;

            foreach (var technicalIndicator in TechnicalIndicators)
            {
                technicalIndicator.Value.MarketTick(e);
            }

            var s = SellSignal(e);
            var b = BuySignal(e);

            var thisHistory = new StrategyMarketTickResult(OnMarketTickEvent(e), OnBuyEvent(b), OnSellEvent(s));

            StrategyTickHistory.Add(thisHistory);

            return(thisHistory);
        }
Example #19
0
        /// <summary>
        /// MarketTick
        /// </summary>
        /// <returns></returns>
        public override void MarketTick(MarketTickEventArgs mktTickEventArgs)
        {
            if (historical.ContainsKey(mktTickEventArgs.MarketData.Date))
            {
                return;
            }

            #region FIFO Closing Price Queue of Period Size

            if (values.Count >= _period)
            {
                values.Dequeue();
            }

            values.Enqueue(mktTickEventArgs.MarketData.Close);

            #endregion

            // trap historical value for this tick

            historical.Add(mktTickEventArgs.MarketData.Date, Value);
        }
            /// <summary>
            /// Process
            /// </summary>
            /// <param name="e"></param>
            public void Process(MarketTickEventArgs e)
            {
                if (!e.Symbol.Equals(Security))
                {
                    return;
                }

                if (MarketData == null)
                {
                    MarketData = e.MarketData;

                    return;
                }

                if (e.MarketData.Close >= MarketData.Close)
                {
                    if (DownDays > 0)
                    {
                        Reset();
                    }

                    UpDays++;
                }
                else
                {
                    if (UpDays > 0)
                    {
                        Reset();
                    }

                    DownDays++;
                }

                StreakList.Add(Streak);

                MarketData = e.MarketData;
            }
 /// <summary>
 /// StrategyMarketTickResult
 /// </summary>
 /// <param name="e">market tick</param>
 /// <param name="b">buy result</param>
 /// <param name="s">sell result</param>
 public StrategyMarketTickResult(MarketTickEventArgs e, BuyEventArgs b, SellEventArgs s)
 {
     MarketTickEventArgs = e;
     BuyEventArgs        = b;
     SellEventArgs       = s;
 }
 public override Events.BuyEventArgs BuySignal(MarketTickEventArgs eventArgs)
 {
     return(Buy(10));
 }
Example #23
0
 /// <summary>
 /// BuyEventArgs
 /// </summary>
 /// <param name="marketTickEventArgs">the market tick event args</param>
 /// <param name="Shares">the number of Shares</param>
 public BuyEventArgs(MarketTickEventArgs marketTickEventArgs, int shares)
     : base(TradeType.Buy, marketTickEventArgs, shares)
 {
 }
Example #24
0
 /// <summary>
 /// SellSignal; the details of the sell signal are filled in by the concrete
 /// implementations.
 /// </summary>
 /// <param name="eventArgs">incoming market tick event arguments</param>
 /// <returns><c>possibly</c> a buy event; may be null to do hold or do nothing</returns>
 public abstract SellEventArgs SellSignal(MarketTickEventArgs eventArgs);
Example #25
0
 /// <summary>
 /// BuySignal; the details of the buy signal are filled in by the concrete
 /// implementations.
 /// </summary>
 /// <param name="eventArgs">incoming market tick event arguments</param>
 /// <returns><c>possibly</c> a buy event; may be null to do hold or do nothing</returns>
 public abstract BuyEventArgs BuySignal(MarketTickEventArgs eventArgs);
 /// <summary>
 /// MarketTick
 /// </summary>
 /// <returns></returns>
 public abstract void MarketTick(MarketTickEventArgs mktTickEventArgs);
 /// <summary>
 /// BuyEventArgs
 /// </summary>
 /// <param name="marketTickEventArgs">the market tick event args</param>
 /// <param name="Shares">the number of Shares</param>
 public SellEventArgs(MarketTickEventArgs marketTickEventArgs, int shares)
     : base(TradeType.Sell, marketTickEventArgs, shares)
 {
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 /// <returns></returns>
 public override StrategyMarketTickResult MarketTick(object sender, MarketTickEventArgs e)
 {
     return(base.MarketTick(sender, e));
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="eventArgs"></param>
 /// <returns></returns>
 public override Events.SellEventArgs SellSignal(MarketTickEventArgs eventArgs)
 {
     return(Signals.SellWhenNAVDoubledForSecurity(eventArgs));
 }
 public override Events.SellEventArgs SellSignal(MarketTickEventArgs eventArgs)
 {
     return(Sell(10));
 }