Belkhayate Timing indicator, multiple time frame support

Created at 24 Sep 2014, 22:19
How’s your experience with the cTrader Platform?
Your feedback is crucial to cTrader's development. Please take a few seconds to share your opinion and help us improve your trading experience. Thanks!
PA

Pannekoek

Joined 03.08.2013

Belkhayate Timing indicator, multiple time frame support
24 Sep 2014, 22:19


Hi,

So I'm trying to adjust the belkhayate timing indicator as posted in the library to work in a different timeframe. This because I have a bot on one time-frame (say h1) while I want that bot to use the values for the belkhayate timing on a say h4 timeframe. This is how I have it now:

namespace cAlgo.Indicators
{
    [Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class BelkhayateTiming : Indicator
    {

        private int LastAlertBar;
        private MarketSeries MyMarketSeries;

        [Parameter()]
        public TimeFrame MyTimeFrame { get; set; }

        [Output("High", Color = Colors.Gray, PlotType = PlotType.Points)]
        public IndicatorDataSeries High { get; set; }
        [Output("Low", Color = Colors.Gray, PlotType = PlotType.Points)]
        public IndicatorDataSeries Low { get; set; }
        [Output("Open", Color = Colors.Gray, PlotType = PlotType.Points)]
        public IndicatorDataSeries Open { get; set; }
        [Output("Close", Color = Colors.Gray, PlotType = PlotType.Points)]
        public IndicatorDataSeries Close { get; set; }

        [Output("SellLine1", Color = Colors.DimGray, PlotType = PlotType.Line, LineStyle = LineStyle.Lines)]
        public IndicatorDataSeries SellLine1 { get; set; }
        [Output("SellLine2", Color = Colors.DimGray, PlotType = PlotType.Line, LineStyle = LineStyle.Lines)]
        public IndicatorDataSeries SellLine2 { get; set; }
        [Output("BuyLine1", Color = Colors.DimGray, PlotType = PlotType.Line, LineStyle = LineStyle.Lines)]
        public IndicatorDataSeries BuyLine1 { get; set; }
        [Output("BuyLine2", Color = Colors.DimGray, PlotType = PlotType.Line, LineStyle = LineStyle.Lines)]
        public IndicatorDataSeries BuyLine2 { get; set; }

        protected override void Initialize()
        {
            MyMarketSeries = MarketData.GetSeries(MyTimeFrame);
        }

        public override void Calculate(int index)
        {
            double middle = (((MyMarketSeries.High[index] + MyMarketSeries.Low[index]) / 2) + ((MyMarketSeries.High[index - 1] + MyMarketSeries.Low[index - 1]) / 2) + ((MyMarketSeries.High[index - 2] + MyMarketSeries.Low[index - 2]) / 2) + ((MyMarketSeries.High[index - 3] + MyMarketSeries.Low[index - 3]) / 2) + ((MyMarketSeries.High[index - 4] + MyMarketSeries.Low[index - 4]) / 2)) / 5;
            double scale = (((MyMarketSeries.High[index] - MyMarketSeries.Low[index]) + (MyMarketSeries.High[index - 1] - MyMarketSeries.Low[index - 1]) + (MyMarketSeries.High[index - 2] - MyMarketSeries.Low[index - 2]) + (MyMarketSeries.High[index - 3] - MyMarketSeries.Low[index - 3]) + (MyMarketSeries.High[index - 4] - MyMarketSeries.Low[index - 4])) / 5) * 0.2;

            High[index] = (MyMarketSeries.High[index] - middle) / scale;
            Low[index] = (MyMarketSeries.Low[index] - middle) / scale;
            Open[index] = (MyMarketSeries.Open[index] - middle) / scale;
            Close[index] = (MyMarketSeries.Close[index] - middle) / scale;


            if (Open[index] > Close[index])
            {
                ChartObjects.DrawLine(string.Format("CRS_High_{0}", index), index, High[index], index, Low[index], Colors.Gray, 1, LineStyle.Solid);
                ChartObjects.DrawLine(string.Format("CRS_Open_{0}", index), index, Open[index], index, Close[index], Colors.DimGray, 11, LineStyle.Solid);
            }
            else
            {
                ChartObjects.DrawLine(string.Format("CRS_Low_{0}", index), index, High[index], index, Low[index], Colors.Gray, 1, LineStyle.Solid);
                ChartObjects.DrawLine(string.Format("CRS_Close_{0}", index), index, Open[index], index, Close[index], Colors.LightGray, 11, LineStyle.Solid);
            }

            SellLine1[index] = 6;
            SellLine2[index] = 8;
            BuyLine1[index] = -6;
            BuyLine2[index] = -8;
        }

    }
}

What I want is that I can use the following bit of code in my OnBar () method (running on a h1 timeframe) to capture the last close of the belkhayate timing (which is on a different timeframe). So every time my OnBar () gets called (every hour) I want it to get the results of the last h4 bar.

 

        protected override void OnBar()
        {
            if (Timing.Close.Last(1) < Timing.BuyLine2.Last(1))
            {
                 // blablalba
            }
        }

This gives me a NaN error..

Hope it is clear.


@Pannekoek
Replies

Pannekoek
24 Sep 2014, 22:23

Additional note. If I just use it as an indicator and change the MyTimeFrame variable, it does show up. However, it also does create a new bar on every new bar on the original time-frame, which is not desired.


@Pannekoek

Spotware
25 Sep 2014, 12:19

We can recommend you to contact one of our Partners or post a job in Development Jobs section.


@Spotware