Super Profit indicator: Help requested in adding email notificaiton

Created at 01 Feb 2016, 21:50
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!
AN

anurag.gakhar

Joined 01.02.2016

Super Profit indicator: Help requested in adding email notificaiton
01 Feb 2016, 21:50


Hello, 

Can someone pls help me in adding email notification to "Super Profit" indicator? It should send an email whenever the color of the dot changes from green to red or vice versa?

Source code below:

using System;
using cAlgo.API;
using System.Runtime.InteropServices;
using cAlgo.API.Indicators;
 
namespace cAlgo.Indicators
{
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SuperProfit : Indicator
    {
        // Alert
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
 
        [Parameter(DefaultValue = 35)]
        public int DllPeriod { get; set; }
 
        [Parameter(DefaultValue = 1.7)]
        public double Period { get; set; }
 
        [Parameter(DefaultValue = MovingAverageType.Weighted)]
        public MovingAverageType MaType { get; set; }
 
        [Parameter()]
        public DataSeries Price { get; set; }
 
        [Parameter(DefaultValue = 5)]
        public int StopLoss { get; set; }
 
        [Parameter(DefaultValue = 20)]
        public int TakeProfit { get; set; }
 
        [Output("Up", PlotType = PlotType.Points, Thickness = 4)]
        public IndicatorDataSeries UpSeries { get; set; }
 
        [Output("Down", PlotType = PlotType.Points, Color = Colors.Red, Thickness = 4)]
        public IndicatorDataSeries DownSeries { get; set; }
 
 
        private DateTime _openTime;
 
        private MovingAverage _movingAverage1;
        private MovingAverage _movingAverage2;
        private MovingAverage _movingAverage3;
        private IndicatorDataSeries _dataSeries;
        private IndicatorDataSeries _trend;
 
 
        protected override void Initialize()
        {
            _dataSeries = CreateDataSeries();
            _trend = CreateDataSeries();
 
            var period1 = (int)Math.Floor(DllPeriod / Period);
            var period2 = (int)Math.Floor(Math.Sqrt(DllPeriod));
 
            _movingAverage1 = Indicators.MovingAverage(Price, period1, MaType);
            _movingAverage2 = Indicators.MovingAverage(Price, DllPeriod, MaType);
            _movingAverage3 = Indicators.MovingAverage(_dataSeries, period2, MaType);
 
        }
 
        public override void Calculate(int index)
        {
            if (index < 1)
                return;
 
            _dataSeries[index] = 2.0 * _movingAverage1.Result[index] - _movingAverage2.Result[index];
            _trend[index] = _trend[index - 1];
 
            if (_movingAverage3.Result[index] > _movingAverage3.Result[index - 1])
                _trend[index] = 1;
            else if (_movingAverage3.Result[index] < _movingAverage3.Result[index - 1])
                _trend[index] = -1;
 
            if (_trend[index] > 0)
            {
                UpSeries[index] = _movingAverage3.Result[index];
 
                if (_trend[index - 1] < 0.0)
                {
                    UpSeries[index - 1] = _movingAverage3.Result[index - 1];
 
                    if (IsLastBar)
                    {
                        var stopLoss = MarketSeries.Low[index - 1] - StopLoss * Symbol.PipSize;
                        var takeProfit = MarketSeries.Close[index] + TakeProfit * Symbol.PipSize;
                        var entryPrice = MarketSeries.Close[index - 1];
 
                        if (MarketSeries.OpenTime[index] != _openTime)
                        {
                            _openTime = MarketSeries.OpenTime[index];
                            DisplayAlert("Buy signal", takeProfit, stopLoss, entryPrice);
                        }
                    }
                }
 
                DownSeries[index] = double.NaN;
            }
            else if (_trend[index] < 0)
            {
                DownSeries[index] = _movingAverage3.Result[index];
 
                if (_trend[index - 1] > 0.0)
                {
                    DownSeries[index - 1] = _movingAverage3.Result[index - 1];
 
                    if (IsLastBar)
                    {
                        var stopLoss = MarketSeries.High[index - 1] + StopLoss * Symbol.PipSize;
                        var takeProfit = MarketSeries.Close[index] - TakeProfit * Symbol.PipSize;
                        var entryPrice = MarketSeries.Close[index - 1];
 
                        if (MarketSeries.OpenTime[index] != _openTime)
                        {
                            _openTime = MarketSeries.OpenTime[index];
                            DisplayAlert("Sell signal", takeProfit, stopLoss, entryPrice);
                        }
                    }
                }
 
                UpSeries[index] = double.NaN;
            }
 
        }
 
        protected void DisplayAlert(string tradyTypeSignal, double takeProfit, double stopLoss, double entryPrice)
        {
            string entryPricetext = entryPrice != 0.0 ? string.Format(" at price {0}", Math.Round(entryPrice, 4)) : "";
            string takeProfitText = takeProfit != 0.0 ? string.Format(", TP on  {0}", Math.Round(takeProfit, 4)) : "";
            string stopLossText = stopLoss != 0.0 ? string.Format(", SL on {0}", Math.Round(stopLoss, 4)) : "";
 
            var alertMessage = string.Format("{0} {1} {2} {3} {4}", tradyTypeSignal, entryPricetext, takeProfitText, stopLossText, Symbol.Code);
 
            MessageBox(new IntPtr(0), alertMessage, "Trade Signal", 0);
 
        }
    }
}

 


