Example #1
0
        /// <summary>
        /// конструктор
        /// </summary>
        public StrategyBollinger(string name, StartProgram startProgram)
            : base(name, startProgram)
        {
            TabCreate(BotTabType.Simple);
            _tab = TabsSimple[0];

            _bollinger = new Bollinger(name + "Bollinger", false);
            _bollinger = (Bollinger)_tab.CreateCandleIndicator(_bollinger, "Prime");
            _bollinger.Save();

            _moving = new MovingAverage(name + "Moving", false)
            {
                Lenght = 15
            };
            _moving = (MovingAverage)_tab.CreateCandleIndicator(_moving, "Prime");
            _moving.Save();

            _tab.CandleFinishedEvent += Bot_CandleFinishedEvent;

            Slipage = 0;
            Volume  = 1;
            Regime  = BotTradeRegime.On;

            DeleteEvent += Strategy_DeleteEvent;

            Load();
        }
Example #2
0
        /// <summary>
        /// In this function we do all the work and send back the OrderAction.
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public OrderAction?calculate(IDataSeries data, IDataSeries open, IDataSeries high, IOrder longorder, IOrder shortorder, int bollinger_period, double bollinger_standarddeviation, int momentum_period, int rsi_period, int rsi_smooth, int rsi_level_low, int rsi_level_high, int momentum_level_low, int momentum_level_high)
        {
            //Calculate BB
            Bollinger bb  = Bollinger(data, bollinger_standarddeviation, bollinger_period);
            Momentum  mom = Momentum(data, momentum_period);
            RSI       rsi = RSI(data, rsi_period, rsi_smooth);

            bb_lower  = bb.Lower[0];
            bb_middle = bb.Middle[0];
            bb_upper  = bb.Upper[0];

            //if (high[0] > open[1])
            //{
            if (mom[0] >= momentum_level_high && rsi[0] <= rsi_level_low && data[0] <= bb.Lower[0] && data[1] <= bb.Lower[1] && data[2] <= bb.Lower[2])
            {
                return(OrderAction.Buy);
            }
            else if (mom[0] <= momentum_level_low && rsi[0] >= rsi_level_high && data[0] >= bb.Upper[0] && data[1] >= bb.Upper[1] && data[2] >= bb.Upper[2])
            {
                return(OrderAction.SellShort);
            }
            else if (data[0] >= bb.Upper[0] && longorder != null)
            {
                //currently we left the building on the upper band, is it better if we switch to a stop?
                return(OrderAction.Sell);
            }
            else if (data[0] <= bb.Lower[0] && shortorder != null)
            {
                return(OrderAction.BuyToCover);
            }
            //}

            return(null);
        }
Example #3
0
        /// <summary>
        /// Called on each bar update event (incoming tick)
        /// </summary>
        protected override void OnBarUpdate()
        {
            bolCyan  = Bollinger(0.5, period);
            bolGreen = Bollinger(1.0, period);
            bolBlue  = Bollinger(2.0, period);

            if (Position.MarketPosition == MarketPosition.Flat)
            {
                if (Low[0] <= bolBlue.Lower[0])
                {
                    lastTouchedBlue = CurrentBar;
                }

                //  && rewardRiskRatio > 1.0
                double rewardRiskRatio = (bolBlue.Middle[0] - bolGreen.Lower[0])
                                         / (bolGreen.Lower[0] - bolBlue.Lower[0]);

                double barHeight = Math.Max(High[0] - Low[0], High[1] - Low[1]);
                barHeight = Math.Max(barHeight, High[2] - Low[2]);

                if (CurrentBar - lastTouchedBlue < 20 &&
                    bolBlue.Lower[15] < High[0]
                    //&& (bolGreen.Lower[0] - bolBlue.Lower[0]) > barHeight
                    )
                {
                    //DrawDot(CurrentBar+"SR", true, 0, bolGreen.Lower[0], Color.White);
                    if (Close[0] < bolGreen.Lower[0])
                    {
                        EnterLongStopLimit(qty, bolGreen.Lower[0], bolGreen.Lower[0]);
                    }
//					ExitLongStop(qty, bolBlue.Lower[0]);
//					ExitLongLimit(qty, bolBlue.Middle[0]);
                }
                if (bolBlue.Lower[15] > bolGreen.Lower[0]
                    //&& Close[0] < bolGreen.Lower[0]
                    )
                {
                    //	EnterShortLimit(qty, bolGreen.Lower[0]);
                }

                if (CurrentBar - lastTouchedBlue < 20
                    //&& bolBlue.Upper[15] > Low[0]
                    //&& (bolGreen.Lower[0] - bolBlue.Lower[0]) > barHeight
                    )
                {
                    if (Close[0] > bolGreen.Upper[0])
                    {
                        EnterShortStopLimit(qty, bolGreen.Upper[0], bolGreen.Upper[0]);
                    }
                }
            }

            AtmStrategyHandler();

            //double stop = Math.Max(bolBlue.Lower[0], bolBlue.Lower[BarsSinceEntry()]);
            //double limit = bolBlue.Middle[0];
            //ExitLongStop(stop);
            //ExitLongLimit(limit);
        }
