Struggling to send e-mail notification,please help

Created at 07 Aug 2019, 21:25
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!
AP

apollinaire89

Joined 07.08.2019

Struggling to send e-mail notification,please help
07 Aug 2019, 21:25


hi Everyone,

How should i complete the code to send e-mail notification if position is opened by my bot?Could you please send me an example to paste in ? Many thanx for your help! :)

 

private void OnPositionOpened
        {
            Notifications.SendEmail(email, email, "MyRSISell", "position opened"); 
            
            }


@apollinaire89
Replies

PanagiotisCharalampous
08 Aug 2019, 09:20

Hi apollinaire89,

Thanks for posting in our forum. Did you have any problems with the code you posted. I presume that it is only a part of the code of the cBot.

Best Regards,

Panagiotis


@PanagiotisCharalampous

apollinaire89
08 Aug 2019, 09:23

Hi Panagiotis,

Yes. it is only a part and would like to know the correct coding to receive notification at opening position by cbot.


@apollinaire89

PanagiotisCharalampous
08 Aug 2019, 09:25

Hi apollinaire89,

It seems correct to me, assuming that the rest of the cBot is correctly implemented.

Best Regards,

Panagiotis


@PanagiotisCharalampous

apollinaire89
08 Aug 2019, 09:37

RE:

Panagiotis Charalampous said:

Hi apollinaire89,

It seems correct to me, assuming that the rest of the cBot is correctly implemented.

Best Regards,

Panagiotis

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

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SampleRSIcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Source", Group = "RSI")]
        public DataSeries Source { get; set; }

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        [Parameter("Stop Loss Pips", Group = "Protection", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double StopLossPips { get; set; }

        [Parameter("Take Profit Pips", Group = "Protection", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double TakeProfitPips { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 62)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}
 

Hello! Where should i put the command ? I think i am putting it in wrong place ? Many thanks.


@apollinaire89

PanagiotisCharalampous
08 Aug 2019, 09:41

Hi apollinaire89

See below a modified example.

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

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SampleRSIcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Source", Group = "RSI")]
        public DataSeries Source { get; set; }

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        [Parameter("Stop Loss Pips", Group = "Protection", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double StopLossPips { get; set; }

        [Parameter("Take Profit Pips", Group = "Protection", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double TakeProfitPips { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
            Positions.Opened += OnPositionsOpened;
        }

        void OnPositionsOpened(PositionOpenedEventArgs obj)
        {
            Notifications.SendEmail("youremail@address.com", "youremail@address.com", "MyRSISell", "position opened");
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 62)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}

Best Regards,

Panagiotis


@PanagiotisCharalampous

apollinaire89
08 Aug 2019, 09:58

RE:

Panagiotis Charalampous said:

Hi apollinaire89

See below a modified example.

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

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SampleRSIcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Source", Group = "RSI")]
        public DataSeries Source { get; set; }

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        [Parameter("Stop Loss Pips", Group = "Protection", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double StopLossPips { get; set; }

        [Parameter("Take Profit Pips", Group = "Protection", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double TakeProfitPips { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
            Positions.Opened += OnPositionsOpened;
        }

        void OnPositionsOpened(PositionOpenedEventArgs obj)
        {
            Notifications.SendEmail("youremail@address.com", "youremail@address.com", "MyRSISell", "position opened");
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 62)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}

Best Regards,

Panagiotis

Thank you so much! It is perfect! My next step is to learn C# :) 


@apollinaire89

apollinaire89
08 Aug 2019, 17:51

RE:

Panagiotis Charalampous said:

Hi apollinaire89

See below a modified example.

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

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SampleRSIcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Source", Group = "RSI")]
        public DataSeries Source { get; set; }

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        [Parameter("Stop Loss Pips", Group = "Protection", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double StopLossPips { get; set; }

        [Parameter("Take Profit Pips", Group = "Protection", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double TakeProfitPips { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
            Positions.Opened += OnPositionsOpened;
        }

        void OnPositionsOpened(PositionOpenedEventArgs obj)
        {
            Notifications.SendEmail("youremail@address.com", "youremail@address.com", "MyRSISell", "position opened");
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 62)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}

Best Regards,

Panagiotis

Dear Panagiotis,

 

 the stopp loss and take profit is not set in order after the code line has been added. Could you please help here if possible ? 

 Positions.Opened += OnPositionsOpened;

@apollinaire89

PanagiotisCharalampous
08 Aug 2019, 17:53

Hi apollinaire89,

Can you explain what do you mean? This line of code should not affect your trading in any way. Do you get any messages in your log?

Best Regards,

Panagiotis


@PanagiotisCharalampous

apollinaire89
08 Aug 2019, 17:59 ( Updated at: 21 Dec 2023, 09:21 )

RE:

Panagiotis Charalampous said:

Hi apollinaire89,

Can you explain what do you mean? This line of code should not affect your trading in any way. Do you get any messages in your log?

Best Regards,

Panagiotis

 

Thank you for being so quick. Unfortunately it is not set up and also not in Log.

 

 


@apollinaire89

PanagiotisCharalampous
08 Aug 2019, 18:02

Hi apollinaire89,

I don't know why do you expect to see a SL or a TP. You do not set any here.

 private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);
 
            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }

Best Regards,

Panagiotis


@PanagiotisCharalampous

apollinaire89
08 Aug 2019, 18:31

RE:

Panagiotis Charalampous said:

Hi apollinaire89,

I don't know why do you expect to see a SL or a TP. You do not set any here.

 private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);
 
            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }

Best Regards,

Panagiotis

Thank you! I added them now. Perfect! Many thanks!


@apollinaire89