Open Week + Buy - Sell

by haitran0207@gmail.com in category Other at 29/11/2016
Description

Code desined to help Trader easy to treder with EMA - STO - RSI - DMI index in 1 code.

Red Point for STO Index,

Yellow Point for EMA Index,

Purple Point for RSI Index,

DMI Point for DMI Index.

Include Open Week Price line and Open Month Price Line.

using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.Indicators;

namespace cAlgo
{
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class WeeklyTradingSignal : Indicator
    {
        //EMASignal
        [Parameter("LongEMA", DefaultValue = 100)]
        public int LongEMA { get; set; }
        [Parameter("ShortEMA", DefaultValue = 5)]
        public int ShortEMA { get; set; }
        //ADXSignal
        [Parameter("ADXPeriod", DefaultValue = 10)]
        public int ADXPeriod { get; set; }
        //RSISignal
        [Parameter("RSIPeriod", DefaultValue = 14)]
        public int RSIPeriod { get; set; }
        //STOSignal
        [Parameter("STOKValue", DefaultValue = 9)]
        public int STOKValue { get; set; }
        [Parameter("STODValue", DefaultValue = 3)]
        public int STODValue { get; set; }
        [Parameter("STOSlow", DefaultValue = 2)]
        public int STOSlow { get; set; }

        [Output("ADX Point", Color = Colors.White, PlotType = PlotType.Points, Thickness = 5)]
        public IndicatorDataSeries ADXPoint { get; set; }

        [Output("EMA point", Color = Colors.Yellow, PlotType = PlotType.Points, Thickness = 5)]
        public IndicatorDataSeries EMAPoint { get; set; }

        [Output("RSI Down Point", Color = Colors.Purple, PlotType = PlotType.Points, Thickness = 5)]
        public IndicatorDataSeries RSIPoint { get; set; }

        [Output("STO Point", Color = Colors.Red, PlotType = PlotType.Points, Thickness = 5)]
        public IndicatorDataSeries STOPoint { get; set; }


        private ExponentialMovingAverage EMAs, EMAl;
        private RelativeStrengthIndex rsi;
        private MarketSeries DailySource, WeeklySource, MonthlySource;
        private DirectionalMovementSystem ADX;
        private ExponentialMovingAverage ema10;
        private ExponentialMovingAverage ema20;
        private ExponentialMovingAverage ema50;
        private ExponentialMovingAverage ema200;
        private StochasticOscillator STO;

        protected override void Initialize()
        {
            DailySource = MarketData.GetSeries(TimeFrame.Daily);
            WeeklySource = MarketData.GetSeries(TimeFrame.Weekly);
            MonthlySource = MarketData.GetSeries(TimeFrame.Monthly);

            ADX = Indicators.DirectionalMovementSystem(ADXPeriod);
            rsi = Indicators.RelativeStrengthIndex(MarketSeries.Close, RSIPeriod);

            EMAs = Indicators.ExponentialMovingAverage(MarketSeries.Close, ShortEMA);
            EMAl = Indicators.ExponentialMovingAverage(MarketSeries.Close, LongEMA);

            ema10 = Indicators.ExponentialMovingAverage(DailySource.Close, 10);
            ema20 = Indicators.ExponentialMovingAverage(DailySource.Close, 20);
            ema50 = Indicators.ExponentialMovingAverage(DailySource.Close, 50);
            ema200 = Indicators.ExponentialMovingAverage(DailySource.Close, 200);
            STO = Indicators.StochasticOscillator(STOKValue, STOSlow, STODValue, MovingAverageType.Exponential);
        }
        public int CandleTick()
        {
            int results = -1;
            double OpenClose = MarketSeries.Close.Last(0) - MarketSeries.Open.Last(0);
            double HighLow = MarketSeries.High.Last(0) - MarketSeries.High.Last(0);
            double Open = MarketSeries.Open.Last(0);
            double Close = MarketSeries.Close.Last(0);
            double Median = MarketSeries.Median.Last(0);
            if ((OpenClose < HighLow / 3 && Open > Median && Close > Median) || (OpenClose > 0.7 * HighLow))
                results = 0;
            else if ((OpenClose < HighLow / 3 && Open < Median && Close < Median) || (OpenClose > 0.7 * HighLow))
                results = 1;
            return results;
        }

        public override void Calculate(int index)
        {
            //LongTrendSignal
            var StaticLongPos = StaticPosition.BottomLeft;
            string name = "Xu hướng dài hạn";
            string LongResults;
            string DayOfWeek = DailySource.OpenTime.Last(0).DayOfWeek.ToString();

            if (ema10.Result.Last(1) > ema20.Result.Last(1) && ema20.Result.Last(1) > ema50.Result.Last(1) && ema50.Result.Last(1) > ema200.Result.Last(1))
                LongResults = "Long: Up";
            else if (ema10.Result.Last(1) < ema20.Result.Last(1) && ema20.Result.Last(1) < ema50.Result.Last(1) && ema50.Result.Last(1) < ema200.Result.Last(1))
                LongResults = "Long: Down";
            else
                LongResults = "Long: Unknow";

            //if (LongResults == "Long: Up" && ema10.Result.IsRising() && ema10.Result.Last(0) < MarketSeries.Low.Last(0))
            //LongPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 25);
            //else if (LongResults == "Long: Down" && ema10.Result.IsFalling() && ema10.Result.Last(0) > MarketSeries.High.Last(0))
            //LongPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 25);

            //End
            //EMASignal

            string TF = TimeFrame.ToString();
            int CandleSignal = CandleTick();
            double EMA0 = EMAs.Result.Last(0) - EMAl.Result.Last(0);
            double EMA1 = EMAs.Result.Last(1) - EMAl.Result.Last(1);
            double EMA2 = EMAs.Result.Last(2) - EMAl.Result.Last(2);
            double EMA3 = EMAs.Result.Last(3) - EMAl.Result.Last(3);
            double EMA4 = EMAs.Result.Last(4) - EMAl.Result.Last(4);
            double EMA5 = EMAs.Result.Last(5) - EMAl.Result.Last(5);
            double EMA6 = EMAs.Result.Last(6) - EMAl.Result.Last(6);
            double EMA7 = EMAs.Result.Last(7) - EMAl.Result.Last(7);
            double AvgEMA0 = (EMA0 + EMA1 + EMA2) / 3;
            double AvgEMA1 = (EMA1 + EMA2 + EMA3) / 3;
            double AvgEMA2 = (EMA2 + EMA3 + EMA4) / 3;
            double AvgEMA3 = (EMA5 + EMA3 + EMA4) / 3;
            double DelEMA0 = EMA0 - AvgEMA0;
            double DelEMA1 = EMA1 - AvgEMA1;
            double DelEMA2 = EMA2 - AvgEMA2;
            double DelEMA3 = EMA3 - AvgEMA3;
            double EmaMin5 = EMAs.Result.Minimum(10);
            double EmaMax5 = EMAs.Result.Maximum(10);

            //Trường hợp cắt trên và dưới
            //if (EMA0 > AvgEMA0 && EMA1 < AvgEMA1 && EMA2 < AvgEMA2)
            //EMAPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 10);
            //else if (EMA0 < AvgEMA0 && EMA1 > AvgEMA1 && EMA2 > AvgEMA2)
            //EMAPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 10);

            // Trường hợp tạo đỉnh và đáy
            if (EMA0 > AvgEMA0 && EMA1 < AvgEMA1 && EMA0 > EMA1 && EMA1 <= EMA2 && EMA2 <= EMA3)
                //&& EMA3 <= EMA4)
                // && CandleSignal == 0)
                EMAPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 10);
            else if (EMA0 < AvgEMA0 && EMA1 > AvgEMA1 && EMA0 < EMA1 && EMA1 >= EMA2 && EMA2 >= EMA3)
                // && EMA3 >= EMA4)
                //&& CandleSignal == 1)
                EMAPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 10);

