namespace Matriks.Lean.Algotrader
{
    public class PriceAbove7Day : MatriksAlgo
    {
        // Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
        // "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.

        [SymbolParameter("AKBNK")]
        public string Symbol;

        [Parameter(SymbolPeriod.Min5)]
        public SymbolPeriod SymbolPeriod;

        [Parameter(100)]
        public decimal BuyOrderQuantity;

        [Parameter(100)]
        public decimal SellOrderQuantity;
         
        public override void OnInit()
        {
            AddSymbol(Symbol, SymbolPeriod);
            AddSymbolMarketData(Symbol);

            // Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.
            // true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.
            WorkWithPermanentSignal(true);

            //Eger emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir. 
            //Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz. 
            SendOrderSequential(true);

            //Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.
            //SetTimerInterval(3);

            //Alttaki fonksiyon ile tanımlanan sembol ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.
            //AddNewsSymbol(Symbol);

            //Alttaki fonksiyon ile tanımlanan anahtar kelime ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.
            //AddNewsKeyword("KAP");
        }

        
        /// <summary>
        /// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
        /// </summary>
        public override void OnInitCompleted()
        {

        }

        /// <summary>
        /// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir. 
        /// </summary>
        /// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
        public override void OnDataUpdate(BarDataEventArgs barData)
        {
            var barDataModel = GetBarData();
            var yedigun = GetMarketData(Symbol, SymbolUpdateField.WeekClose);
            var close = barData.BarData.Close;

            if (close > yedigun)
            {
                SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
                Debug("Close = " + close);
                Debug(Symbol + " 7 Seans onceki kapanis = " + yedigun);
                Debug("Alış Emri Gönderildi");
            }

            if (close < yedigun)
            {
                SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
                Debug("Close = " + close);
                Debug(Symbol + " 7 Seans onceki kapanis = " + yedigun);
                Debug("Satış Emri Gönderildi");
            }
        }

        /// <summary>
        /// Strateji durdurulduğunda bu fonksiyon tetiklenir.
        /// </summary>
        public override void OnStopped()
        {
        }
    }
}