| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio NaN Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha NaN Beta NaN Annual Standard Deviation NaN Annual Variance NaN Information Ratio NaN Tracking Error NaN Treynor Ratio NaN Total Fees $0.00 |
namespace QuantConnect
{
public class RollingWindowAlgorithm // contains the EMAs for usage
{
public RollingWindowAlgorithm(){}
public RollingWindow<TradeBar> History = new RollingWindow<TradeBar>(5);
//MA's
public ExponentialMovingAverage _8EMA;
public ExponentialMovingAverage _20EMA;
}
}namespace QuantConnect
{
public class EMACrossLong : QCAlgorithm
{
RollingWindowAlgorithm _rwa = new RollingWindowAlgorithm(); // created instance of RollingWindow
string symbol = "MSFT";
//algorithm PnL settings
decimal targetProfit = 0.01m; // 1% target
decimal maximumLoss = 0.005m; // 0.5% stop
// Initialize function ----------------------------------------------------------------------------
public override void Initialize() // backtest kickstart
{
SetStartDate(2012, 3, 12);
SetEndDate(2015, 7, 28);
SetCash(25000);
AddSecurity(SecurityType.Equity, symbol, Resolution.Minute);
var fifteenConsolidator = new TradeBarConsolidator(TimeSpan.FromMinutes(15));
fifteenConsolidator.DataConsolidated += OnDataFifteen;
SubscriptionManager.AddConsolidator(symbol, fifteenConsolidator);
_rwa._8EMA = EMA(symbol, 8);
_rwa._20EMA = EMA(symbol, 20);
}
public bool MinimumProfitAchieved
{
get {return (Portfolio.TotalUnrealizedProfit / Portfolio.Cash) >= targetProfit;}
}
public bool MaximumLossAchieved
{
get {return (Portfolio.TotalUnrealizedProfit / Portfolio.Cash) <= -maximumLoss;}
}
// 15m timeframe handler -----------------------------------------------------------------------------
private void OnDataFifteen(object sender, TradeBar consolidated)
{
decimal profit = Portfolio.TotalUnrealizedProfit;
decimal price = consolidated.Close;
decimal high = consolidated.High;
int holdings = Portfolio[symbol].Quantity;
decimal avg = (consolidated.Open+consolidated.Close)/2;
decimal percentage = 0;
//Algorithm Entry Section:==========================================
//Entry Scenario Criteria ==========================================
// CM Check - Scenario 1: 8EMA Crossover 20EMA
while (holdings < 1)
{
if (_rwa._8EMA >= _rwa._20EMA)
{
if (_rwa.History[1].Close > _rwa.History[2].Close)
{
if (avg > _rwa.History[1].Close)
{
percentage = 1.5m;
SetHoldings(symbol, percentage);
}
}
}
}
//Algorithm Exit Section:===========================================
if (MinimumProfitAchieved)
{
Order(symbol, -holdings);
}
if (MaximumLossAchieved)
{
Order(symbol, -holdings);
}
}
}
}