            //End
            //RSISignal
            double RSIvalue0 = rsi.Result.Last(0);
            double RSIvalue1 = rsi.Result.Last(1);
            double RSIvalue2 = rsi.Result.Last(2);
            double RSIvalue3 = rsi.Result.Last(3);
            double RSIMin120 = rsi.Result.Minimum(120);
            double RSIMax120 = rsi.Result.Maximum(120);
            string RsiResults;
            if ((rsi.Result.HasCrossedAbove(30, 0) && RSIvalue1 < 30 && RSIvalue2 < 30 && RSIvalue3 < 30))
                //(RSIMin120 >= RSIvalue1 && RSIvalue0 >= RSIvalue1 && RSIvalue1 < RSIvalue2 && RSIvalue2 < RSIvalue3) ||
                RSIPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 20);
            else if ((rsi.Result.HasCrossedBelow(70, 0) && RSIvalue1 > 70 && RSIvalue2 > 70 && RSIvalue3 > 70))
                //(RSIMax120 <= RSIvalue1 && RSIvalue0 <= RSIvalue1 && RSIvalue1 > RSIvalue2 && RSIvalue2 > RSIvalue3) ||
                RSIPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 20);

            if (29 <= rsi.Result.Last(0) && rsi.Result.Last(0) < 30 && RSIvalue1 < 30 && RSIvalue2 < 30 && RSIvalue3 < 30)
                RsiResults = "RSI: Sell Signal Nearly Appear";
            else if (70 < rsi.Result.Last(0) && rsi.Result.Last(0) <= 71 && RSIvalue1 > 70 && RSIvalue2 > 70 && RSIvalue3 > 70)
                RsiResults = "RSI: Buy Signal Nearly Appear";
            else
                RsiResults = "";
            //End
            //ADXSignal
            double DIMinus1 = ADX.DIMinus.Last(1);
            double DIMinus2 = ADX.DIMinus.Last(2);
            double DIMinus3 = ADX.DIMinus.Last(3);
            double DIPlus1 = ADX.DIPlus.Last(1);
            double DIPlus2 = ADX.DIPlus.Last(2);
            double DIPlus3 = ADX.DIPlus.Last(3);
            string AdxResults;
            if (ADX.DIPlus.HasCrossedAbove(ADX.DIMinus, 0) && DIPlus1 < DIMinus1 && DIPlus2 < DIMinus2 && DIPlus3 < DIMinus3)
                ADXPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 30);
            else if (ADX.DIPlus.HasCrossedBelow(ADX.DIMinus, 0) && DIPlus1 > DIMinus1 && DIPlus2 > DIMinus2 && DIPlus3 > DIMinus3)
                ADXPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 30);

            if (Math.Abs(ADX.DIPlus.Last(0) - ADX.DIMinus.Last(0)) <= 1 && ADX.DIPlus.Last(0) > ADX.DIMinus.Last(0) && DIPlus1 < DIMinus1 && DIPlus2 < DIMinus2 && DIPlus3 < DIMinus3)
                AdxResults = "ADX: Sell Signal Nearly Appear";
            else if (Math.Abs(ADX.DIPlus.Last(0) - ADX.DIMinus.Last(0)) <= 1 && ADX.DIPlus.Last(0) < ADX.DIMinus.Last(0) && DIPlus1 > DIMinus1 && DIPlus2 > DIMinus2 && DIPlus3 > DIMinus3)
                AdxResults = "ADX: Buy Signal Nearly Appear";
            else
                AdxResults = "";
            //End
            //StoSignal
            double KValue0 = STO.PercentK.Last(0);
            double KValue1 = STO.PercentK.Last(1);
            double KValue2 = STO.PercentK.Last(2);
            double KValue3 = STO.PercentK.Last(3);
            double KValue4 = STO.PercentK.Last(4);
            double KValue5 = STO.PercentK.Last(5);
            double KValue6 = STO.PercentK.Last(6);
            double DValue0 = STO.PercentD.Last(0);
            double DValue1 = STO.PercentD.Last(1);
            double DValue2 = STO.PercentD.Last(2);
            double DValue3 = STO.PercentD.Last(3);

            //Trường hợp giao nhau
            //if (STO.PercentK.HasCrossedAbove(STO.PercentD, 0) && KValue1 < DValue1 && KValue2 < DValue2 && KValue3 < DValue3)
            //STOPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 40);
            //else if (STO.PercentK.HasCrossedBelow(STO.PercentD, 0) && KValue1 > DValue1 && KValue2 > DValue2 && KValue3 > DValue3)
            //STOPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 40);

            //Trường hợp đỉnh đáy
            if (KValue0 > DValue0 && KValue0 > KValue1 && KValue1 < KValue2 && KValue2 < KValue3 && KValue3 < KValue4)
                //&& KValue4 < KValue5 && KValue5 < KValue6)
                STOPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 40);
            else if (KValue0 < DValue0 && KValue0 < KValue1 && KValue1 > KValue2 && KValue2 > KValue3 && KValue3 > KValue4)
                //&& KValue4 > KValue5 && KValue5 > KValue6)
                STOPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 40);

            //End
            //OpenWeek
            for (int i = 0; i < 120; i++)
            {
                DateTime startOfMonth = MonthlySource.OpenTime.Last(i).Date.AddDays(0);
                DateTime endOfMonth = startOfMonth.AddMonths(1);

                DateTime StartOfWeek = WeeklySource.OpenTime.Last(i).Date.AddDays(0);
                DateTime endOfWeek = StartOfWeek.AddDays(7);

                DateTime StartOfDay = DailySource.OpenTime.Last(i).Date.AddDays(0);
                DateTime endOfDay = StartOfDay.AddHours(24);

                var MonthlyOpen = MonthlySource.Open.Last(i);
                var WeeklyOpen = WeeklySource.Open.Last(i);
                var DailyOpen = DailySource.Open.Last(i);

                ChartObjects.DrawLine("OpenWeek" + i, StartOfWeek, WeeklyOpen, endOfWeek, WeeklyOpen, Colors.Aqua, 1);
                ChartObjects.DrawLine("OpenMonth" + i, startOfMonth, MonthlyOpen, endOfMonth, MonthlyOpen, Colors.SlateGray, 2);
            }
            //End
            ChartObjects.DrawText(name, LongResults + "\n" + RsiResults + "\n" + AdxResults, StaticLongPos, Colors.Red);
        }
    }
}

 

