| Overall Statistics |
|
Total Trades 11 Average Win 0.33% Average Loss 0% Compounding Annual Return -16.087% Drawdown 22.900% Expectancy 0 Net Profit -9.781% Sharpe Ratio -0.506 Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha -0.122 Beta -0.24 Annual Standard Deviation 0.229 Annual Variance 0.052 Information Ratio -0.304 Tracking Error 0.3 Treynor Ratio 0.483 Total Fees $11.00 |
namespace QuantConnect
{
/*
Designed as a "first use" algorithm by a trader new to robotic trading, with a cash
trading account of minimal size. Does not use leverage or margin and waits 4 days from
sell date to next purchase date to allow for funds settlement by the broker. Does not
make a lot of money, but does not lose. It may however leave you holding stock for a long
time if you choose a stock that is falling, never to come back (oops!).
Happy trading!
*/
public class BeginnerAlgo : QCAlgorithm
{
private string symbol = "AAPL";
private SimpleMovingAverage slow;
private ExponentialMovingAverage fast;
private decimal sellPrice = 0m;
private DateTime currentDate;
private DateTime nextTradeDate;
public override void Initialize()
{
// set up our analysis span
SetStartDate(2015, 6, 1);
SetEndDate(2015, 12, 31);
SetCash(1000);
// request "symbol's" data with minute resolution
AddSecurity(SecurityType.Equity, symbol, Resolution.Minute);
// create a 20 minute simple moving average
slow = SMA(symbol, 20, Resolution.Minute);
// create a 5 minute exponential moving average
fast = EMA(symbol, 5, Resolution.Minute);
}
public void OnData(TradeBars data)
{
// wait for our slow SMA to fully initialize
if (!slow.IsReady) return;
var holdings = Portfolio[symbol].Quantity;
decimal currentPrice = data[symbol].Close;
currentDate = Time.Date;
// make sure we have no short positions (shouldn't be necessary, but doesn't hurt)
if (holdings < 0)
{
Liquidate(symbol);
}
// if we hold no stock, and 4 days have passed since our last sale, and
// the EMA is greater than the SMA, we'll go long
if (!Portfolio.HoldStock && currentDate >= nextTradeDate && fast > slow)
{
SetHoldings(symbol, 1.0);
Log("BUY >> " + Securities[symbol].Price);
// set sell price for 50 cents per share profit
sellPrice = Portfolio[symbol].AveragePrice + 0.50m;
}
// if we hold stock, and we have reached our target sell price, we'll liquidate our position
if (Portfolio.HoldStock && currentPrice > sellPrice)
{
Liquidate(symbol);
Log("SELL >> " + Securities[symbol].Price);
// set next possible trade date for 4 days out to allow for settlement
nextTradeDate = currentDate.AddDays(4);
}
}
}
}