Hi there,

I'm pretty new to quantconnect and algo trading. I've ran some backtestes and I'd like to use it for paper trading but  I'm wondering about this 2 lines:

 

            SetStartDate(2015, 11, 4);
            SetEndDate(2016, 11, 4);

 

Do I need to remove them? Will the algo start trading as soon it's deployed or do I need to change any code to move it from backtesting to live trading? Here's the compelte code ( it's small compared to other algos)
 

//Copyright Warren Harding 2016.
//Use entirely at your own risk.
//Custom algorithm development: warrencharding@yahoo.com.
//Do not remove this copyright notice.

using System;
using System.Collections.Generic;
using QuantConnect.Data.Market;
using QuantConnect.Orders;
using QuantConnect.Orders.Fees;
using QuantConnect.Orders.Fills;
using QuantConnect.Orders.Slippage;
using QuantConnect.Securities;
namespace QuantConnect
{
public class Algo4 : QCAlgorithm
{
//You can adjust this first set to optimize.
int maPeriod = 60;
int rsiPeriod = 3;
decimal rsiBuyCutoff=50;
decimal rsiSellCutoff=50;
decimal lowerBandRatio=0.9m;
decimal upperBandRatio = 1.1m;
//decimal maximumTrade=25000;
decimal maximumTrade=2500;
decimal minimumTrade = 1000m;

//Your broker is going to hate you if you set these too low as it will result in large amounts of unfilled
//order cancellations. It bogs down LEAN as well.
int barsToHoldBuyOrdersFor=0;
int barsToHoldSellOrdersFor=0;

Resolution resolution = Resolution.Daily;

decimal ratioOfDollarVolumeForMaxTrade;

Dictionary<string,RelativeStrengthIndex> rsisBuy=new Dictionary<string,RelativeStrengthIndex>();
Dictionary<string,RelativeStrengthIndex> rsisSell=new Dictionary<string,RelativeStrengthIndex>();
Dictionary<string,ExponentialMovingAverage> movingAverages=new Dictionary<string,ExponentialMovingAverage>();
Dictionary<string,OrderTicket> buyOrders=new Dictionary<string,OrderTicket>();
Dictionary<string,int> buyOrderCounts = new Dictionary<string,int>();
Dictionary<string,decimal> buyOrderPrices = new Dictionary<string,decimal>();
Dictionary<string,OrderTicket> sellOrders=new Dictionary<string,OrderTicket>();
Dictionary<string,int> sellOrderCounts = new Dictionary<string,int>();
public override void Initialize()
{
//SetStartDate(2011, 9, 30);
//SetEndDate(2016, 9, 30);
SetStartDate(2015, 11, 4);
SetEndDate(2016, 11, 4);

SetCash(10000);
//SetCash(100000);

//s&p 500, by sorted by volatility
//string tickersString ="CHK,DO,ENDP,MUR,SWN,FCX,RIG,NRG,MRO,NEM,RRC,CF,MU,APA,VRTX,FOSL,APC,WDC,DVN,MOS,FTR,MNK,VIAB,WYNN,UAL,FSLR,TSO,NFX,HP,HES,NAVI,AAL,SIG,ALXN,STX,SWKS,MPC,NOV,URI,NBL,QRVO,WMB,HOG,JWN,DAL,OI,PXD,OKE,MYL,NVDA,RCL,CXO,TGNA,COG,XEC,HPE,ETFC,EOG,KSS,GPS,REGN,HRB,HAL,AVGO,PRGO,BHI,UA,M,ADS,CSC,URBN,KMI,AA,COP,PYPL,KORS,LUV,EQT,VLO,FTI,FMC,DISCA,JCI,LNC,SE,ALK,NUE,VMC,AMG,AES,LEN,CNC,SPLS,WRK,BWA,HAR,TDC,CBG,GT,R,KMX,HST,ZION,ALB,AN,TIF,RF,CBS,CMG,NFLX,MLM,DISCK,SCHW,LM,EXPE,BBBY,DHI,COH,VRSN,ILMN,FLS,DLPH,JNPR,PHM,NTAP,MAR,FTV,CFG,CHTR,TRIP,NWSA,BAC,BEN,AMAT,AGN,MET,YHOO,HCP,MS,ADSK,WHR,HPQ,WY,BIIB,KEY,VTR,LYB,CMA,VFC,LUK,LRCX,DLR,DG,LB,CELG,AIV,RL,PVH,AYI,MCK,ULTA,IVZ,ATVI,MJN,CCL,IR,SNI,IPG,FITB,FFIV,UNM,HCA,BBY,HBAN,SYF,SLG,ESS,KR,DLTR,DUK,FE,BMY,TAP,KSU,O,EQIX,LVLT,C,GRMN,MCHP,GWW,PWR,PDCO,EXR,MAS,CNP,SYMC,FLR,CRM,BF-B,STI,SCG,HCN,CSX,FOXA,IP,HOLX,VNO,PLD,EQR,KLAC,GGP,WFC,AKAM,UHS,UDR,CTL,PKI,NI,JEC,GPN,NWL,BSX,MDLZ,SEE,CTSH,SRCL,ADI,SRE,IRM,COF,PBI,AAPL,DOV,PRU,CMI,PNR,GM,GS,WFM,MAT,FBHS,HBI,EA,CTXS,PEG,JBHT,PCAR,RHT,AVB,OXY,STT,PSA,EMN,AMP,PFG,ANTM,WLTW,CCE,MAC,LNT,NSC,KIM,F,MON,XYL,RAI,TSCO,MNST,HRL,PPL,EW,LKQ,MTD,ETR,AZO,EBAY,KHC,FAST,DTE,HIG,AWK,NKE,SPGI,SYK,SLB,TSS,NEE,GILD,XRX,BLK,PNC,INTC,EXC,CCI,CERN,AEE,ETN,XRAY,ACN,FL,AAP,MCO,ESRX,ABT,CPB,ALLE,GPC,BK,CAH,GIS,LEG,XEL,WEC,DD,DGX,TXN,CMS,WAT,BXP,UNP,QCOM,ADM,WYN,FRT,ABC,AXP,AMT,HAS,NTRS,TDG,SPG,CVX,FDX,TWX,CHRW,XLNX,CA,RHI,PBCT,BAX,PNW,ES,T,EMR,CI,AMGN,DNB,TMO,DRI,BBT,CAT,ROK,MHK,WBA,TXT,ED,PSX,CME,ROST,PH,EIX,TSN,A,TGT,ZBH,HOT,PCG,AEP,LOW,TROW,PPG,PCLN,D,SHW,STZ,XL,CAG,DVA,XOM,MTB,HSIC,ABBV,BA,ADBE,ROP,ITW,HRS,PX,VZ,MRK,LH,PG,VAR,PM,BCR,L,SYY,LLY,HSY,SJM,TEL,DFS,MSFT,BDX,WU,FB,CSCO,UTX,AIZ,APD,NDAQ,DE,SO,JPM,NLSN,AET,OMC,FLIR,ORCL,UNH,FISV,IBM,EXPD,HD,AMZN,DHR,CMCSA,DOW,EFX,ISRG,LLL,FIS,MO,HON,HUM,COST,INTU,PAYX,SBUX,MKC,COL,CHD,CTAS,ECL,ZTS,AIG,PFE,AVY,PGR,USB,AME,BLL,APH,K,CVS,SNA,CINF,YUM,GD,TJX,EL,MDT,ORLY,WMT,DPS,ADP,MA,GE,GLW,ICE,GOOGL,CLX,SWK,KMB,GOOG,AFL,TRV,AON,RSG,VRSK,BRK-B,IFF,MSI,RTN,DIS,MMC,LMT,KO,STJ,TMK,V,CL,NOC,PEP,MCD,MMM,WM,ALL,UPS,JNJ,LLTC";
//string tickersString ="FB,GOOG,NFLX,AMZN";
string tickersString ="CHK,DO,ENDP,MUR,SWN";

string[] tickers = tickersString.Split(new string[1] { "," }, StringSplitOptions.RemoveEmptyEntries);
foreach (string ticker in tickers)
{
AddSecurity(SecurityType.Equity,ticker,resolution);
}
foreach (Security s in Securities.Values)
{
s.FeeModel=new CustomFeeModel();
movingAverages.Add(s.Symbol,EMA(s.Symbol,maPeriod,resolution));
rsisBuy.Add(s.Symbol,RSI(s.Symbol,rsiPeriod,MovingAverageType.Exponential,resolution));
rsisSell.Add(s.Symbol,RSI(s.Symbol,rsiPeriod,MovingAverageType.Exponential,resolution));
}

//Be careful adjusting this next one, too high of a setting will result in unrealistically large
//purchases being made with no regards for slippage.
if (resolution == Resolution.Daily)
{
ratioOfDollarVolumeForMaxTrade = .25m / 6.5m / 60m;
}
else
{
ratioOfDollarVolumeForMaxTrade = .25m;
}
}

public void OnData(TradeBars data)
{
Buy(data);
Sell(data);
}

public void Buy(TradeBars data)
{
CancelBuyOrders();
int quantity = 0;
decimal maxTrade;
OrderTicket orderTicket;
decimal buyPrice;
foreach (TradeBar bar in data.Values)
{
if (Portfolio.Cash - SumBuyOrders(buyOrders,buyOrderPrices) < minimumTrade)
{
break;
}
if (!Portfolio[bar.Symbol].HoldStock & movingAverages[bar.Symbol].IsReady)
{
maxTrade=bar.Close*bar.Volume*ratioOfDollarVolumeForMaxTrade;
if (maxTrade>maximumTrade)
{
maxTrade=maximumTrade;
}
quantity =(int)Math.Floor(Math.Min(Portfolio.Cash-SumBuyOrders(buyOrders,buyOrderPrices), maxTrade) / bar.Close);
quantity=RoundLot(quantity);
if (quantity * bar.Close > minimumTrade & quantity > 0)
{
if (buyOrders.ContainsKey(bar.Symbol) == false)
{
buyPrice=movingAverages[bar.Symbol]*lowerBandRatio;
if (bar.Close<buyPrice & rsisBuy[bar.Symbol]>rsiBuyCutoff)
{
buyPrice=bar.Close;
orderTicket = LimitOrder(bar.Symbol, quantity,buyPrice);
buyOrders.Add(bar.Symbol,orderTicket);
buyOrderCounts.Add(bar.Symbol,0);
buyOrderPrices.Add(bar.Symbol,buyPrice);
}
}
}
}
}
foreach (string key in buyOrderCounts.Keys.ToList())
{
buyOrderCounts[key] = buyOrderCounts[key] + 1;
}
}

public void Sell(TradeBars data)
{
CancelSellOrders();
decimal sellPrice;
TradeBar bar;
OrderTicket orderTicket;

foreach (SecurityHolding stock in Portfolio.Values)
{
if (Portfolio[stock.Symbol].Quantity > 0 & data.ContainsKey(stock.Symbol))
{
bar = data[stock.Symbol];
if (sellOrders.ContainsKey(stock.Symbol)==false)
{
sellPrice = movingAverages[stock.Symbol] * upperBandRatio;
if (bar.Close>sellPrice & rsisSell[stock.Symbol]<rsiSellCutoff)
{
sellPrice=bar.Close;
orderTicket = LimitOrder(stock.Symbol, -Portfolio[stock.Symbol].Quantity, sellPrice);
sellOrders.Add(stock.Symbol,orderTicket);
sellOrderCounts.Add(stock.Symbol,0);
}
}
}
}
foreach (string key in sellOrderCounts.Keys.ToList())
{
sellOrderCounts[key] = sellOrderCounts[key] + 1;
}
}

public void CancelBuyOrders()
{
string[] symbols=buyOrders.Keys.ToArray();
foreach (string symbol in symbols)
{
if (buyOrderCounts[symbol]>barsToHoldBuyOrdersFor)
{
buyOrders[symbol].Cancel();
buyOrders.Remove(symbol);
buyOrderCounts.Remove(symbol);
buyOrderPrices.Remove(symbol);
}
}
symbols=buyOrders.Keys.ToArray();
foreach (string symbol in symbols)
{
if (buyOrders[symbol].Status == OrderStatus.Filled)
{
buyOrders.Remove(symbol);
buyOrderCounts.Remove(symbol);
buyOrderPrices.Remove(symbol);
}
}
}

public void CancelSellOrders()
{
string[] symbols=sellOrders.Keys.ToArray();
foreach (string symbol in symbols)
{
if (sellOrderCounts[symbol]>barsToHoldSellOrdersFor)
{
sellOrders[symbol].Cancel();
sellOrders.Remove(symbol);
sellOrderCounts.Remove(symbol);
}
}
symbols=sellOrders.Keys.ToArray();
foreach (string symbol in symbols)
{
if (sellOrders[symbol].Status == OrderStatus.Filled)
{
sellOrders.Remove(symbol);
sellOrderCounts.Remove(symbol);
}
}
}

public static decimal SumBuyOrders(Dictionary<string,OrderTicket> buyOrders, Dictionary<string,decimal> buyOrderPrices)
{
decimal sum=0;
foreach (string key in buyOrders.Keys.ToList())
{
sum += buyOrders[key].Quantity * buyOrderPrices[key];
}
return sum;
}

public static int RoundLot(int inOddLotQuantity)
{
decimal inQuantity = (decimal)inOddLotQuantity;
if (inQuantity > 2000000)
{
decimal small = inQuantity / 1000000;
small = Math.Floor(small);
return (int)(small * 1000000);
}
if (inQuantity > 200000)
{
decimal small = inQuantity / 100000;
small = Math.Floor(small);
return (int)(small * 100000);
}
if (inQuantity > 20000)
{
decimal small = inQuantity / 10000;
small = Math.Floor(small);
return (int)(small * 10000);
}
if (inQuantity > 2000)
{
decimal small = inQuantity / 1000;
small = Math.Floor(small);
return (int)(small * 1000);
}
if (inQuantity > 200)
{
decimal small = inQuantity / 100;
small = Math.Floor(small);
return (int)(small * 100);
}
if (inQuantity > 20)
{
decimal small = inQuantity / 10;
small = Math.Floor(small);
return (int)(small * 10);
}
return inOddLotQuantity;
}


}

public class CustomFeeModel : IFeeModel
{
public decimal GetOrderFee(Security security, Order order)
{
decimal fee = order.AbsoluteQuantity*0.01m;
if (fee<5)
{
fee=5;
}
if (fee>10)
{
fee=10;
}
return fee;
}
}
}