Example #4
0
 protected override void OnStateChange()
 {
     if (State == State.SetDefaults)
     {
         Description                  = @"Enter the description for your new custom Strategy here.";
         Name                         = "DirectionalBolingerDivergenceTrendV2Code";
         Calculate                    = Calculate.OnBarClose;
         EntriesPerDirection          = 1;
         EntryHandling                = EntryHandling.AllEntries;
         IsExitOnSessionCloseStrategy = true;
         ExitOnSessionCloseSeconds    = 30;
         IsFillLimitOnTouch           = false;
         MaximumBarsLookBack          = MaximumBarsLookBack.TwoHundredFiftySix;
         OrderFillResolution          = OrderFillResolution.Standard;
         Slippage                     = 0;
         StartBehavior                = StartBehavior.WaitUntilFlat;
         TimeInForce                  = TimeInForce.Gtc;
         TraceOrders                  = true;
         RealtimeErrorHandling        = RealtimeErrorHandling.StopCancelClose;
         StopTargetHandling           = StopTargetHandling.PerEntryExecution;
         BarsRequiredToTrade          = 20;
         // Disable this property for performance gains in Strategy Analyzer optimizations
         IsInstantiatedOnEachOptimizationIteration = true;
         StopLoss          = 8;
         TakeProfit        = 4;
         MAPeriod          = 200;
         BollingerStdDev   = 2;
         BollingerPeriod   = 14;
         TrendTrade        = @"TrendTrade";
         CounterTrendTrade = @"CounterTrendTrade";
         StochRSIPeriod    = 14;
         StochRSIMax       = 1;
         StochRSIMin       = 0;
     }
     else if (State == State.Configure)
     {
     }
     else if (State == State.DataLoaded)
     {
         EMA1                      = EMA(Close, Convert.ToInt32(MAPeriod));
         EMA2                      = EMA(Close, Convert.ToInt32(5));
         Bollinger1                = Bollinger(Close, BollingerStdDev, Convert.ToInt32(BollingerPeriod));
         Bollinger2                = Bollinger(Close, BollingerStdDev, Convert.ToInt32(BollingerPeriod));
         StochRSI1                 = StochRSI(Close, 14);
         EMA1.Plots[0].Brush       = Brushes.Goldenrod;
         EMA2.Plots[0].Brush       = Brushes.Goldenrod;
         Bollinger1.Plots[0].Brush = Brushes.Lime;
         Bollinger1.Plots[1].Brush = Brushes.Blue;
         Bollinger1.Plots[2].Brush = Brushes.Red;
         StochRSI1.Plots[0].Brush  = Brushes.DarkCyan;
         AddChartIndicator(EMA1);
         AddChartIndicator(EMA2);
         AddChartIndicator(Bollinger1);
         AddChartIndicator(StochRSI1);
         SetProfitTarget(Convert.ToString(TrendTrade), CalculationMode.Ticks, TakeProfit);
         SetStopLoss(Convert.ToString(TrendTrade), CalculationMode.Ticks, StopLoss, false);
     }
 }
        /// <summary>
        /// Called on every new bar of data.
        /// </summary>
        /// <param name="currentBar">The current bar of the simulation</param>
        protected override void OnBarUpdate(int currentBar)
        {
            base.OnBarUpdate(currentBar);

            Bollinger ind = (Bollinger)Dependents[0];

            if (DataSeries.CrossAbove(Data.Close, ind.Upper, currentBar, 0) != -1)
            {
                WasFound[currentBar] = true;
            }
        }
        protected override void OnCalculate()
        {
            Bollinger bb = Bollinger(2, 20);

            AddChartLine("Plot_Middle" + Time[0].ToString(), this.IsAutoAdjustableScale, 1, bb.Middle[1], 0, bb.Middle[0], this.Plot1Color, this.Dash1Style, this.Plot1Width);
            AddChartLine("Plot_Low" + Time[0].ToString(), this.IsAutoAdjustableScale, 1, bb.Lower[1], 0, bb.Lower[0], this.Plot0Color, this.Dash0Style, this.Plot0Width);
            AddChartLine("Plot_High" + Time[0].ToString(), this.IsAutoAdjustableScale, 1, bb.Upper[1], 0, bb.Upper[0], this.Plot0Color, this.Dash0Style, this.Plot0Width);

            if (High[0] < bb.Lower[0] || Low[0] > bb.Upper[0])
            {
                //ok
            }
            else
            {
                this.BarColor = Color.White;
            }

            //Trigger
            double signal = 0;

            if (High[1] < bb.Lower[1])
            {
                if (Low[0] > High[1] || High[0] > High[1])
                {
                    if (ShowArrows)
                    {
                        AddChartArrowUp("ArrowLong_Entry" + +Bars[0].Time.Ticks, this.IsAutoAdjustableScale, 0, Bars[0].Low, Color.LightGreen);
                    }
                    signal = 1;
                }
            }
            else if (Low[1] > bb.Upper[1])
            {
                if (Low[0] < Low[1] || High[0] < Low[1])
                {
                    if (ShowArrows)
                    {
                        AddChartArrowDown("ArrowShort_Entry" + +Bars[0].Time.Ticks, this.IsAutoAdjustableScale, 0, Bars[0].High, Color.Red);
                    }
                    signal = -1;
                }
            }


            PlotLine.Set(signal);


            PlotColors[0][0] = this.Plot0Color;
            OutputDescriptors[0].PenStyle  = this.Dash0Style;
            OutputDescriptors[0].Pen.Width = this.Plot0Width;
        }
Example #7
0
        public BollingerProFunctionChart(ChartView BaseChart)
        {
            candle            = new Candle();
            line              = new Line();
            bollingerFunction = new Bollinger();
            var = new Variables.Variables();

            Themes.CandleGodStyle(candle);

            BaseChart.Chart.Header.Text = "Bollinger Bands";

            BaseChart.Chart.Series.Add(candle);
            BaseChart.Chart.Series.Add(line);

            candle.FillSampleValues(20);
            candle.HorizAxis = HorizontalAxis.Bottom;
            candle.VertAxis  = VerticalAxis.Left;
            candle.Title     = "Data Source";

            line.DataSource    = candle;
            line.Function      = bollingerFunction;
            line.HorizAxis     = HorizontalAxis.Bottom;
            line.VertAxis      = VerticalAxis.Left;
            line.Title         = "Bollinger";
            line.LinePen.Width = 3;
            line.Color         = var.GetPaletteBasic[2];

            bollingerFunction.Deviation            = 2;
            bollingerFunction.Exponential          = false;
            bollingerFunction.LowBandPen.Color     = var.GetPaletteBasic[3];
            bollingerFunction.UpperBandPen.Color   = var.GetPaletteBasic[2];
            bollingerFunction.UpperBandPen.Visible = true;
            bollingerFunction.LowBand.Visible      = true;
            bollingerFunction.LowBandPen.Width     = 3;
            bollingerFunction.UpperBandPen.Width   = 3;
            bollingerFunction.Series = candle;

            bollingerFunction.LowBand.XValues.DataMember = "X";
            bollingerFunction.LowBand.XValues.DateTime   = true;
            bollingerFunction.LowBand.XValues.Order      = ValueListOrder.Ascending;
            bollingerFunction.LowBand.YValues.DataMember = "Y";
            bollingerFunction.Period = 10;


            BaseChart.Chart.Axes.Left.Automatic          = true;
            BaseChart.Chart.Axes.Left.Ticks.Transparency = 100;
            BaseChart.Chart.Axes.Bottom.SetMinMax(BaseChart.Chart.Axes.Bottom.MinXValue - 1, BaseChart.Chart.Axes.Bottom.MaxXValue + 1);
            BaseChart.Chart.Axes.Left.Increment = 10;
        }
