MacdHistogram at different timeframe
            
                 13 Jul 2020, 23:58
            
                    
Hello
I am having difficulty converting this "Macd Histogram" indicator in a time different from the table.
can you light my lantern ..
cordially
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class NewcBot : Robot
    {
        [Parameter("Another Timeframe MacdHistogram", DefaultValue = "Hour4")]
        public TimeFrame AnotherTimeFrame { get; set; }
        [Parameter("MACD LongCycle", DefaultValue = 26, MinValue = 1)]
        public int LongCycle { get; set; }
        [Parameter("MACD ShortCycle", DefaultValue = 12, MinValue = 1)]
        public int ShortCycle { get; set; }
        [Parameter("MACD Period", DefaultValue = 9, MinValue = 1)]
        public int MACDPeriod { get; set; }
        [Parameter("-------------------------", DefaultValue = "")]
        public string Separator1 { get; set; }
        [Parameter("Another Timeframe MovingAverage", DefaultValue = "Hour")]
        public TimeFrame AnotherTimeFrame2 { get; set; }
        [Parameter("Source")]
        public DataSeries Source { get; set; }
        [Parameter("Period", DefaultValue = 13)]
        public int Period { get; set; }
        [Parameter("Moving Average Type", DefaultValue = MovingAverageType.TimeSeries)]
        public MovingAverageType MovingAverageType { get; set; }
        private MacdHistogram MACD;
        private MovingAverage MA;
        protected override void OnStart()
        {
            MACD = Indicators.MacdHistogram(LongCycle, ShortCycle, MACDPeriod);
            MA = Indicators.MovingAverage(MarketData.GetBars(AnotherTimeFrame2).ClosePrices, Period, MovingAverageType);
        }
    }
}
 
Replies
                     MATRIXTRADER
                     14 Jul 2020, 09:55
                                    
RE:
PanagiotisCharalampous said:
Hi MATRIXTRADER,
Try
MACD = Indicators.MacdHistogram(MarketData.GetBars(AnotherTimeFrame2), LongCycle, ShortCycle, MACDPeriod);
Best Regards,
Panagiotis
Thanks for your help,
I had already tried this method that I had apply to MA in the example above and which works ... unfortunately for MacdHistogram the method does not want to build.Error CS1502: The overloaded method best matches 'cAlgo.API.Internals.IIndicatorsAccessor.MacdHistogram (cAlgo.API.DataSeries, int, int, int)' has invalid arguments
Error CS1503: Argument 1: unable to convert from 'cAlgo.API.Bars' to 'cAlgo.API.DataSeries'
@MATRIXTRADER
                     PanagiotisCharalampous
                     14 Jul 2020, 09:58
                                    
Hi MATRIXTRADER,
Please post the complete cBot code that is generating these errors.
Best Regards,
Panagiotis
@PanagiotisCharalampous
                     MATRIXTRADER
                     14 Jul 2020, 13:40
                                    
RE:
PanagiotisCharalampous said:
Hi MATRIXTRADER,
Please post the complete cBot code that is generating these errors.
Best Regards,
Panagiotis
Thanks for your help
here is a code snippet
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class NewcBot : Robot
    {
        [Parameter("Volume", DefaultValue = 10000)]
        public double Volume { get; set; }
        [Parameter("SL ", DefaultValue = 0)]
        public int SL { get; set; }
        [Parameter("TP ", DefaultValue = 0)]
        public int TP { get; set; }
        [Parameter("Another Timeframe MovingAverage", DefaultValue = "Hour4")]
        public TimeFrame AnotherTimeFrame1 { get; set; }
        [Parameter("Source")]
        public DataSeries Source { get; set; }
        [Parameter("Period", DefaultValue = 125)]
        public int Period { get; set; }
        [Parameter("Moving Average Type", DefaultValue = MovingAverageType.TimeSeries)]
        public MovingAverageType MovingAverageType { get; set; }
        [Parameter("----------MACD------------", DefaultValue = "MACD")]
        public string Separator1 { get; set; }
        [Parameter("Another Timeframe MacdHistogram", DefaultValue = "Hour")]
        public TimeFrame AnotherTimeFrame2 { get; set; }
        [Parameter("MACD LongCycle", DefaultValue = 26, MinValue = 1)]
        public int LongCycle { get; set; }
        [Parameter("MACD ShortCycle", DefaultValue = 12, MinValue = 1)]
        public int ShortCycle { get; set; }
        [Parameter("MACD Period", DefaultValue = 9, MinValue = 1)]
        public int MACDPeriod { get; set; }
        private MacdHistogram MACD;
        private MovingAverage MA;
        protected override void OnStart()
        {
            MA = Indicators.MovingAverage(MarketData.GetBars(AnotherTimeFrame1).ClosePrices, Period, MovingAverageType);
            //     MACD = Indicators.MacdHistogram(LongCycle, ShortCycle, MACDPeriod);
            MACD = Indicators.MacdHistogram(MarketData.GetBars(AnotherTimeFrame2), LongCycle, ShortCycle, MACDPeriod);
        }
        protected override void OnTick()
        {
            double MA2 = MA.Result[MA.Result.Count - 2];
            int bars = MarketSeries.Close.Count - 1;
            double cl = MarketSeries.Close[bars - 1];
            if (MA2 < cl && MACD.Signal.IsRising())
            {
                Close(TradeType.Sell);
                Open(TradeType.Buy);
            }
            else if (MA2 > cl && MACD.Signal.IsFalling())
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }
        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("MAMACD", Symbol, tradeType))
                //"SampleRSI"
                ClosePosition(position);
        }
        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("MAMACD", Symbol, tradeType);
            if (position == null)
                ExecuteMarketOrder(tradeType, Symbol, Volume, "MAMACD", SL, TP);
        }
    }
}
@MATRIXTRADER
                     MATRIXTRADER
                     14 Jul 2020, 15:17
                                    
RE: RE:
I found this solution and after several tests and comparison it works well.
Add  .ClosePrices    !!
   MACD = Indicators.MacdHistogram(MarketData.GetBars(AnotherTimeFrame2).ClosePrices, LongCycle, ShortCycle, MACDPeriod);
Thank you for your support.
@MATRIXTRADER

PanagiotisCharalampous
14 Jul 2020, 08:35
Hi MATRIXTRADER,
Try
Best Regards,
Panagiotis
Join us on Telegram
@PanagiotisCharalampous