/// <summary> /// Closes the trade if price crosses the upper/lower bollinger band. /// </summary> /// <param name="candles">candle history</param> /// <param name="bar">currentcandle</param> /// <param name="tradeManager">tradeManager</param> private void CloseTradeIfPossible(List <MarketCandle> candles, int bar, ITradeManager tradeManager) { var candle = candles[bar]; var bbands = new BollingerBands(candles, bar); // for long we close the trade if price gets above the upper bollinger bands if (_trade.TradeType == TradeType.Long && candle.HighPrice > bbands.Upper) { if (tradeManager.Close(_trade, candle.HighPrice)) { _state = StrategyState.Scanning; _trade = null; return; } } // for short we close the trade if price gets below the lowe bollinger bands if (_trade.TradeType == TradeType.Short && candle.LowPrice < bbands.Lower) { if (tradeManager.Close(_trade, candle.LowPrice)) { _state = StrategyState.Scanning; _trade = null; return; } } }
private void ClosePosition(double[] ema) { var currentBar = _chart.Current; var position = _tradeManager.GetOrders(_magicNumber).Select(x => x.Type).Single(); switch (position) { case OrderType.Buy when SellSignal(ema): case OrderType.Sell when BuySignal(ema): _tradeManager.Close(_chart, currentBar.Open, _magicNumber); break; } }