Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
using QuantConnect.Securities; using QuantConnect.Orders.Fees; using QuantConnect.Notifications; using QuantConnect.Orders; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; using System.Linq; namespace QuantConnect { public class BasicTemplateAlgorithm : QCAlgorithm { //Initialize the data and resolution you require for your strategy: string symbol = "IMI"; int _quantity; decimal _pct; decimal _thirds; //decimal _takeProfit; bool trigger = false; bool first = true; static string globalString; //OrderTicket _stopLoss; //const decimal _tailingPercent = 0.05m; //const decimal _stopLossFactor = 1 - _tailingPercent; static readonly decimal EqualWeightPercentage = 1m/3; //private ISecurityProvider _securityProvider; public override void Initialize() { //Start and End Date range for the backtest: SetBrokerageModel(BrokerageName.TradierBrokerage, AccountType.Cash); SetStartDate(2016, 03, 7); SetEndDate(DateTime.Now.Date.AddDays(-1)); //Cash allocation SetCash(2750); var thirds = Portfolio.Cash/3 * .05m; var threePct = Portfolio.Cash/3 * .03m; //_takeProfit = threePct; _pct = Portfolio.Cash/3 + threePct; _thirds = Portfolio.Cash/3 - thirds; //Add as many securities as you like. All the data will be passed into the event handler: AddSecurity(SecurityType.Equity, symbol, Resolution.Second); } //Data Event Handler: New data arrives here. "TradeBars" type is a dictionary of strings so you can access it by symbol. public void OnData(TradeBars data, ISecurityProvider _securityProvider) { // "TradeBars" object holds many "TradeBar" objects: it is a dictionary indexed by the symbol: // // e.g. data["MSFT"] data["GOOG"] var symPrice = data[symbol].Price; var skimProfits = _quantity * symPrice; var readableProfits = skimProfits - Portfolio.Cash; var time = DateTime.Now; string messageString = String.Format("Symbol: {0}\tTime: {1}\tPrice: {2}\tProfit: {3}", symbol, time.ToString(), symPrice.ToString(), readableProfits.ToString()); globalString = messageString; if (!Portfolio.HoldStock) { int quantity = (int)Math.Floor(Portfolio.Cash / data[symbol].Close / 3); _quantity = quantity; //Order function places trades: enter the string symbol and the quantity you want: if ( first)//Time.Hour==9 && Time.Minute == 30 && Time.Second== 01) { first = false; Order(symbol, quantity); Notify.Sms("+15126454560", "Buy " + messageString); } //Debug sends messages to the user console: "Time" is the algorithm time keeper object //Debug("Purchased SPY on " + Time.ToShortDateString()); //You can also use log to send longer messages to a file. You are capped to 10kb //Log("This is a longer message send to log."); } //Log("skim " + skimProfits); //Log("three " + _pct); // set trigger equal to true if profits are greater than 3 percent of invested portfolio cash if (Portfolio.HoldStock && skimProfits > _pct) { trigger = true; //Order(symbol, -_quantity); Notify.Sms("+15126454560", "The trigger price has been reached!"); } //start stop loss calculations //if (trigger = true) //{ //var profits = Portfolio.TotalUnleveredAbsoluteHoldingsCost; //_stopLoss = StopMarketOrder(symbol, -_quantity, Securities[symbol].Price*_stopLossFactor); //take profit if stock is falling //if(skimProfits < _pct) //{ //Order(symbol, -_quantity); //} //} var highPrice = _quantity * data[symbol].High; var newStopLoss = highPrice * .03m; var newStopLosss = newStopLoss * .10m; var highPriceStop = newStopLoss - newStopLosss; var currentPriceStop = skimProfits *.03m; //Log("" + currentPriceStop); //Log("" + highPriceStop); //Log("skim" + skimProfits); //Log("third" + _thirds); //var getSecurity = _securityProvider.GetSecurity(symbol); var holdingQuantity = _securityProvider.GetHoldingsQuantity(symbol); Log("q" + holdingQuantity); //Log("p" + symPrice); if (trigger == true && currentPriceStop < highPriceStop) { Notify.Sms("+15126454560", "Gain Sell " + globalString); Order(symbol, -_quantity); } // sell if profits go below 5% invested portfolio cash if (Portfolio.HoldStock && skimProfits < _thirds) { Notify.Sms("+15126454560", "Loss Sell " + globalString); Order(symbol, -_quantity); } // sell on close if ( Portfolio.HoldStock && Time.Hour==15 && Time.Minute==59 && Time.Second==58 ) { Notify.Sms("+15126454560", "End Of Day Sell " + globalString); Order(symbol, -_quantity); } /*if (_stopLoss != null && !_stopLoss.Status.IsFill()) { var currentStopLoss = _stopLoss.Get(OrderField.StopPrice); var newStopLoss = Securities[symbol].Price*_stopLossFactor; if (newStopLoss > currentStopLoss) { _stopLoss.Update(new UpdateOrderFields { StopPrice = newStopLoss }); } Plot(symbol, "Stop", _stopLoss.Get(OrderField.StopPrice)); }*/ } } }