Replies

social.trading
10 Oct 2019, 15:57 ( Updated at: 21 Dec 2023, 09:21 )

Hello Panagiotis,

yes there I was looking, but I don't have it (pic attached). I also looked how to add but failed.

best regards


@social.trading

social.trading
10 Oct 2019, 12:54

Hello Panagiotis,

sorry, where can I find the log?

best regards


@social.trading

social.trading
10 Oct 2019, 12:44 ( Updated at: 21 Dec 2023, 09:21 )

RE:

Hello Panagiotis,

I tried your code, but as you see from the screenshot, it is entering the if loop, printing false, but not playing the sound or printing Print("Play Buy Sound");

best regards


@social.trading

social.trading
10 Oct 2019, 11:19

Hello Panagiotis,

yes I put at the beginning of the if loop, this code:

ChartObjects.DrawText("", "" + alreadyPlayed, StaticPosition.TopRight, Colors.White);

and the return is false, so the sound should play, but it isn't.

Yes the sound and the path are all correct, because it plays endless if I don't use the bool alreadyPlayed.

I'm some coding expierence, but seems not to be enough to implement this correctly.

 

best regards


@social.trading

social.trading
10 Oct 2019, 11:06

Hello Panagiotis,

unfortunaetly even once it isn't playing it, although the alreadyPlayed is set later to true. Any idea how to improve it, maybe different coding way.

best regards


@social.trading

social.trading
10 Oct 2019, 10:38

Hello Panagiotis,

Actually, I'm trying to modifiy already exisiting indicator: https://ctrader.com/algos/indicators/show/1741

and add to it a sound notification:

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

namespace cAlgo
{
    [Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
    public class LvAMaCross : Indicator
    {
        [Parameter("MA Type", DefaultValue = MovingAverageType.TimeSeries)]
        public MovingAverageType maType { get; set; }

        [Parameter("Slow Period", DefaultValue = 30, MinValue = 1)]
        public int slowPeriod { get; set; }

        [Parameter("Fast Period", DefaultValue = 12, MinValue = 1)]
        public int fastPeriod { get; set; }

        [Parameter("Time Frame MA", DefaultValue = "Hour")]
        public TimeFrame timeFrame { get; set; }


        [Output("Sell Point", Color = Colors.Red, PlotType = PlotType.Points, Thickness = 15)]
        public IndicatorDataSeries SellSeries { get; set; }

        [Output("Buy Point", Color = Colors.Blue, PlotType = PlotType.Points, Thickness = 15)]
        public IndicatorDataSeries BuySeries { get; set; }

        public bool alreadyPlayed = false;

        public IndicatorDataSeries FastDataSeries { get; set; }

        public IndicatorDataSeries SlowDataSeries { get; set; }


        //market series cho timeframe cần tính
        public MarketSeries selectedSeries;

        public MovingAverage fastMA;
        public MovingAverage slowMA;

        protected override void Initialize()
        {
            FastDataSeries = CreateDataSeries();
            SlowDataSeries = CreateDataSeries();

            if (timeFrame == MarketSeries.TimeFrame)
            {
                selectedSeries = MarketSeries;
                fastMA = Indicators.MovingAverage(MarketSeries.Close, fastPeriod, maType);
                slowMA = Indicators.MovingAverage(MarketSeries.Close, slowPeriod, maType);
            }
            else
            {
                selectedSeries = MarketData.GetSeries(timeFrame);
                fastMA = Indicators.MovingAverage(selectedSeries.Close, fastPeriod, maType);
                slowMA = Indicators.MovingAverage(selectedSeries.Close, slowPeriod, maType);
            }

        }

        public override void Calculate(int index)
        {


            var selectedIndex = selectedSeries.OpenTime.GetIndexByTime(MarketSeries.OpenTime[index]);

            if (selectedIndex == -1)
            {
                return;
            }

            FastDataSeries[index] = fastMA.Result[selectedIndex];
            SlowDataSeries[index] = slowMA.Result[selectedIndex];

            if (isCrossBelow())
            {

                // sell
                SellSeries[index] = MarketSeries.High[index];

                if (IsLastBar)
                {
                    ChartObjects.DrawText("text1", "SELL", StaticPosition.Center, Colors.White);
                    if (!alreadyPlayed)
                    {
                        ChartObjects.DrawText("", "" + alreadyPlayed, StaticPosition.BottomRight, Colors.White);
                        Notifications.PlaySound("...action.mp3");
                        alreadyPlayed = true;
                      
                    }
                }
            }


            else if (isCrossAbove())
            {
                // buy 
                BuySeries[index] = MarketSeries.Low[index];
                if (IsLastBar)
                {
                    ChartObjects.DrawText("text1", "BUY", StaticPosition.Center, Colors.White);
                    if (!alreadyPlayed)
                    {
                        ChartObjects.DrawText("", "" + alreadyPlayed, StaticPosition.TopRight, Colors.White);
                        Notifications.PlaySound("...action.mp3");
                        alreadyPlayed = true;
                    }
                }
            }
        }

        #region Predicate
        public bool isCrossAbove()
        {
            return FastDataSeries.HasCrossedAbove(SlowDataSeries, 0);
        }
        public bool isCrossBelow()
        {
            return FastDataSeries.HasCrossedBelow(SlowDataSeries, 0);
        }
        #endregion
    }
}


@social.trading

social.trading
10 Oct 2019, 09:42

Hello Panagiotis,

thank you for your feedback. The issue here how to play it once? Because the if loof will repeat. I also tried with bool true/false, but it is not working.

best regards


@social.trading

social.trading
09 Oct 2019, 20:13

Any help from some expert here? I think it should be very simple.


@social.trading