@anurag.gakhar
Replies

Jiri
01 Feb 2016, 22:14

Assuming current alert is working properly - add this at 136th line.

Notifications.SendEmail("your@email.com", "your@email.com", "Trade Signal", alertMessage);

@Jiri

anurag.gakhar
02 Feb 2016, 07:04

Thanks tmc for your advise. Much appreciated.

I have added the extra piece of code at 136th line but I dont think the current alert is working as I do not get any message box or pop up window whenever the signal direction changes. Any advise on this?


@anurag.gakhar

trend_meanreversion
02 Feb 2016, 07:52

RE:

anurag.gakhar said:

Thanks tmc for your advise. Much appreciated.

I have added the extra piece of code at 136th line but I dont think the current alert is working as I do not get any message box or pop up window whenever the signal direction changes. Any advise on this?

Hi Anurag, you probably need to look into this link http://help.spotware.com/calgo/cbots/email-notifications


@trend_meanreversion

anurag.gakhar
02 Feb 2016, 11:48

Hi trend_meanreversion,

I did had a look at it. I had already set up my email account before asking for help here. I use gmail and have it set up as explained in the video but still it does not work. I am able to get emails for price alerts etc but not from this indicator.

@ tmc,

I was able to make get the message box/pop up alert work by changing AccessRights = AccessRights.None to full access in line 4. Sending email still doesn't work though :(


@anurag.gakhar

Jiri
02 Feb 2016, 15:04

Build this cAlgo and run on 1 minute timeframe. It should send you testing email each time candle opens with opening time in the body of the email.

using System;
using cAlgo.API;

namespace cAlgo
{
    [Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class TestMail : Indicator
    {
        [Parameter("Address", DefaultValue = "your@email.com")]
        public string Address { get; set; }

        private int lastCounted;

        public override void Calculate(int index)
        {
            if (!IsLastBar)
            {
                lastCounted = MarketSeries.Close.Count;
                return;
            }
            bool isNewBar = MarketSeries.Close.Count > lastCounted;
            if (isNewBar)
            {
                var time = DateTime.UtcNow;
                string body = "New candle was opened in " + time.ToString("MMMM dd, yyyy") + " at " + time.ToString("HH:mm" + " (UTC).");
                Notifications.SendEmail(Address, Address, "TestMail cAlgo", body);
                lastCounted = MarketSeries.Close.Count;
            }
        }
    }
}

If it won't work, then there is a problem with email settings and not the indicator.


@Jiri

anurag.gakhar
02 Feb 2016, 22:01

Indeed there was a problem with the email settings. I re configured everything again and it seems to be working now. 

Thanks for your help :)

Anurag


@anurag.gakhar