Hi guys,

I am trying to write a simple algorithm that buys a stock if it falls a certain amount, and sells it if the price goes above the price at which it was bought by a certain amount. unfortunately cannot work out how to keep purchase price as a constant variable over time. I would be extremely grateful if someone could show me how to do this!

 

Best

Hugo

namespace QuantConnect.Algorithm.CSharp { public class buythedip : QCAlgorithm { //Member variables private static Symbol _google = QuantConnect.Symbol.Create("GOOGL", SecurityType.Equity, Market.USA); private int ForwardLookingPeriod = 25; private int BackwardLookingPeriod = 25; private decimal fallAmount = Convert.ToDecimal(0.1); private decimal riseAmount = Convert.ToDecimal(0.05); private int minutesToExecute = 10; private decimal relevantPrice; private RollingWindow<decimal> _close_window; public Boolean cash; public Boolean buyTrigger; public Boolean sellTrigger; public override void Initialize() { SetStartDate(2013,01,01); SetEndDate(2018,02,01); SetCash(30000); AddEquity(_google, Resolution.Daily); _close_window = new RollingWindow<decimal>(BackwardLookingPeriod); IEnumerable<TradeBar> slices = History(_google, BackwardLookingPeriod); foreach (TradeBar bar in slices) { _close_window.Add(bar.Close); } Debug(_close_window[0]); Console.WriteLine("Hugo Lu"); Schedule.On(DateRules.EveryDay(_google), TimeRules.AfterMarketOpen(_google,minutesToExecute), //Execute the function at the start of the day // x minutes in.... EveryDayOnMarketOpen); }//Initialize end public void EveryDayOnMarketOpen(){ //Define the bad boy //Sanity Check; are there open orders? if (Transactions.GetOpenOrders().Count > 0) { return; } //Get information about however many periods ago IEnumerable<TradeBar> slices = History(_google,BackwardLookingPeriod) ; TradeBar BarOfInterest = slices.First(); decimal relevantClose = BarOfInterest.Close; decimal yestClose = slices.Last().Close; decimal fallPercent = 1 - (yestClose/relevantClose); //Is it time to buy? if(fallPercent > fallAmount && Portfolio.Cash > 100 ) { buyTrigger = true; relevantPrice = yestClose; } else { buyTrigger = false; relevantPrice = 0; }; if(buyTrigger) {SetHoldings(_google,1); } //Is it time to sell? if( ((yestClose / relevantPrice)-1)> riseAmount) { sellTrigger = true; } else { sellTrigger = false;}; if(sellTrigger) { Liquidate(); }; } } }

 

Author