Download
420 downloads
How to install
Notification Publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section you may use the Copyright Infringement Notification form to submit a claim.
Formula / Source Code
Language: C#
Trading Platform: cAlgocTrader
using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.Indicators;

namespace cAlgo
{
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class WeeklyTradingSignal : Indicator
    {
        //EMASignal
        [Parameter("LongEMA", DefaultValue = 100)]
        public int LongEMA { get; set; }
        [Parameter("ShortEMA", DefaultValue = 5)]
        public int ShortEMA { get; set; }
        //ADXSignal
        [Parameter("ADXPeriod", DefaultValue = 10)]
        public int ADXPeriod { get; set; }
        //RSISignal
        [Parameter("RSIPeriod", DefaultValue = 14)]
        public int RSIPeriod { get; set; }
        //STOSignal
        [Parameter("STOKValue", DefaultValue = 9)]
        public int STOKValue { get; set; }
        [Parameter("STODValue", DefaultValue = 3)]
        public int STODValue { get; set; }
        [Parameter("STOSlow", DefaultValue = 2)]
        public int STOSlow { get; set; }

        [Output("ADX Point", Color = Colors.White, PlotType = PlotType.Points, Thickness = 5)]
        public IndicatorDataSeries ADXPoint { get; set; }

        [Output("EMA point", Color = Colors.Yellow, PlotType = PlotType.Points, Thickness = 5)]
        public IndicatorDataSeries EMAPoint { get; set; }

        [Output("RSI Down Point", Color = Colors.Purple, PlotType = PlotType.Points, Thickness = 5)]
        public IndicatorDataSeries RSIPoint { get; set; }

        [Output("STO Point", Color = Colors.Red, PlotType = PlotType.Points, Thickness = 5)]
        public IndicatorDataSeries STOPoint { get; set; }


        private ExponentialMovingAverage EMAs, EMAl;
        private RelativeStrengthIndex rsi;
        private MarketSeries DailySource, WeeklySource, MonthlySource;
        private DirectionalMovementSystem ADX;
        private ExponentialMovingAverage ema10;
        private ExponentialMovingAverage ema20;
        private ExponentialMovingAverage ema50;
        private ExponentialMovingAverage ema200;
        private StochasticOscillator STO;

        protected override void Initialize()
        {
            DailySource = MarketData.GetSeries(TimeFrame.Daily);
            WeeklySource = MarketData.GetSeries(TimeFrame.Weekly);
            MonthlySource = MarketData.GetSeries(TimeFrame.Monthly);

            ADX = Indicators.DirectionalMovementSystem(ADXPeriod);
            rsi = Indicators.RelativeStrengthIndex(MarketSeries.Close, RSIPeriod);

            EMAs = Indicators.ExponentialMovingAverage(MarketSeries.Close, ShortEMA);
            EMAl = Indicators.ExponentialMovingAverage(MarketSeries.Close, LongEMA);

            ema10 = Indicators.ExponentialMovingAverage(DailySource.Close, 10);
            ema20 = Indicators.ExponentialMovingAverage(DailySource.Close, 20);
            ema50 = Indicators.ExponentialMovingAverage(DailySource.Close, 50);
            ema200 = Indicators.ExponentialMovingAverage(DailySource.Close, 200);
            STO = Indicators.StochasticOscillator(STOKValue, STOSlow, STODValue, MovingAverageType.Exponential);
        }
        public int CandleTick()
        {
            int results = -1;
            double OpenClose = MarketSeries.Close.Last(0) - MarketSeries.Open.Last(0);
            double HighLow = MarketSeries.High.Last(0) - MarketSeries.High.Last(0);
            double Open = MarketSeries.Open.Last(0);
            double Close = MarketSeries.Close.Last(0);
            double Median = MarketSeries.Median.Last(0);
            if ((OpenClose < HighLow / 3 && Open > Median && Close > Median) || (OpenClose > 0.7 * HighLow))
                results = 0;
            else if ((OpenClose < HighLow / 3 && Open < Median && Close < Median) || (OpenClose > 0.7 * HighLow))
                results = 1;
            return results;
        }

        public override void Calculate(int index)
        {
            //LongTrendSignal
            var StaticLongPos = StaticPosition.BottomLeft;
            string name = "Xu hướng dài hạn";
            string LongResults;
            string DayOfWeek = DailySource.OpenTime.Last(0).DayOfWeek.ToString();

            if (ema10.Result.Last(1) > ema20.Result.Last(1) && ema20.Result.Last(1) > ema50.Result.Last(1) && ema50.Result.Last(1) > ema200.Result.Last(1))
                LongResults = "Long: Up";
            else if (ema10.Result.Last(1) < ema20.Result.Last(1) && ema20.Result.Last(1) < ema50.Result.Last(1) && ema50.Result.Last(1) < ema200.Result.Last(1))
                LongResults = "Long: Down";
            else
                LongResults = "Long: Unknow";

            //if (LongResults == "Long: Up" && ema10.Result.IsRising() && ema10.Result.Last(0) < MarketSeries.Low.Last(0))
            //LongPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 25);
            //else if (LongResults == "Long: Down" && ema10.Result.IsFalling() && ema10.Result.Last(0) > MarketSeries.High.Last(0))
            //LongPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 25);

            //End
            //EMASignal

            string TF = TimeFrame.ToString();
            int CandleSignal = CandleTick();
            double EMA0 = EMAs.Result.Last(0) - EMAl.Result.Last(0);
            double EMA1 = EMAs.Result.Last(1) - EMAl.Result.Last(1);
            double EMA2 = EMAs.Result.Last(2) - EMAl.Result.Last(2);
            double EMA3 = EMAs.Result.Last(3) - EMAl.Result.Last(3);
            double EMA4 = EMAs.Result.Last(4) - EMAl.Result.Last(4);
            double EMA5 = EMAs.Result.Last(5) - EMAl.Result.Last(5);
            double EMA6 = EMAs.Result.Last(6) - EMAl.Result.Last(6);
            double EMA7 = EMAs.Result.Last(7) - EMAl.Result.Last(7);
            double AvgEMA0 = (EMA0 + EMA1 + EMA2) / 3;
            double AvgEMA1 = (EMA1 + EMA2 + EMA3) / 3;
            double AvgEMA2 = (EMA2 + EMA3 + EMA4) / 3;
            double AvgEMA3 = (EMA5 + EMA3 + EMA4) / 3;
            double DelEMA0 = EMA0 - AvgEMA0;
            double DelEMA1 = EMA1 - AvgEMA1;
            double DelEMA2 = EMA2 - AvgEMA2;
            double DelEMA3 = EMA3 - AvgEMA3;
            double EmaMin5 = EMAs.Result.Minimum(10);
            double EmaMax5 = EMAs.Result.Maximum(10);

            //Trường hợp cắt trên và dưới
            //if (EMA0 > AvgEMA0 && EMA1 < AvgEMA1 && EMA2 < AvgEMA2)
            //EMAPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 10);
            //else if (EMA0 < AvgEMA0 && EMA1 > AvgEMA1 && EMA2 > AvgEMA2)
            //EMAPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 10);

            // Trường hợp tạo đỉnh và đáy
            if (EMA0 > AvgEMA0 && EMA1 < AvgEMA1 && EMA0 > EMA1 && EMA1 <= EMA2 && EMA2 <= EMA3)
                //&& EMA3 <= EMA4)
                // && CandleSignal == 0)
                EMAPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 10);
            else if (EMA0 < AvgEMA0 && EMA1 > AvgEMA1 && EMA0 < EMA1 && EMA1 >= EMA2 && EMA2 >= EMA3)
                // && EMA3 >= EMA4)
                //&& CandleSignal == 1)
                EMAPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 10);

