Indicator Alert

Semplice ma potente Tool per monitorare con un alert i livelli degli indicatori di vostro interesse, indispensabile se si è impegnati in altre attività.

Versione : 1.0.2 ( 13.05.2020 )

 

Gratis

Categoria: Tag:

Descrizione

Semplice tool che vi aiuterà a tenere sotto controllo gli indicatori di vostro interesse.

Il funzionamento è veramente semplice, poniamo l’ipotesi che abbiamo una RSI sul grafico e che vogliamo monitorare la rottura a rialzo del valore 80 e la rottura al ribasso del valore 20, bene in Alert Source selezioneremo l’RSI in questione quindi inseriremo i valori in Level Over a 80 e Level Under a 20, inserendo un Flag Reset a 10 andremo a ordinare al tool di riconsiderare un alert oltre un limite di 10.

Per capire meglio il Flag Reset e seguendo l’esempio precedente diciamo che il livello superiore di 80 viene infranto e che il tool ci restituisce l’alert, ora se il livello scende al di sotto di 80 – 10 = 70 il tool riconsidera l’alert di 80 perchè il livello potrebbe tornarci dopo un periodo di stallo, idem per il livello inferiore di 20 che sarà quindi 20 + 10 = 30, si evince che il reset superiore sarà 70 se viene dall’alto e 30 se viene dal basso.

Source

GitHub : https://github.com/cTrader-Guru/Indicator-Alert

/*  CTRADER GURU --> Template 1.0.6

    Homepage    : https://ctrader.guru/
    Telegram    : https://t.me/ctraderguru
    Twitter     : https://twitter.com/cTraderGURU/
    Facebook    : https://www.facebook.com/ctrader.guru/
    YouTube     : https://www.youtube.com/channel/UCKkgbw09Fifj65W5t5lHeCQ
    GitHub      : https://github.com/cTraderGURU/
    TOS         : https://ctrader.guru/termini-del-servizio/

*/

using System;
using cAlgo.API;
using System.Threading;
using System.Windows.Forms;

namespace cAlgo
{

    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class IndicatorAlert : Indicator
    {

        #region Enums

        enum WaitingLevel
        {

            Up,
            Down,
            Neutral

        }

        #endregion

        #region Identity

        /// <summary>
        /// Nome del prodotto, identificativo, da modificare con il nome della propria creazione
        /// </summary>
        public const string NAME = "Indicator Alert";

        /// <summary>
        /// La versione del prodotto, progressivo, utilie per controllare gli aggiornamenti se viene reso disponibile sul sito ctrader.guru
        /// </summary>
        public const string VERSION = "1.0.1";

        #endregion

        #region Params

        /// <summary>
        /// Identità del prodotto nel contesto di ctrader.guru
        /// </summary>
        [Parameter(NAME + " " + VERSION, Group = "Identity", DefaultValue = "https://ctrader.guru/product/indicator-alert/")]
        public string ProductInfo { get; set; }

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

        [Parameter("Level Over", DefaultValue = 80, Group = "Params")]
        public double LevelOver { get; set; }

        [Parameter("Level Under", DefaultValue = 20, Group = "Params")]
        public double LevelUnder { get; set; }

        [Parameter("Flag Reset", Group = "Params", DefaultValue = 10, MinValue = 0)]
        public double FlagReset { get; set; }

        /// <summary>
        /// L'output primario, può essere modificato a seconda delle esigenze
        /// </summary>
        [Output("Main")]
        public IndicatorDataSeries Result { get; set; }

        #endregion

        #region Property

        int LastIndex = -1;
        bool AlertInThisBar = true;
        WaitingLevel MonitoringFor = WaitingLevel.Neutral;

        #endregion

        #region Indicator Events

        /// <summary>
        /// Viene generato all'avvio dell'indicatore, si inizializza l'indicatore
        /// </summary>
        protected override void Initialize()
        {

            // --> Stampo nei log la versione corrente
            Print("{0} : {1}", NAME, VERSION);

        }

        /// <summary>
        /// Generato ad ogni tick, vengono effettuati i calcoli dell'indicatore
        /// </summary>
        /// <param name="index">L'indice della candela in elaborazione</param>
        public override void Calculate(int index)
        {

            if (!IsLastBar)
                return;

            // --> Ad ogni cambio candela resetto l'alert flag, è una semplice sicurezza ulteriore
            if (index != LastIndex)
            {

                if (LastIndex != -1)
                    AlertInThisBar = false;
                LastIndex = index;

            }

            // --> Tento di resettare l'alert per eventuali nuovi segnali nella stessa direzione
            if ((MonitoringFor == WaitingLevel.Up && Source.LastValue > (LevelUnder + FlagReset)) || (MonitoringFor == WaitingLevel.Down && Source.LastValue < (LevelOver - FlagReset)))
                MonitoringFor = WaitingLevel.Neutral;

            // --> Controllo se devo mettere in alert
            if ((MonitoringFor != WaitingLevel.Down && Source.LastValue > LevelOver) || (MonitoringFor != WaitingLevel.Up && Source.LastValue < LevelUnder))
                _alert();

            // --> Aggiorno il flag
            MonitoringFor = (Source.LastValue > LevelOver) ? WaitingLevel.Down : (Source.LastValue < LevelUnder) ? WaitingLevel.Up : MonitoringFor;

        }

        #endregion

        #region Private Methods

        /// <summary>
        /// Gestisce le popup per gli alert
        /// </summary>
        private void _alert()
        {

            if (RunningMode != RunningMode.RealTime || AlertInThisBar)
                return;

            string mex = string.Format("{0} : {1} ( {2} ) breakout {3}", NAME, SymbolName, TimeFrame.ToString(), Math.Round(Source.LastValue, Symbol.Digits));

            AlertInThisBar = true;

            // --> La popup non deve interrompere la logica delle API, apertura e chiusura

            new Thread(new ThreadStart(delegate { MessageBox.Show(mex, "BreakOut", MessageBoxButtons.OK, MessageBoxIcon.Information); })).Start();
            Print(mex);

        }

        #endregion

    }

}

Recensioni

Ancora non ci sono recensioni.

Recensisci per primo “Indicator Alert”

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.