Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return -41.206% Drawdown 7.500% Expectancy 0 Net Profit 0% Sharpe Ratio -5.267 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.295 Beta -0.226 Annual Standard Deviation 0.067 Annual Variance 0.004 Information Ratio -4.948 Tracking Error 0.124 Treynor Ratio 1.563 Total Fees $2.00 |
namespace QuantConnect.Algorithm.Examples { /// <summary> /// </summary> public class QCUMovingAverageCross : QCAlgorithm { private const string symbol = "EURUSD"; private ExponentialMovingAverage fast; private ExponentialMovingAverage slow; private AverageTrueRange atr; private SimpleMovingAverage ma50; private SimpleMovingAverage ma100; private OrderTicket orderLong = null; private OrderTicket orderShort = null; private decimal price; private SimpleMovingAverage ma100_h1; private SimpleMovingAverage ma100_m30; private SimpleMovingAverage ma100_m15; private SimpleMovingAverage ma50_m30; public override void Initialize() { // set up our analysis span SetStartDate(2016, 11, 01); SetEndDate(2016, 12, 01); SetCash(1000); AddSecurity(SecurityType.Forex, symbol, Resolution.Minute); SetRunMode(RunMode.Series); price = Securities[symbol].Price; fast = EMA(symbol, 15, Resolution.Minute); slow = EMA(symbol, 50, Resolution.Hour); ma100_h1 = SMA(symbol, 900, Resolution.Minute); ma100_m30 = SMA(symbol, 450, Resolution.Minute); ma100_m15 = SMA(symbol, 225, Resolution.Minute); ma50_m30 = SMA(symbol, 225, Resolution.Minute); atr = ATR(symbol, 450, MovingAverageType.Simple, Resolution.Minute); } private DateTime previous; public void OnData(TradeBars data) { if (!slow.IsReady) return; var qty = Portfolio[symbol].Quantity; //Debug("qty: " + qty); price = Securities[symbol].Price; // define a small tolerance on our checks to avoid bouncing var atrLoss = atr * 0.3m; var atrProfit = atr * 0.15m; var stopLoss = Securities[symbol].Price - atrLoss; var takeProfit = Securities[symbol].Price + atrProfit; if (enterLong()) { Debug("long symbol " + Securities[symbol].Price + " SL: " + stopLoss + " TP: " + takeProfit); orderLong = StopLimitOrder(symbol, 1000, stopLoss, takeProfit, "test"); } /*if (enterShort()) { Debug("short symbol " + Securities[symbol].Price + " SL: " + stopLoss + " TP: " + takeProfit); orderShort = StopLimitOrder(symbol, -1000, stopLoss, takeProfit, "test"); }*/ if (orderLong != null) { Debug(orderLong.Status.ToString()); decimal stopPrice = orderLong.Get(OrderField.StopPrice); var newStopPrice = stopPrice; //decimal limitPrice = orderLong.Get(OrderField.LimitPrice); //var newLimitPrice = limitPrice; if (stopPrice > stopLoss) { Debug("Price: " + price); orderLong.Update(new UpdateOrderFields{StopPrice = newStopPrice}); Debug("orderLong modified - SL: " + stopPrice); } // Liquidate(); } previous = data.Time; } bool enterShort() { if (orderShort != null) return false; return true; } bool enterLong() { const decimal tolerance = 0.00015m; if (orderLong != null) return false; //if (fast > slow * (1 + tolerance)) return true; if ((price > ma100_h1 * (1 + tolerance)) && (price > ma100_m30 * (1 + tolerance)) && (price > ma100_m15 * (1 + tolerance)) && (ma100_m30 > ma50_m30)) { return true; } return false; } } }
namespace QuantConnect { // // Make sure to change "BasicTemplateAlgorithm" to your algorithm class name, and that all // files use "public partial class" if you want to split up your algorithm namespace into multiple files. // //public partial class BasicTemplateAlgorithm : QCAlgorithm, IAlgorithm //{ // Extension functions can go here...(ones that need access to QCAlgorithm functions e.g. Debug, Log etc.) //} //public class Indicator //{ // ...or you can define whole new classes independent of the QuantConnect Context //} }
namespace QuantConnect { // // Make sure to change "BasicTemplateAlgorithm" to your algorithm class name, and that all // files use "public partial class" if you want to split up your algorithm namespace into multiple files. // //public partial class BasicTemplateAlgorithm : QCAlgorithm, IAlgorithm //{ // Extension functions can go here...(ones that need access to QCAlgorithm functions e.g. Debug, Log etc.) //} //public class Indicator //{ // ...or you can define whole new classes independent of the QuantConnect Context //} }