            //End
            //RSISignal
            double RSIvalue0 = rsi.Result.Last(0);
            double RSIvalue1 = rsi.Result.Last(1);
            double RSIvalue2 = rsi.Result.Last(2);
            double RSIvalue3 = rsi.Result.Last(3);
            double RSIMin120 = rsi.Result.Minimum(120);
            double RSIMax120 = rsi.Result.Maximum(120);
            string RsiResults;
            if ((rsi.Result.HasCrossedAbove(30, 0) && RSIvalue1 < 30 && RSIvalue2 < 30 && RSIvalue3 < 30))
                //(RSIMin120 >= RSIvalue1 && RSIvalue0 >= RSIvalue1 && RSIvalue1 < RSIvalue2 && RSIvalue2 < RSIvalue3) ||
                RSIPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 20);
            else if ((rsi.Result.HasCrossedBelow(70, 0) && RSIvalue1 > 70 && RSIvalue2 > 70 && RSIvalue3 > 70))
                //(RSIMax120 <= RSIvalue1 && RSIvalue0 <= RSIvalue1 && RSIvalue1 > RSIvalue2 && RSIvalue2 > RSIvalue3) ||
                RSIPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 20);

            if (29 <= rsi.Result.Last(0) && rsi.Result.Last(0) < 30 && RSIvalue1 < 30 && RSIvalue2 < 30 && RSIvalue3 < 30)
                RsiResults = "RSI: Sell Signal Nearly Appear";
            else if (70 < rsi.Result.Last(0) && rsi.Result.Last(0) <= 71 && RSIvalue1 > 70 && RSIvalue2 > 70 && RSIvalue3 > 70)
                RsiResults = "RSI: Buy Signal Nearly Appear";
            else
                RsiResults = "";
            //End
            //ADXSignal
            double DIMinus1 = ADX.DIMinus.Last(1);
            double DIMinus2 = ADX.DIMinus.Last(2);
            double DIMinus3 = ADX.DIMinus.Last(3);
            double DIPlus1 = ADX.DIPlus.Last(1);
            double DIPlus2 = ADX.DIPlus.Last(2);
            double DIPlus3 = ADX.DIPlus.Last(3);
            string AdxResults;
            if (ADX.DIPlus.HasCrossedAbove(ADX.DIMinus, 0) && DIPlus1 < DIMinus1 && DIPlus2 < DIMinus2 && DIPlus3 < DIMinus3)
                ADXPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 30);
            else if (ADX.DIPlus.HasCrossedBelow(ADX.DIMinus, 0) && DIPlus1 > DIMinus1 && DIPlus2 > DIMinus2 && DIPlus3 > DIMinus3)
                ADXPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 30);

            if (Math.Abs(ADX.DIPlus.Last(0) - ADX.DIMinus.Last(0)) <= 1 && ADX.DIPlus.Last(0) > ADX.DIMinus.Last(0) && DIPlus1 < DIMinus1 && DIPlus2 < DIMinus2 && DIPlus3 < DIMinus3)
                AdxResults = "ADX: Sell Signal Nearly Appear";
            else if (Math.Abs(ADX.DIPlus.Last(0) - ADX.DIMinus.Last(0)) <= 1 && ADX.DIPlus.Last(0) < ADX.DIMinus.Last(0) && DIPlus1 > DIMinus1 && DIPlus2 > DIMinus2 && DIPlus3 > DIMinus3)
                AdxResults = "ADX: Buy Signal Nearly Appear";
            else
                AdxResults = "";
            //End
            //StoSignal
            double KValue0 = STO.PercentK.Last(0);
            double KValue1 = STO.PercentK.Last(1);
            double KValue2 = STO.PercentK.Last(2);
            double KValue3 = STO.PercentK.Last(3);
            double KValue4 = STO.PercentK.Last(4);
            double KValue5 = STO.PercentK.Last(5);
            double KValue6 = STO.PercentK.Last(6);
            double DValue0 = STO.PercentD.Last(0);
            double DValue1 = STO.PercentD.Last(1);
            double DValue2 = STO.PercentD.Last(2);
            double DValue3 = STO.PercentD.Last(3);

            //Trường hợp giao nhau
            //if (STO.PercentK.HasCrossedAbove(STO.PercentD, 0) && KValue1 < DValue1 && KValue2 < DValue2 && KValue3 < DValue3)
            //STOPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 40);
            //else if (STO.PercentK.HasCrossedBelow(STO.PercentD, 0) && KValue1 > DValue1 && KValue2 > DValue2 && KValue3 > DValue3)
            //STOPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 40);

            //Trường hợp đỉnh đáy
            if (KValue0 > DValue0 && KValue0 > KValue1 && KValue1 < KValue2 && KValue2 < KValue3 && KValue3 < KValue4)
                //&& KValue4 < KValue5 && KValue5 < KValue6)
                STOPoint[index] = MarketSeries.Low[index] - (Symbol.PipSize * 40);
            else if (KValue0 < DValue0 && KValue0 < KValue1 && KValue1 > KValue2 && KValue2 > KValue3 && KValue3 > KValue4)
                //&& KValue4 > KValue5 && KValue5 > KValue6)
                STOPoint[index] = MarketSeries.High[index] + (Symbol.PipSize * 40);

            //End
            //OpenWeek
            for (int i = 0; i < 120; i++)
            {
                DateTime startOfMonth = MonthlySource.OpenTime.Last(i).Date.AddDays(0);
                DateTime endOfMonth = startOfMonth.AddMonths(1);

                DateTime StartOfWeek = WeeklySource.OpenTime.Last(i).Date.AddDays(0);
                DateTime endOfWeek = StartOfWeek.AddDays(7);

                DateTime StartOfDay = DailySource.OpenTime.Last(i).Date.AddDays(0);
                DateTime endOfDay = StartOfDay.AddHours(24);

                var MonthlyOpen = MonthlySource.Open.Last(i);
                var WeeklyOpen = WeeklySource.Open.Last(i);
                var DailyOpen = DailySource.Open.Last(i);

                ChartObjects.DrawLine("OpenWeek" + i, StartOfWeek, WeeklyOpen, endOfWeek, WeeklyOpen, Colors.Aqua, 1);
                ChartObjects.DrawLine("OpenMonth" + i, startOfMonth, MonthlyOpen, endOfMonth, MonthlyOpen, Colors.SlateGray, 2);
            }
            //End
            ChartObjects.DrawText(name, LongResults + "\n" + RsiResults + "\n" + AdxResults, StaticLongPos, Colors.Red);
        }
    }
}
Comments
5