Example #8
0
        public event Action <MarketFaze> MarketFazeChangeEvent; // событие изменения фазы рынка

        #endregion

        /// <summary>
        /// Конструктор класса робота
        /// </summary>
        /// <param name="name">имя робота</param>
        /// <param name="startProgram">программа, которая запустила робота</param>
        public OneLegArbitrageMy(string name, StartProgram startProgram) : base(name, startProgram)
        {
            //Запоминаем имя программы, которая запустила бота
            //Это может быть тестер, оптимизатор, терминал
            _startProgram = startProgram;

            //Создаем вкладки бота
            TabCreate(BotTabType.Simple);
            TabCreate(BotTabType.Index);

            _tabSec   = TabsSimple[0];
            _tabIndex = TabsIndex[0];

            // создаем настроечные параметры робота
            LenghtMa           = CreateParameter("Lenght MA", 100, 50, 200, 10);
            LenghtBollinger    = CreateParameter("Lenght Bollinger", 100, 50, 200, 10);
            DeviationBollinger = CreateParameter("Deviation Bollinger", 1, 0.5m, 2.5m, 0.5m);
            LenghtAtr          = CreateParameter("Lenght ATR", 20, 20, 100, 10);
            MultiplyAtr        = CreateParameter("Multiplay ATR", 1, 1, 5, 0.5m);

            // cоздаем индикаторы
            _ma        = new MovingAverage(name + "MA", false);
            _ma        = (MovingAverage)_tabIndex.CreateCandleIndicator(_ma, "Prime");
            _ma.Lenght = LenghtMa.ValueInt;
            _ma.Save();

            _bollinger           = new Bollinger(name + "Bollinger", false);
            _bollinger           = (Bollinger)_tabIndex.CreateCandleIndicator(_bollinger, "Prime");
            _bollinger.Lenght    = LenghtBollinger.ValueInt;
            _bollinger.Deviation = DeviationBollinger.ValueDecimal;
            _bollinger.Save();

            _atr        = new Atr(name + "ATR", false);
            _atr        = (Atr)_tabIndex.CreateCandleIndicator(_atr, "Second");
            _atr.Lenght = LenghtAtr.ValueInt;
            _atr.Save();

            // загружаем настроечные параметры робота
            Load();

            // подписываемся на события
            _tabIndex.SpreadChangeEvent += TabIndex_SpreadChangeEvent;
            _tabSec.CandleFinishedEvent += TabSec_CandleFinishedEvent;
            ParametrsChangeByUser       += OneLegArbitrage_ParametrsChangeByUser;
            DeleteEvent += OneLegArbitrage_DeleteEvent;
            //todo доработать OneLegArbitrage_DeleteEvent, чтобы удалялись все файлы робота
        }
Example #9
0
        protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Description = @"TTMS momentum histogram with squeeze dots.";
                Name        = "TTMS";

                Calculate                = Calculate.OnPriceChange;
                IsOverlay                = false;
                DisplayInDataBox         = true;
                DrawOnPricePanel         = false;
                DrawHorizontalGridLines  = false;
                DrawVerticalGridLines    = false;
                PaintPriceMarkers        = true;
                ScaleJustification       = NinjaTrader.Gui.Chart.ScaleJustification.Right;
                IsSuspendedWhileInactive = true;

                MomentumLength = 20;
                SqueezeLength  = 20;

                SqueezeDotBrush      = Brushes.Red;
                NormalDotBrush       = Brushes.Blue;
                HistAboveZeroRising  = Brushes.Lime;
                HistAboveZeroFalling = Brushes.DarkSlateGray;
                HistBelowZeroFalling = Brushes.Red;
                HistBelowZeroRising  = Brushes.DarkSlateGray;

                SoundAlertsOn  = false;
                BuySoundAlert  = "Alert3.wav";
                SellSoundAlert = "Alert4.wav";

                AddPlot(new Stroke(Brushes.DarkSlateGray, 5), PlotStyle.Bar, "MomentumHistogram");
                AddPlot(new Stroke(NormalDotBrush, 2), PlotStyle.Dot, "SqueezeDots");
            }
            else if (State == State.Configure)
            {
                lrm_            = new Series <double>(this);
                medianPriceOsc_ = new Series <double>(this);

                BB   = Bollinger(2.0, SqueezeLength);
                KC   = KeltnerChannel(1.5, SqueezeLength);
                DC   = DonchianChannel(MomentumLength);
                LR   = LinReg(medianPriceOsc_, MomentumLength);
                ema_ = EMA(MomentumLength);
            }
        }
Example #10
0
        protected override void MyInitialize()
        {
            _boll = Bollinger(BollingerStdDev, BollingerPeriod);
            Add(_boll);

            _smaFast = SMA(SMAFastPeriod);
            _smaFast.Plots[0].Pen.Color = Color.Blue;
            Add(_smaFast);

            _smaSlow = SMA(SMASlowPeriod);
            _smaSlow.Plots[0].Pen.Color = Color.Purple;
            Add(_smaSlow);

            InitialStoploss = 100;
            ProfitTicks     = 300;
            SetProfitTarget(CalculationMode.Ticks, 300);
            //  SetStopLoss(CalculationMode.Ticks, 200);
        }
Example #11
0
        /// <summary>
        /// In this function we do all the work and send back the OrderDirection.
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public ResultValue calculate(IDataSeries data, IDataSeries open, IDataSeries high, IOrder longorder, IOrder shortorder, int bollinger_period, double bollinger_standarddeviation, int momentum_period, int rsi_period, int rsi_smooth, int rsi_level_low, int rsi_level_high, int momentum_level_low, int momentum_level_high)
        {
            //Create a return object
            ResultValue returnvalue = new ResultValue();

            try
            {
                //Calculate BB
                Bollinger bb  = Bollinger(data, bollinger_standarddeviation, bollinger_period);
                Momentum  mom = Momentum(data, momentum_period);
                RSI       rsi = RSI(data, rsi_period, rsi_smooth);

                bb_lower  = bb.Lower[0];
                bb_middle = bb.Middle[0];
                bb_upper  = bb.Upper[0];


                if (mom[0] >= momentum_level_high && rsi[0] <= rsi_level_low && data[0] <= bb.Lower[0] && data[1] <= bb.Lower[1] && data[2] <= bb.Lower[2])
                {
                    returnvalue.Entry = OrderDirection.Buy;
                }
                else if (mom[0] <= momentum_level_low && rsi[0] >= rsi_level_high && data[0] >= bb.Upper[0] && data[1] >= bb.Upper[1] && data[2] >= bb.Upper[2])
                {
                    returnvalue.Entry = OrderDirection.Sell;
                }
                else if (data[0] >= bb.Upper[0] && longorder != null)
                {
                    //currently we left the building on the upper band, is it better if we switch to a stop?
                    returnvalue.Exit = OrderDirection.Sell;
                }
                else if (data[0] <= bb.Lower[0] && shortorder != null)
                {
                    returnvalue.Exit = OrderDirection.Buy;
                }
            }
            catch (Exception)
            {
                //If this method is called via a strategy or a condition we need to log the error.
                returnvalue.ErrorOccured = true;
            }

            //return the result object
            return(returnvalue);
        }
Example #12
0
        /// <summary>
        /// This method is used to configure the strategy and is called once before any strategy method is called.
        /// </summary>
        protected override void Initialize()
        {
            atr            = ATRTrailing(ATRTimes, ATRPeriod, ATRRatched);
            bollinger      = Bollinger(BStdX, BPeriod);
            keltnerChannel = KeltnerChannel(KStdX, KPeriod);
            sMomentum      = SMA(Momentum(MPeriod), MSmooth);
            //Add(Stochastics(periodD, periodK, smooth));
            Add(RCTTMSqueeze(1, 2, 2, 20));

            Add(atr);
            //Add(bollinger);
            //Add(keltnerChannel);
            //Add(sMomentum);

            atr.AutoScale         = false;
            atr.PaintPriceMarkers = false;


            CalculateOnBarClose = true;
        }
