Overall Statistics |
Total Trades 370 Average Win 0.06% Average Loss -0.07% Annual Return -13.672% Drawdown 13.100% Expectancy -0.550 Net Profit -13.075% Sharpe Ratio -6.6 Loss Rate 75% Win Rate 25% Profit-Loss Ratio 0.83 Trade Frequency Daily trades |
using System; using System.Collections; using System.Collections.Generic; using System.Linq; namespace QuantConnect { using QuantConnect.Securities; using QuantConnect.Models; /** * Simple Moving Average Cross **/ public partial class BasicTemplateAlgorithm : QCAlgorithm, IAlgorithm { string symbol = "SPY"; decimal volumeTrigger = 500000; //(decimal)Math.Pow(10, 5); //15000 * 8; //35 * 35; decimal liquidityTrigger = 500000; //(decimal)Math.Pow(10, 5); //15000 * 8; //4 -4 Parallel //Initialize the data and resolution you require for your strategy: public override void Initialize() { //Initialize the start, end dates for simulation; cash and data required. SetStartDate(2013, 06, 01); //(2014, 01, 20); SetEndDate(DateTime.Now.Date.AddDays(-1)); SetCash(30000); //Starting Cash in USD. AddSecurity(SecurityType.Equity, symbol, Resolution.Second); //Minute, Second or Tick SetRunMode(RunMode.Parallel); //Series or Parallel for intraday strategies. } //Handle TradeBar Events: a TradeBar occurs on a time-interval (second or minute bars) public override void OnTradeBar(Dictionary<string, TradeBar> data) { if (data.ContainsKey(symbol)) { TradeBar tradeBar = data[symbol]; decimal modelVolume = tradeBar.Volume; decimal modelLiquidity = tradeBar.Volume * Math.Sign(tradeBar.Close - tradeBar.Open); //Debug("modelVolume=" + modelVolume + ", modelLiquidity=" + modelLiquidity); //CHECK ENTER if (Portfolio[symbol].Quantity == 0) { if((Math.Abs(modelLiquidity) > liquidityTrigger) && (modelVolume > volumeTrigger)) { //Debug("modelVolume=" + modelVolume + ", modelLiquidity=" + modelLiquidity); int entry_side = Math.Sign(modelLiquidity); Order(symbol, entry_side * 50, OrderType.Market); } } //CHECK EXIT LONG else if (Portfolio[symbol].Quantity > 0) { if((Math.Abs(modelLiquidity) > liquidityTrigger) && (modelVolume > volumeTrigger)) { //Debug("modelVolume=" + modelVolume + ", modelLiquidity=" + modelLiquidity); int entry_side = Math.Sign(modelLiquidity); if (entry_side < 0) { Order(symbol, entry_side * 50, OrderType.Market); } } } //CHECK EXIT SHORT else if (Portfolio[symbol].Quantity < 0) { if((Math.Abs(modelLiquidity) > liquidityTrigger) && (modelVolume > volumeTrigger)) { //Debug("modelVolume=" + modelVolume + ", modelLiquidity=" + modelLiquidity); int entry_side = Math.Sign(modelLiquidity); if (entry_side > 0) { Order(symbol, entry_side * 50, OrderType.Market); } } } } } } }