Overall Statistics
Total Trades
2332
Average Win
0.18%
Average Loss
-0.20%
Compounding Annual Return
-9.110%
Drawdown
40.100%
Expectancy
-0.208
Net Profit
-38.004%
Sharpe Ratio
-2.08
Probabilistic Sharpe Ratio
0.000%
Loss Rate
59%
Win Rate
41%
Profit-Loss Ratio
0.94
Alpha
-0.075
Beta
0.051
Annual Standard Deviation
0.036
Annual Variance
0.001
Information Ratio
-1.246
Tracking Error
0.072
Treynor Ratio
-1.453
Total Fees
$6519.60
Estimated Strategy Capacity
$12000000.00
Lowest Capacity Asset
EURUSD 5O
namespace QuantConnect
{
    public class BootCampTask : QCAlgorithm
    {
    	Minimum lowBeforeOpen;
    	Maximum highBeforeOpen;
        public override void Initialize()
        {
            SetStartDate(2016, 6, 1);
            SetEndDate(2021, 6, 1);
            SetCash(100000);
            
            AddEquity("SPY", Resolution.Minute);
            AddForex("EURUSD", Resolution.Minute, Market.FXCM);
            
            Schedule.On(DateRules.EveryDay("SPY"), TimeRules.AfterMarketOpen("SPY", 0), MarketOpen);
            Schedule.On(DateRules.EveryDay("SPY"), TimeRules.BeforeMarketClose("SPY", 5), ClosePosition);
            
            SetTimeZone(TimeZones.NewYork);
            SetBrokerageModel(BrokerageName.FxcmBrokerage);
        }

        public override void OnData(Slice data)
        {
        	if (lowBeforeOpen == null || highBeforeOpen == null) return;
        	
        	if (Time.Hour >= 10 || Time.Minute < 31) return;
        	
        	if (data.ContainsKey("EURUSD") && !Portfolio.Invested)
        	{
				decimal currentPrice = data["EURUSD"].Close;
				if (currentPrice > highBeforeOpen)	
				{
					SetHoldings("EURUSD", 1);
				}
				else if (currentPrice < lowBeforeOpen)
				{
					SetHoldings("EURUSD", -1);
				}
        	}
        }
        
        public void MarketOpen()
        {
        	lowBeforeOpen = new Minimum(15);
        	highBeforeOpen = new Maximum(15);
        	var history = History<QuoteBar>("EURUSD", 15, Resolution.Minute);
        	foreach (var quoteBar in history)
        	{
        		lowBeforeOpen.Update(quoteBar.Time, quoteBar.Low);
        		highBeforeOpen.Update(quoteBar.Time, quoteBar.High);
        	}
        }
        
        public void ClosePosition()
        {
        	Liquidate("EURUSD");
        	lowBeforeOpen = null;
        	highBeforeOpen = null;
        }
    }
}