Example #13
0
        /// <summary>
        /// Called on each bar update event (incoming tick)
        /// </summary>
        protected override void OnBarUpdate()
        {
            bolCyan  = Bollinger(0.5, Period);
            bolGreen = Bollinger(1.0, Period);
            bolBlue  = Bollinger(2.0, Period);

            if (Position.MarketPosition == MarketPosition.Flat)
            {
                if (Low[0] <= bolBlue.Lower[0])
                {
                    lastTouchedBlue = CurrentBar;
                }

                //  && rewardRiskRatio > 1.0
                double rewardRiskRatio = (bolBlue.Middle[0] - bolGreen.Lower[0])
                                         / (bolGreen.Lower[0] - bolBlue.Lower[0]);

                double barHeight = Math.Max(High[0] - Low[0], High[1] - Low[1]);
                barHeight = Math.Max(barHeight, High[2] - Low[2]);

                if (CurrentBar - lastTouchedBlue < 20
                    //&& (bolGreen.Lower[0] - bolBlue.Lower[0]) > barHeight
                    )
                {
                    EnterLongStopLimit(bolGreen.Lower[0], bolGreen.Lower[0]);
                    ExitLongStop(bolBlue.Lower[0]);
                    ExitLongLimit(bolBlue.Middle[0]);
                }
            }

            if (Position.MarketPosition == MarketPosition.Long)
            {
                lastTouchedBlue = 0;
                double stop  = Math.Max(bolBlue.Lower[0], bolBlue.Lower[BarsSinceEntry()]);
                double limit = bolBlue.Middle[0];
                ExitLongStop(stop);
                ExitLongLimit(limit);
            }
        }
        protected override void OnCalculate()
        {
            Bollinger bol = Bollinger(this.Bollinger_stddev, this.Bollinger_Period);

            if (Close[0] < bol.Lower[0])
            {
                longsignalbb = true;
            }
            else if (Close[0] > bol.Upper[0])
            {
                shortsignalbb = true;
            }
            else
            {
                //nothing
            }

            MACD macd = MACD(this.MACD_Fast, this.MACD_Slow, this.MACD_Smooth);

            if (longsignalbb && CrossAbove(macd.Default, macd.Avg, 0))
            {
                AddChartArrowUp(Time[0].ToString() + "long", 0, Low[0], this.ColorLongSignal);
                MyPlot1.Set(1);
                longsignalbb = false;
            }
            else if (shortsignalbb && CrossBelow(macd.Default, macd.Avg, 0))
            {
                AddChartArrowDown(Time[0].ToString() + "short", 0, High[0], this.ColorShortSignal);
                MyPlot1.Set(-1);
                shortsignalbb = false;
            }
            else
            {
                MyPlot1.Set(0);
            }
        }
        protected override void OnCalculate()
        {
            Bollinger bb = Bollinger(this.StandardDeviation, this.Period);

            if (Close[0] > bb.Upper[0])
            {
                if (ShowSignalOnChartBackground)
                {
                    this.BackColor = GlobalUtilities.AdjustOpacity(this.ColorLongSignalBackground, this.OpacityLongSignal / 100.0);
                }
                _signals.Set(1);
            }
            else if (Close[0] < bb.Lower[0])
            {
                if (ShowSignalOnChartBackground)
                {
                    this.BackColor = GlobalUtilities.AdjustOpacity(this.ColorShortSignalBackground, this.OpacityShortSignal / 100.0);
                }
                _signals.Set(-1);
            }
            else
            {
                _signals.Set(_signals[1]);
                if (_signals[1] == 1)
                {
                    if (ShowSignalOnChartBackground)
                    {
                        this.BackColor = GlobalUtilities.AdjustOpacity(this.ColorLongSignalBackground, this.OpacityLongSignal / 100.0);
                    }
                }
                else
                {
                    if (ShowSignalOnChartBackground)
                    {
                        this.BackColor = GlobalUtilities.AdjustOpacity(this.ColorShortSignalBackground, this.OpacityShortSignal / 100.0);
                    }
                }
            }

            if (this.ShowSignalOnChartArrow)
            {
                if (_signals[0] == 1 && _signals[1] != 1)
                {
                    AddChartArrowUp("ArrowLong_MA" + +Bars[0].Time.Ticks, this.IsAutoAdjustableScale, 0, Bars[0].Low, this.ColorLongSignalArrow);
                }
                else if (_signals[0] == -1 && _signals[1] != -1)
                {
                    AddChartArrowDown("ArrowShort_MA" + +Bars[0].Time.Ticks, this.IsAutoAdjustableScale, 0, Bars[0].High, this.ColorShortSignalArrow);
                }
            }

            //set bb
            this.Plot_Middle.Set(bb.Middle[0]);
            this.Plot_High.Set(bb.Upper[0]);
            this.Plot_Low.Set(bb.Lower[0]);


            //Set the color
            PlotColors[0][0] = this.Color_1;
            OutputDescriptors[0].PenStyle  = this.DashStyle_1;
            OutputDescriptors[0].Pen.Width = this.LineWidth_1;
            PlotColors[1][0] = this.Color_2;
            OutputDescriptors[1].PenStyle  = this.DashStyle_2;
            OutputDescriptors[1].Pen.Width = this.LineWidth_2;
            PlotColors[2][0] = this.Color_3;
            OutputDescriptors[2].PenStyle  = this.DashStyle_3;
            OutputDescriptors[2].Pen.Width = this.LineWidth_3;
        }
