private bool ExecuteAndModify(TraderCopierArguments arg) { var historicalTrade = _robot.History.FindLast(arg.Ticket); if (historicalTrade != null) { return(true); } var symbol = _robot.MarketData.GetSymbol(arg.SymbolCode); var normalizedVolume = symbol.NormalizeVolume(arg.Volume); var tradeResult = _robot.ExecuteMarketOrder(arg.TradeType, symbol, normalizedVolume, MT4CopierPrefix + arg.Ticket); if (tradeResult.Error == ErrorCode.NoMoney) { _noMoney = true; return(false); } ExecutedOperationsCount++; var success = tradeResult.IsSuccessful; if (tradeResult.IsSuccessful) { success &= UpdatePositionIfNeeded(tradeResult.Position, arg); } return(success); }
private bool ValidateFilter(TraderCopierArguments arg) { var tradeTypeEnabled = (arg.TradeType == TradeType.Buy && _robot.CopyBuy) || (arg.TradeType == TradeType.Sell && _robot.CopySell); if (!tradeTypeEnabled) { return(false); } return(_robot.SymbolsFilter.Length == 0 || _symbolsFilterArray.Contains(arg.SymbolCode.ToLowerInvariant())); }
private bool UpdatePositionIfNeeded(Position position, TraderCopierArguments arguments) { if (!_robot.CopyProtectionEnabled) { return(true); } var stopLossAbs = arguments.StopLossAbs; var takeProfitAbs = arguments.TakeProfitAbs; var sltpChanged = position.TakeProfit != takeProfitAbs || position.StopLoss != stopLossAbs; if (sltpChanged) { ExecutedOperationsCount++; return(_robot.ModifyPosition(position, stopLossAbs, takeProfitAbs).IsSuccessful); } return(true); }