Ejemplo n.º 1
0
        protected override void OnBarUpdate()     //anytime a bar closes, so every 2000 ticks, this method get called
        {
            if (BarsInProgress == 0)              //Runs everytime a new 2000 Ticks Bar is formed
            {
                if (CurrentBar == null || CurrentBar < BarsRequiredToTrade)
                {
                    return;
                }

                //Last swing high is higher than the most recent swing high, means market is trending down
                int swingHighBar = swing.SwingHighBar(0, 1, Strength + 1);
                if (swingHighBar != -1)                  //swing point is found within the lookBackPeriod
                {
                    double swingHighPrice = High[swingHighBar];
                    if (swingHighPrice < lastHighPrice && lastHighBar > -1)
                    {
                        if (trendBreak)
                        {
                            CurrentTrend = new TrendChannels(lastHighBar, lastHighPrice, CurrentBar - swingHighBar, swingHighPrice, lastLowBar, lastLowPrice)
                            {
                                IsHigh = false
                            };
                            trendChannel.Enqueue(CurrentTrend);
                            trendBreak = false;
                        }
                    }
                    lastHighBar   = CurrentBar - swingHighBar;
                    lastHighPrice = swingHighPrice;
                }

                //Last swing low is lower than the most recent swing low, means market is trending up
                int swingLowBar = swing.SwingLowBar(0, 1, Strength + 1);
                if (swingLowBar != -1)                  //swing point is found within the lookBackPeriod
                {
                    double swingLowPrice = Low[swingLowBar];
                    if (swingLowPrice > lastLowPrice && lastLowBar > -1)
                    {
                        if (trendBreak)
                        {
                            CurrentTrend = new TrendChannels(lastLowBar, lastLowPrice, CurrentBar - swingLowBar, swingLowPrice, lastHighBar, lastHighPrice)
                            {
                                IsHigh = true
                            };
                            trendChannel.Enqueue(CurrentTrend);
                            trendBreak = false;
                        }
                    }
                    lastLowBar   = CurrentBar - swingLowBar;
                    lastLowPrice = swingLowPrice;
                }

                if (!trendBreak)
                {
                    //top and bottom of the trend channel
                    double highRay = CurrentTrend.ParallelPrice + (CurrentBar - CurrentTrend.ParallelBar) * CurrentTrend.Slope;
                    double lowRay  = CurrentTrend.EndPrice + (CurrentBar - CurrentTrend.EndBar) * CurrentTrend.Slope;

                    //if price breaks the trend channel, new trend channel is forming
                    if (Close[0] > highRay + 0.5 * TickSize || Close[0] < lowRay - 0.5 * TickSize)       //0.5*TickSize for filtering false breakout
                    {
                        Draw.Text(this, "broken" + CurrentBar, "broken", 0, High[0], Brushes.Black);
                        trendBreak   = true;
                        CurrentTrend = null;
                    }
                }

                if (buy_leg == null)
                {
                    buy_leg  = new buy_2lpb(this, High[0]);
                    sell_leg = new sell_2lpb(this, Low[0]);
                }
                buy_leg.Setup(ref buy_leg);
                sell_leg.Setup(ref sell_leg);
                sellEntryBar = false;
                buyEntryBar  = false;
                if (enter_buy)
                {
                    IntraBar(this, true);
                }
                if (enter_sell)
                {
                    IntraBar(this, false);
                }
            }
            else if (BarsInProgress == 1)                                 //Runs within each 5 tick bar
            {
                if (ToTime(Time[0]) >= 73000 && ToTime(Time[0]) < 153000) //allow entering trades during market open
                {
                    if (enter_buy && (Close[0] >= (buy_leg.legs[3] + 0.25)) && buyEntryBar && CurrentTrend.IsHigh)
                    {
                        enter_buy = false;
                        EnterLong(1, "My Buy Entry");
                    }
                    if (enter_sell && (Close[0] <= (sell_leg.legs[3] - 0.25)) && sellEntryBar && CurrentTrend.IsHigh)
                    {
                        enter_sell = false;
                        EnterShort(1, "My Sell Entry");
                    }
                }
            }
            else
            {
                return;
            }
        }
Ejemplo n.º 2
0
            public void Setup(ref sell_2lpb my_setup)
            {
                double Low = Instance.Low[0];

                if (legs[1] == 0)
                {
                    if (Low < reference)
                    {
                        reference = Low; legs[0] = Low;
                    }
                    else if (Low > reference)
                    {
                        reference = Low; legs[1] = Low;
                    }
                }
                else if (legs[2] == 0)
                {
                    if (Low > reference)
                    {
                        reference = Low; legs[1] = Low;
                    }
                    else if (Low < legs[0])
                    {
                        my_setup = new sell_2lpb(Instance, Low);
                    }
                    else if (Low < reference)
                    {
                        reference = Low; legs[2] = Low;
                    }
                }
                else if (legs[3] == 0)
                {
                    if (Low < legs[0])
                    {
                        my_setup = new sell_2lpb(Instance, Low);
                    }
                    else if (Low < reference)
                    {
                        reference = Low; legs[2] = Low;
                    }
                    else if (Low > reference)
                    {
                        reference = Low; legs[3] = Low;
                    }
                }
                else if (legs[4] == 0)
                {
                    if (Low > reference)
                    {
                        reference = Low; legs[3] = Low; enter_sell = true;
                    }
                    else if (Low < legs[2])
                    {
                        my_setup = new sell_2lpb(Instance, Low); enter_sell = false;
                    }
                    else if (Low < reference)
                    {
                        reference = Low; legs[4] = Low; enter_sell = false;
                    }
                }
                else if (legs[5] == 0)
                {
                    if (Low < legs[2])
                    {
                        my_setup = new sell_2lpb(Instance, Low);
                    }
                    else if (Low < reference)
                    {
                        reference = Low; legs[4] = Low;
                    }
                    else if (Low > reference)
                    {
                        reference = Low; legs[5] = Low;
                    }
                }
                else if (legs[6] == 0)
                {
                    if (Low > reference)
                    {
                        reference = Low; legs[5] = Low;
                    }
                    else if (Low < legs[4])
                    {
                        my_setup = new sell_2lpb(Instance, Low);
                    }
                    else if (Low < reference)
                    {
                        reference = Low; legs[6] = Low;
                    }
                }
                else
                {
                    if (Low < legs[4])
                    {
                        my_setup = new sell_2lpb(Instance, Low);
                    }
                    else if (Low < reference)
                    {
                        reference = Low; legs[6] = Low;
                    }
                    else if (Low > reference)
                    {
                        reference = Low; legs[4] = legs[6]; legs[5] = Low; legs[6] = 0;
                    }
                }
            }