/// <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; }
/// <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; }
/// <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); }
/// <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); }
/// <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); } } }
/// <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); }
/// <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); } }
/// <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); }
/// <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)); }
/// <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) { }
/// <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);
/// <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)); }