Example #16
0
        /// <summary>
        /// If the runnable has already been created, returns that object. If not then
        /// returns an new runnable object based on the name and the instrument.
        /// </summary>
        /// <param name="nameAndParameters">Name of the runnable</param>
        /// <returns>The runnable object</returns>
        public Runnable GetRunnable(string nameAndParameters)
        {
            Runnable requestedItem = null;

            // The name can have parameters to pass to the runnable construtor
            // and are separated by commas.
            // Ex: Rsi,11,3 would create the Rsi and pass the numbers to it in a
            // list. Its up to the indicator to do what it will with each number.
            string[] splitParams  = nameAndParameters.Split(',');
            string   runnableName = splitParams[0];

            string[] runnableParams = splitParams.Skip(1).Take(splitParams.Length - 1).ToArray();

            // See if the runnable is created already and return that object if it is.
            int key = nameAndParameters.GetHashCode();

            if (_createdItems.ContainsKey(key))
            {
                requestedItem = _createdItems[key];
            }
            else
            {
                switch (runnableName)
                {
                // Indicators.
                case "Bollinger":
                    requestedItem = new Bollinger(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BressertDss":
                    requestedItem = new BressertDss(_tickerData, this, runnableParams);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BressertTimingBands":
                    requestedItem = new BressertTimingBands(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BearBeltHold":
                    requestedItem = new BearBeltHold(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BearEngulfing":
                    requestedItem = new BearEngulfing(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BearHarami":
                    requestedItem = new BearHarami(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BearHaramiCross":
                    requestedItem = new BearHaramiCross(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BullBeltHold":
                    requestedItem = new BullBeltHold(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BullEngulfing":
                    requestedItem = new BullEngulfing(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BullHarami":
                    requestedItem = new BullHarami(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BullHaramiCross":
                    requestedItem = new BullHaramiCross(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Cci14":
                    requestedItem = new Cci(_tickerData, this, 14);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "DarkCloudCover":
                    requestedItem = new DarkCloudCover(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Doji":
                    requestedItem = new Doji(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "BearDoji":
                    requestedItem = new BearDoji(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "DownsideTasukiGap":
                    requestedItem = new DownsideTasukiGap(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "EaseOfMovement":
                    requestedItem = new EaseOfMovement(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "EveningStar":
                    requestedItem = new EveningStar(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "FallingThreeMethods":
                    requestedItem = new FallingThreeMethods(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Hammer":
                    requestedItem = new Hammer(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "HangingMan":
                    requestedItem = new HangingMan(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "InvertedHammer":
                    requestedItem = new InvertedHammer(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "KeltnerChannel":
                    requestedItem = new KeltnerChannel(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Macd":
                    requestedItem = new Macd(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Momentum14":
                    requestedItem = new Momentum(_tickerData, this, 14);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "MorningStar":
                    requestedItem = new MorningStar(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "PiercingLine":
                    requestedItem = new PiercingLine(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "PriceOscillator":
                    requestedItem = new PriceOscillator(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "RisingThreeMethods":
                    requestedItem = new RisingThreeMethods(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Rsi":
                    requestedItem = new Rsi(_tickerData, this, runnableParams);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Rsi3m3":
                    requestedItem = new Rsi3m3(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "ShootingStar":
                    requestedItem = new ShootingStar(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Sma":
                    requestedItem = new Sma(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "StickSandwitch":
                    requestedItem = new StickSandwitch(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "StochasticsFast":
                    requestedItem = new StochasticsFast(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Stochastics":
                    requestedItem = new Stochastics(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "StochRsi":
                    requestedItem = new StochRsi(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Trend":
                    requestedItem = new Trend(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "ThreeBlackCrows":
                    requestedItem = new ThreeBlackCrows(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "ThreeWhiteSoldiers":
                    requestedItem = new ThreeWhiteSoldiers(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Trix":
                    requestedItem = new Trix(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "UpsideGapTwoCrows":
                    requestedItem = new UpsideGapTwoCrows(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "UpsideTasukiGap":
                    requestedItem = new UpsideTasukiGap(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "WilliamsR":
                    requestedItem = new WilliamsR(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "Dmi":
                    requestedItem = new Dmi(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "DtOscillator":
                    requestedItem = new DtOscillator(_tickerData, this, runnableParams);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "FibonacciZones":
                    requestedItem = new FibonacciZones(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "ElliotWaves":
                    requestedItem = new ElliotWaves(_tickerData, this);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                case "ZigZag":
                    requestedItem = new ZigZag(_tickerData, this, runnableParams);
                    Simulator.DataOutput.SaveIndicator((Indicator)requestedItem);
                    break;

                ///////////////////////////// Strategies ////////////////////////////

                case "BestOfRootStrategies":
                    requestedItem = new BestOfRootStrategies(_tickerData, this);
                    break;

                case "ComboStrategy":
                    requestedItem = new ComboStrategy(_tickerData, this);
                    break;

                case "BressertApproach":
                    requestedItem = new BressertApproach(_tickerData, this);
                    break;

                case "BressertComboStrategy":
                    requestedItem = new BressertComboStrategy(_tickerData, this);
                    break;

                case "FibonacciRsi3m3":
                    requestedItem = new FibonacciRsi3m3(_tickerData, this);
                    break;

                case "FibonacciDtOscillator":
                    requestedItem = new FibonacciDtOscillator(_tickerData, this);
                    break;

                case "ElliotWavesStrategy":
                    requestedItem = new ElliotWavesStrategy(_tickerData, this);
                    break;

                //
                // Bull
                //

                case "BullBollingerExtended":
                    requestedItem = new BullBollingerExtended(_tickerData, this);
                    break;

                case "BullBeltHoldFound":
                    requestedItem = new BullBeltHoldFound(_tickerData, this);
                    break;

                case "BullEngulfingFound":
                    requestedItem = new BullEngulfingFound(_tickerData, this);
                    break;

                case "BullHaramiFound":
                    requestedItem = new BullHaramiFound(_tickerData, this);
                    break;

                case "BullHaramiCrossFound":
                    requestedItem = new BullHaramiCrossFound(_tickerData, this);
                    break;

                case "BullCciCrossover":
                    requestedItem = new BullCciCrossover(_tickerData, this);
                    break;

                case "BullEaseOfMovement":
                    requestedItem = new BullEaseOfMovement(_tickerData, this);
                    break;

                case "BullDojiFound":
                    requestedItem = new BullDojiFound(_tickerData, this);
                    break;

                case "HammerFound":
                    requestedItem = new HammerFound(_tickerData, this);
                    break;

                case "BullKeltnerExtended":
                    requestedItem = new BullKeltnerExtended(_tickerData, this);
                    break;

                case "BullMacdCrossover":
                    requestedItem = new BullMacdCrossover(_tickerData, this);
                    break;

                case "BullMacdMomentum":
                    requestedItem = new BullMacdMomentum(_tickerData, this);
                    break;

                case "BullMomentumCrossover":
                    requestedItem = new BullMomentumCrossover(_tickerData, this);
                    break;

                case "MorningStarFound":
                    requestedItem = new MorningStarFound(_tickerData, this);
                    break;

                case "PiercingLineFound":
                    requestedItem = new PiercingLineFound(_tickerData, this);
                    break;

                case "RisingThreeMethodsFound":
                    requestedItem = new RisingThreeMethodsFound(_tickerData, this);
                    break;

                case "BullRsiCrossover":
                    requestedItem = new BullRsiCrossover(_tickerData, this);
                    break;

                case "BullSmaCrossover":
                    requestedItem = new BullSmaCrossover(_tickerData, this);
                    break;

                case "StickSandwitchFound":
                    requestedItem = new StickSandwitchFound(_tickerData, this);
                    break;

                case "BullStochasticsFastCrossover":
                    requestedItem = new BullStochasticsFastCrossover(_tickerData, this);
                    break;

                case "BullStochasticsCrossover":
                    requestedItem = new BullStochasticsCrossover(_tickerData, this);
                    break;

                case "BullStochRsiCrossover":
                    requestedItem = new BullStochRsiCrossover(_tickerData, this);
                    break;

                case "ThreeWhiteSoldiersFound":
                    requestedItem = new ThreeWhiteSoldiersFound(_tickerData, this);
                    break;

                case "BullTrendStart":
                    requestedItem = new BullTrendStart(_tickerData, this);
                    break;

                case "BullTrixSignalCrossover":
                    requestedItem = new BullTrixSignalCrossover(_tickerData, this);
                    break;

                case "BullTrixZeroCrossover":
                    requestedItem = new BullTrixZeroCrossover(_tickerData, this);
                    break;

                case "UpsideTasukiGapFound":
                    requestedItem = new UpsideTasukiGapFound(_tickerData, this);
                    break;

                case "BullWilliamsRCrossover":
                    requestedItem = new BullWilliamsRCrossover(_tickerData, this);
                    break;

                case "BullPriceOscillator":
                    requestedItem = new BullPriceOscillator(_tickerData, this);
                    break;

                case "BullDmi":
                    requestedItem = new BullDmi(_tickerData, this);
                    break;

                case "BullBressertDss":
                    requestedItem = new BullBressertDss(_tickerData, this, runnableParams);
                    break;

                case "BullRsi3m3":
                    requestedItem = new BullRsi3m3(_tickerData, this);
                    break;

                case "BullDtOscillator":
                    requestedItem = new BullDtOscillator(_tickerData, this);
                    break;

                //////////// Predicted bull strategies ///////////

                case "BullCciCrossoverPredicted":
                    requestedItem = new BullCciCrossoverPredicted(_tickerData, this);
                    break;

                case "BullDmiPredicted":
                    requestedItem = new BullDmiPredicted(_tickerData, this);
                    break;

                case "BullEaseOfMovementPredicted":
                    requestedItem = new BullEaseOfMovementPredicted(_tickerData, this);
                    break;

                case "BullKeltnerExtendedPredicted":
                    requestedItem = new BullKeltnerExtendedPredicted(_tickerData, this);
                    break;

                case "BullMacdCrossoverPredicted":
                    requestedItem = new BullMacdCrossoverPredicted(_tickerData, this);
                    break;

                case "BullMomentumCrossoverPredicted":
                    requestedItem = new BullMomentumCrossoverPredicted(_tickerData, this);
                    break;

                case "BullPriceOscillatorPredicted":
                    requestedItem = new BullPriceOscillatorPredicted(_tickerData, this);
                    break;

                case "BullRsiCrossoverPredicted":
                    requestedItem = new BullRsiCrossoverPredicted(_tickerData, this);
                    break;

                case "BullSmaCrossoverPredicted":
                    requestedItem = new BullSmaCrossoverPredicted(_tickerData, this);
                    break;

                case "BullStochasticsCrossoverPredicted":
                    requestedItem = new BullStochasticsCrossoverPredicted(_tickerData, this);
                    break;

                case "BullStochasticsFastCrossoverPredicted":
                    requestedItem = new BullStochasticsFastCrossoverPredicted(_tickerData, this);
                    break;

                case "BullStochRsiCrossoverPredicted":
                    requestedItem = new BullStochRsiCrossoverPredicted(_tickerData, this);
                    break;

                case "BullTrixSignalCrossoverPredicted":
                    requestedItem = new BullTrixSignalCrossoverPredicted(_tickerData, this);
                    break;

                case "BullTrixZeroCrossoverPredicted":
                    requestedItem = new BullTrixZeroCrossoverPredicted(_tickerData, this);
                    break;

                case "BullWilliamsRCrossoverPredicted":
                    requestedItem = new BullWilliamsRCrossoverPredicted(_tickerData, this);
                    break;


                //
                // Bear
                //

                case "BearBollingerExtended":
                    requestedItem = new BearBollingerExtended(_tickerData, this);
                    break;

                case "BearCciCrossover":
                    requestedItem = new BearCciCrossover(_tickerData, this);
                    break;

                case "BearEaseOfMovement":
                    requestedItem = new BearEaseOfMovement(_tickerData, this);
                    break;

                case "BearDojiFound":
                    requestedItem = new BearDojiFound(_tickerData, this);
                    break;

                case "BearKeltnerExtended":
                    requestedItem = new BearKeltnerExtended(_tickerData, this);
                    break;

                case "BearMacdMomentum":
                    requestedItem = new BearMacdMomentum(_tickerData, this);
                    break;

                case "BearMacdCrossover":
                    requestedItem = new BearMacdCrossover(_tickerData, this);
                    break;

                case "BearMomentumCrossover":
                    requestedItem = new BearMomentumCrossover(_tickerData, this);
                    break;

                case "BearRsiCrossover":
                    requestedItem = new BearRsiCrossover(_tickerData, this);
                    break;

                case "BearSmaCrossover":
                    requestedItem = new BearSmaCrossover(_tickerData, this);
                    break;

                case "BearStochasticsCrossover":
                    requestedItem = new BearStochasticsCrossover(_tickerData, this);
                    break;

                case "BearStochasticsFastCrossover":
                    requestedItem = new BearStochasticsFastCrossover(_tickerData, this);
                    break;

                case "BearStochRsiCrossover":
                    requestedItem = new BearStochRsiCrossover(_tickerData, this);
                    break;

                case "BearTrendStart":
                    requestedItem = new BearTrendStart(_tickerData, this);
                    break;

                case "BearTrixSignalCrossover":
                    requestedItem = new BearTrixSignalCrossover(_tickerData, this);
                    break;

                case "BearTrixZeroCrossover":
                    requestedItem = new BearTrixZeroCrossover(_tickerData, this);
                    break;

                case "BearWilliamsRCrossover":
                    requestedItem = new BearWilliamsRCrossover(_tickerData, this);
                    break;

                case "BearBeltHoldFound":
                    requestedItem = new BearBeltHoldFound(_tickerData, this);
                    break;

                case "BearEngulfingFound":
                    requestedItem = new BearEngulfingFound(_tickerData, this);
                    break;

                case "BearHaramiFound":
                    requestedItem = new BearHaramiFound(_tickerData, this);
                    break;

                case "BearHaramiCrossFound":
                    requestedItem = new BearHaramiCrossFound(_tickerData, this);
                    break;

                case "DarkCloudCoverFound":
                    requestedItem = new DarkCloudCoverFound(_tickerData, this);
                    break;

                case "DownsideTasukiGapFound":
                    requestedItem = new DownsideTasukiGapFound(_tickerData, this);
                    break;

                case "EveningStarFound":
                    requestedItem = new EveningStarFound(_tickerData, this);
                    break;

                case "FallingThreeMethodsFound":
                    requestedItem = new FallingThreeMethodsFound(_tickerData, this);
                    break;

                case "HangingManFound":
                    requestedItem = new HangingManFound(_tickerData, this);
                    break;

                case "InvertedHammerFound":
                    requestedItem = new InvertedHammerFound(_tickerData, this);
                    break;

                case "ShootingStarFound":
                    requestedItem = new ShootingStarFound(_tickerData, this);
                    break;

                case "ThreeBlackCrowsFound":
                    requestedItem = new ThreeBlackCrowsFound(_tickerData, this);
                    break;

                case "UpsideGapTwoCrowsFound":
                    requestedItem = new UpsideGapTwoCrowsFound(_tickerData, this);
                    break;

                case "BearPriceOscillator":
                    requestedItem = new BearPriceOscillator(_tickerData, this);
                    break;

                case "BearDmi":
                    requestedItem = new BearDmi(_tickerData, this);
                    break;

                case "BearBressertDss":
                    requestedItem = new BearBressertDss(_tickerData, this, runnableParams);
                    break;

                case "BearRsi3m3":
                    requestedItem = new BearRsi3m3(_tickerData, this);
                    break;

                case "BearDtOscillator":
                    requestedItem = new BearDtOscillator(_tickerData, this);
                    break;

                //////////// Predicted bear strategies ///////////

                case "BearCciCrossoverPredicted":
                    requestedItem = new BearCciCrossoverPredicted(_tickerData, this);
                    break;

                case "BearDmiPredicted":
                    requestedItem = new BearDmiPredicted(_tickerData, this);
                    break;

                case "BearEaseOfMovementPredicted":
                    requestedItem = new BearEaseOfMovementPredicted(_tickerData, this);
                    break;

                case "BearKeltnerExtendedPredicted":
                    requestedItem = new BearKeltnerExtendedPredicted(_tickerData, this);
                    break;

                case "BearMacdCrossoverPredicted":
                    requestedItem = new BearMacdCrossoverPredicted(_tickerData, this);
                    break;

                case "BearMomentumCrossoverPredicted":
                    requestedItem = new BearMomentumCrossoverPredicted(_tickerData, this);
                    break;

                case "BearPriceOscillatorPredicted":
                    requestedItem = new BearPriceOscillatorPredicted(_tickerData, this);
                    break;

                case "BearRsiCrossoverPredicted":
                    requestedItem = new BearRsiCrossoverPredicted(_tickerData, this);
                    break;

                case "BearSmaCrossoverPredicted":
                    requestedItem = new BearSmaCrossoverPredicted(_tickerData, this);
                    break;

                case "BearStochasticsCrossoverPredicted":
                    requestedItem = new BearStochasticsCrossoverPredicted(_tickerData, this);
                    break;

                case "BearStochasticsFastCrossoverPredicted":
                    requestedItem = new BearStochasticsFastCrossoverPredicted(_tickerData, this);
                    break;

                case "BearStochRsiCrossoverPredicted":
                    requestedItem = new BearStochRsiCrossoverPredicted(_tickerData, this);
                    break;

                case "BearTrixSignalCrossoverPredicted":
                    requestedItem = new BearTrixSignalCrossoverPredicted(_tickerData, this);
                    break;

                case "BearTrixZeroCrossoverPredicted":
                    requestedItem = new BearTrixZeroCrossoverPredicted(_tickerData, this);
                    break;

                case "BearWilliamsRCrossoverPredicted":
                    requestedItem = new BearWilliamsRCrossoverPredicted(_tickerData, this);
                    break;

                default:
                    throw new Exception(nameAndParameters + " doesn't exist");
                }

                _createdItems[key] = requestedItem;
            }

            return(requestedItem);
        }
Example #17
0
        /// <summary>
        /// Called on each bar update event (incoming tick)
        /// </summary>
        protected override void OnBarUpdate()
        {
            double stopPrice  = 0;
            double limitPrice = 0;
            int    qty        = 1;

            if (BarsPeriod.Id != PeriodType.Range)
            {
                DrawTextFixed("error msg", "This Strategy only works on Intraday Range Bars", TextPosition.BottomRight);
                return;
            }
            if (Bars.BarsSinceSession == 1)
            {
                ResetTrade();
            }

            RcMACD      macd      = RcMACD(12, 26, 9);
            RSI         rsi       = RSI(7, 3);
            Stochastics stoc      = Stochastics(3, 5, 2);
            Bollinger   bollinger = Bollinger(2, 12);

            if (UseRSIFilter == 1)
            {
                if (rsi[0] > 70)
                {
                    this.DrawTriangleUp(CurrentBar + "Up", false, 0, Low[0] - 2 * TickSize, Color.Green);
                }
                else if (rsi[0] < 30)
                {
                    DrawTriangleDown(CurrentBar + "Down", false, 0, High[0] + 2 * TickSize, Color.Red);
                }
            }
            else
            {
                if (stoc.D[0] > 80)
                {
                    DrawTriangleUp(CurrentBar + "Up", false, 0, Low[0] - 2 * TickSize, Color.Green);
                }
                else if (stoc.D[0] < 20)
                {
                    DrawTriangleDown(CurrentBar + "Down", false, 0, High[0] + 2 * TickSize, Color.Red);
                }
            }

            if (Position.MarketPosition == MarketPosition.Flat)
            {
                if (entryOrderLong != null)
                {
                    CancelOrder(entryOrderLong);
                    entryOrderLong = null;
                }

                else

                // Long Entry Conditions
                if (longTrades && entryOrderLong == null &&
                    macd.Mom[0] > 0 && macd.Mom[0] > macd.Avg[0] &&
                    ((UseRSIFilter == 1 && rsi[0] > 70) || (UseRSIFilter == 0 && stoc.D[0] < 20)) &&
                    Rising(bollinger.Upper) &&
                    Close[0] > (bollinger.Upper[0] - 2 * TickSize)
                    //&& Time[0].DayOfWeek != DayOfWeek.Friday
                    //&& (ToTime(Time[0]) >= 83000 && ToTime(Time[0]) <= 103000)
                    )
                {
                    DrawArrowUp(CurrentBar + "Long", false, 0, Low[0] - 8 * TickSize, Color.Green);
                    if (Close[0] == High[0])
                    {
                        //DrawDot(CurrentBar + "marketPrice", false, 1, Close[0], Color.Gray);
                        if (!reverseTrades)
                        {
                            entryOrderLong = SubmitOrder(0, OrderAction.Buy, OrderType.Market, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "Long");
                        }
                        else
                        {
                            entryOrderLong = SubmitOrder(0, OrderAction.SellShort, OrderType.Market, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "!Long");
                        }
                    }
                    else
                    {
                        stopPrice  = Close[0] + 1 * TickSize;
                        limitPrice = Close[0] + 1 * TickSize;
                        //DrawDot(CurrentBar + "stopPrice", false, 1, stopPrice, Color.DarkGray);
                        //DrawDot(CurrentBar + "limitPrice", false, 1, limitPrice, Color.Black);
                        if (!reverseTrades)
                        {
                            entryOrderLong = SubmitOrder(0, OrderAction.Buy, OrderType.StopLimit, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "Long");
                        }
                        else
                        {
                            entryOrderLong = SubmitOrder(0, OrderAction.SellShort, OrderType.StopLimit, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "!Long");
                        }
                    }
                }

                // Short Entry Conditions
                if (shortTrades && entryOrderShort == null &&
                    macd.Mom[0] < 0 && macd.Mom[0] < macd.Avg[0] &&
                    ((UseRSIFilter == 1 && rsi[0] < 30) || (UseRSIFilter == 0 && stoc.D[0] > 80)) &&
                    Falling(bollinger.Lower) &&
                    Close[0] < (bollinger.Lower[0] + 2 * TickSize))
                {
                    DrawArrowDown(CurrentBar + "Short", false, 0, High[0] + 8 * TickSize, Color.Red);
                    if (Close[0] == Low[0])
                    {
                        //DrawDot(CurrentBar + "marketPrice", false, 1, Close[0], Color.Gray);
                        if (!reverseTrades)
                        {
                            entryOrderShort = SubmitOrder(0, OrderAction.SellShort, OrderType.Market, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "Short");
                        }
                        else
                        {
                            entryOrderShort = SubmitOrder(0, OrderAction.Buy, OrderType.Market, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "!Short");
                        }
                    }
                    else
                    {
                        stopPrice  = Close[0] - 1 * TickSize;
                        limitPrice = Close[0] - 1 * TickSize;
                        //DrawDot(CurrentBar + "stopPrice", false, 1, stopPrice, Color.DarkGray);
                        //DrawDot(CurrentBar + "limitPrice", false, 1, limitPrice, Color.Black);
                        if (!reverseTrades)
                        {
                            entryOrderShort = SubmitOrder(0, OrderAction.SellShort, OrderType.StopLimit, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "Short");
                        }
                        else
                        {
                            entryOrderShort = SubmitOrder(0, OrderAction.Buy, OrderType.StopLimit, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "!Short");
                        }
                    }
                }
            }
        }
Example #18
0
        private StrategyParameterInt alarn_persent;                                                // с каким использованным % депо можно закрывать убыточную сделку

        public Frankbol_for_bnb(string name, StartProgram startProgram) : base(name, startProgram) // конструктор
        {
            TabCreate(BotTabType.Simple);                                                          // создание простой вкладки
            _tab       = TabsSimple[0];                                                            // записываем первую вкладку в поле
            kvot_name  = "USDT";                                                                   // тут надо указать - инициализировать название квотируемой валюты (деньги)
            tovar_name = "BNB";                                                                    // тут надо указать - инициализировать название товара

            vkl_Robota            = CreateParameter("РОБОТ Включен?", false);
            slippage              = CreateParameter("Велич. проскаль.у ордеров", 1m, 1m, 200m, 5m);
            profit                = CreateParameter("ТЭЙКПРОФИТ от рынка На ", 10, 5, 50, 5);
            greed                 = CreateParameter("Сколько минимум прибыли ожидать в сделке на каждые 100$ ", 0.55m, 0.25m, 5.5m, 0.05m);  // жадность
            greed_max             = CreateParameter("Сколько Максимум прибыли ожидать в сделке на каждые 100$ ", 1.25m, 0.25m, 5.5m, 0.05m); // жадность
            velich_usrednen       = CreateParameter("Усред.уваелич в раз ", 0.01m, 0.01m, 0.5m, 0.01m);
            do_piram              = CreateParameter(" РАСТ. до Пирамиды", 20m, 5m, 200m, 5m);
            turbo_shift           = CreateParameter(" Turbo добавлять", 50m, 5m, 200m, 5m);
            pir_of                = CreateParameter(" ОТКлючить  Пирамиду при % товара", 10m, 5m, 100m, 5m);
            vkl_piramid           = CreateParameter("Пирамида включена?", false);
            prof_on               = CreateParameter("Забирать профит с % ", 10m, 5m, 100m, 5m);
            ckok_profit_stop      = CreateParameter("Сколько ПРИБЫЛИ закрывать стоп ордером? ", 1m, 0.01m, 10m, 0.01m);
            vkl_stopa             = CreateParameter("Стоп Включен?", true);
            deltaUsredn           = CreateParameter("УСРЕДнять через", 20m, 5m, 50m, 5m);
            start_per_depo        = CreateParameter("СТАРТОВАТЬ с ? % депо)", 5, 5, 20, 5);
            min_sum               = CreateParameter("МИН сумма орд.на бирже($)", 10.1m, 10.1m, 10.1m, 10.1m);
            komis_birgi           = CreateParameter("КОМ биржи в %", 0.2m, 0, 0.1m, 0.1m);
            uchet_blok_sred_vkl   = CreateParameter("Учитывать блокир. средства?", false);
            n_min                 = CreateParameter("зависание снимать через N минут ", 1, 1, 20, 1);
            volum_alarm           = CreateParameter("АВАРИЙНЫЙ ОБЪЕМ ПРОДАЖ", 450, 150, 1000, 50);
            kpit_sum              = CreateParameter("Закр. Позицию с УБЫТОКОМ от ", -1m, 10.1m, 10.1m, 10.1m);
            vkl_met_fix_loss_time = CreateParameter("Закрываться по ВРЕМЕНИ в убыток ? ", true);
            vkl_alarm_volum       = CreateParameter("Убыток по ОБЪЕМАМ Закрывать ? ", false);
            Itogo                 = CreateParameter("Итого Заработано ", 0m, 0m, 0m, 0m);
            n_min_lesion          = CreateParameter("Закрывать убыток через N минут ", 120, 30, 360, 20);
            sprint                = CreateParameter("Большие объемы это когда больше = ", 101, 50, 200, 50);
            alarn_persent         = CreateParameter("% купленного можно сливать = ", 25, 50, 100, 1);

            _bolin           = new Bollinger(name + "Bollinger", false);
            _bolin.Lenght    = 20;
            _bolin.Deviation = 2.2m;
            _bolin           = (Bollinger)_tab.CreateCandleIndicator(_bolin, "Prime");
            _bolin.Save();

            block_in = true; // инициализируем значение блокировки

            _ma_short        = new MovingAverage(name + "Ma5", true);
            _ma_short        = (MovingAverage)_tab.CreateCandleIndicator(_ma_short, "Prime");
            _ma_short.Lenght = 5; // присвоение значения
            _ma_short.Save();

            _ma_long        = new MovingAverage(name + "Ma20", false);
            _ma_long        = (MovingAverage)_tab.CreateCandleIndicator(_ma_long, "Prime");
            _ma_long.Lenght = 20; // присвоение значения
            _ma_long.Save();

            _vol = new Volume(name + "Volum", false);
            _vol = (Volume)_tab.CreateCandleIndicator(_vol, "nameArea");
            _vol.Save();

            _tab.BestBidAskChangeEvent        += _tab_BestBidAskChangeEvent;        // событие изменения лучших цен
            _tab.OrderUpdateEvent             += _tab_OrderUpdateEvent;             // событие обновления ордеров
            _tab.MarketDepthUpdateEvent       += _tab_MarketDepthUpdateEvent;       // пришел новый стакан
            _tab.PositionNetVolumeChangeEvent += _tab_PositionNetVolumeChangeEvent; // у позиции изменился объем
            _tab.PositionClosingSuccesEvent   += _tab_PositionClosingSuccesEvent;   // позиция успешно закрыта
            _tab.NewTickEvent += _tab_NewTickEvent;                                 // событие новых тиков
        } // конструктор