/// <summary> /// Executes all the logic when the Enter Signal is triggered /// </summary> /// <param name="data"></param> public void EnterTradeSignal(TradeBar data, Security symbol) { EnterSignal.Scan(data); if (symbol.IsTradable && EnterSignal.Signal == SignalType.Long || EnterSignal.Signal == SignalType.Short) { //Creates a new trade profile once it enters a trade var profile = new TradeProfile(_symbol, _security.VolatilityModel.Volatility, _risk, data.Close, _maximumTradeSize); profile.ExitSignal = ExitSignal.ExitSignalFactory(profile); var profileQuantity = profile.Quantity; if (profileQuantity > 0) { profile.OpenTicket = _orderMethods.MarketOrder(_symbol, (int)EnterSignal.Signal * profile.Quantity); profile.StopTicket = _orderMethods.StopMarketOrder(_symbol, -(int)EnterSignal.Signal * profile.Quantity, profile.OpenTicket.AverageFillPrice - (int)EnterSignal.Signal * profile.DeltaStopLoss); _tradeProfiles.Add(profile); } } }
public ISignal ExitSignalFactory(TradeProfile tradeProfile) { return(new ProfitTargetSignalExit(tradeProfile, _targetProfitLossRatio)); }
public ProfitTargetSignalExit(TradeProfile tradeProfile, decimal targetProfitLossRatio) { _tradeProfile = tradeProfile; _targetProfitLossRatio = targetProfitLossRatio; }