Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
namespace QuantConnect { public class FXCMBollengerBands : QCAlgorithm { private BollingerBands bollingerBands; private decimal _price; //private string security = "EURUSD"; private string security = "USDJPY"; private int consolidateMinutes = 15; private int cash = 25000; public override void Initialize() { //Start and End Date range for the backtest: SetStartDate(DateTime.Now.Date.AddDays(-60)); SetEndDate(DateTime.Now.Date.AddDays(-1)); //Cash allocation SetCash(cash); // FXCM Brokerage SetBrokerageModel(BrokerageName.FxcmBrokerage); AddSecurity(SecurityType.Forex, security, Resolution.Minute); Securities[security].SetLeverage(50.0m); // Setup BB Indicator bollingerBands = new BollingerBands(30, 3, MovingAverageType.Simple); // 15 min Trade bars var fifteenConsolidator = new TradeBarConsolidator(TimeSpan.FromMinutes(consolidateMinutes)); fifteenConsolidator.DataConsolidated += OnDataFifteen; SubscriptionManager.AddConsolidator(security,fifteenConsolidator); // Put it all together RegisterIndicator(security, bollingerBands, fifteenConsolidator, x => x.Value); SetWarmup(new TimeSpan(10, 0, 0, 0, 0)); // 10 Days } public void OnData(TradeBars data) { if (!data.ContainsKey(security)) { return; } // Placeholder } private void OnDataFifteen(object sender,TradeBar consolidated) { _price = consolidated.Close; if (!bollingerBands.IsReady) return; Plot("BB", "Price", _price); Plot("BB", bollingerBands.UpperBand, bollingerBands.MiddleBand, bollingerBands.LowerBand); decimal buy_signal = 0; decimal sell_signal = 0; if (!Portfolio.HoldStock) { var _buyPrice = bollingerBands.LowerBand; var _buySignal = consolidated.Close < _buyPrice; if (_buySignal) { var orderSize = (CalculateOrderQuantity(security,1.0m) / 1000) * 1000; // FXCM Required ordering in multiples of 1000 for standard and mini accounts https://www.fxcm.com/accounts/account-types/ Order(security, orderSize); buy_signal = _price; } } else { var _sellPrice = bollingerBands.UpperBand; var _sellSignal =consolidated.Close > _sellPrice; if (_sellSignal) { Liquidate(security); sell_signal = _price; } } } } }