private void OpenPosition(TradeType tradeType, double stopLossInPips, double takeProfitInPips, double volumeInUnits) { if (volumeInUnits == 0) { return; } if (Template.MaxStopLossPips > 0) { #if cAlgo // TODO: only print if not backtesting if (!IsBacktesting) { Print($"[sl] MaxStopLossPips {Template.MaxStopLossPips}. Reducing from {stopLossInPips}."); } #endif stopLossInPips = double.IsNaN(stopLossInPips) ? Template.MaxStopLossPips : Math.Min(Template.MaxStopLossPips, stopLossInPips); #if cAlgo if (!IsBacktesting) { Print($" -- confirm: {stopLossInPips}."); } #endif } //if (tradeType == TradeType.Sell) { stopLossInPips = -stopLossInPips; } TradeResult result = null; if (Modes.HasFlag(BotMode.Live) || Modes.HasFlag(BotMode.Demo) || IsBacktesting) { result = ExecuteMarketOrder(tradeType, Symbol, volumeInUnits, Label, stopLossInPips, takeProfitInPips); } if (!IsBacktesting) { var accountPosition = result?.Position; if (accountPosition != null || Modes.HasFlag(BotMode.Paper) || Modes.HasFlag(BotMode.Scanner)) { var botPosition = new BotPosition(accountPosition, this, this.Symbol, tradeType, stopLossInPips, takeProfitInPips, volumeInUnits); if (accountPosition != null) { BotPositionDict.Add(accountPosition, botPosition); } OnNewPosition(botPosition); } } }
protected void OnNewPosition(BotPosition p) { //var trailers = new List<IOnBar>(); /* * p.onBars.Add(new StopLossTrailer(p) * { * //EndValue = 0.85, * EndValue = 0.5, * ValueUnit = Unit.Profit, * Key = new RangedNumber(15, Unit.Bars), * Function = DoubleFunctions.Linear * });*/ //var closePointsTSL = new StopLossTrailerConfig //{ // Input = new RangedNumber(1, Unit.ClosePoints, 0.2), // StopLossLocation = new RangedNumber(0.85, Unit.NearChannel, 0.5), // Function = DoubleFunctions.Linear //}; //p.onBars.Add(new StopLossTrailer(p, closePointsTSL)); }
public StopLossTrailer(BotPosition position, StopLossTrailerConfig config) { this.position = position; this.config = config; }
public override void updateBotPosition(BotPosition enc, BotPosition imu, Ice.Current current) { CurrentPosition = enc; Console.WriteLine("BotPosition: x = {0}, y = {1}, theta = {2}", imu.x, imu.y, imu.theta); }