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));
        }
示例#3
0
 public StopLossTrailer(BotPosition position, StopLossTrailerConfig config)
 {
     this.position = position;
     this.config   = config;
 }
示例#4
0
 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);
 }