Matriks Destek ve Yardım Platformu

Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.

0

1 stratejiye 1'den fazla parite seçmek

Soruldu
Görüntülenme
730 görüntülenme
Durum
Çözüldü
Formasyonlar için strateji kullanıyorum ama kripto tarafı için tek tek bütün paritelere robot kurmak çok makul değil,hepsinin olayı aynı.

 

1 Stratejiye 1'den fazla parite nasıl eklerim ? tek tuşla hepsini çalıştırmak istiyorum
Paylaş

1 Cevap

0

Kabul edilen cevap

Merhabalar,

Dilerseniz aşağıdaki yapıyı uyarlayabilirsiniz.

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using System.Windows.Media;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.AlgoTrader;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;



namespace Matriks.Lean.Algotrader
{
    public class CokluSembolMost : 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.
        [Parameter(SymbolPeriod.Min15)]
        public SymbolPeriod SymbolPeriod;



       [Parameter(3)]
        public int Period;



       [Parameter(2)]
        public decimal Percentage;



       public class SembolDetay
        {
            public string Sembol
            {
                get; set;
            }
            public decimal Adet
            {
                get; set;
            }
        }



       List<SembolDetay> SembolDetaylari = new List<SembolDetay>();




        Dictionary<string, MOST> dic = new Dictionary<string, MOST>();



       MOST most;



       /// <summary>
        /// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
        /// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
        /// </summary>
        public override void OnInit()
        {
            //1. yöntem sembolleri bir txt dosyasından okuyup işleyebilirsiniz.
            //bU işlem için readFile() methodundaki dosya_yolu belirtmeniz gerekmektedir.



           //2. yöntem yukarıda bulunan List<string> sembol değişkenini direk kodda doldurabilirsiniz.



           SembolDetaylari.Add(new SembolDetay()
                {
                    Sembol = "GARAN", Adet = 15
                });
            SembolDetaylari.Add(new SembolDetay()
                {
                    Sembol = "AKBNK", Adet = 25
                });
            SembolDetaylari.Add(new SembolDetay()
                {
                    Sembol = "TTKOM", Adet = 5
                });
            SembolDetaylari.Add(new SembolDetay()
                {
                    Sembol = "THYAO", Adet = 12
                });



           foreach (var symbol in SembolDetaylari)
            {
                most = MOSTIndicator(symbol.Sembol, SymbolPeriod, OHLCType.Close, Period, Percentage, MovMethod.Exponential);
                dic.Add(symbol.Sembol, most);
                AddSymbol(symbol.Sembol, SymbolPeriod);
            }



           // 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 backtestte 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(false);
        }




        /// <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(BarDataCurrentValues barDataCurrentValues)
        {
            var barSembol = barDataCurrentValues.LastUpdate.SymbolName;



           if (dic.ContainsKey(barSembol))
            {
                decimal adet = SembolDetaylari.FirstOrDefault(x => x.Sembol == barSembol).Adet;



               //Sembol verilerinden türetilen most indikatörü
                var mostvalue = dic[barSembol];



               if (CrossAbove(mostvalue.ExMOV, mostvalue))
                {
                    SendMarketOrder(barSembol, adet, (OrderSide.Buy));
                    Debug("Sembol : " + barSembol);
                    Debug("Alış emri verildi.");
                    Debug("Most.ExMov:" + mostvalue.ExMOV.CurrentValue);
                    Debug("Most:" + mostvalue.CurrentValue + "\n");
                }
                if (CrossBelow(mostvalue.ExMOV, mostvalue))
                {
                    SendMarketOrder(barSembol, adet, (OrderSide.Sell));
                    Debug("Sembol : " + barSembol);
                    Debug("Satış emri verildi.");
                    Debug("Most.ExMov:" + mostvalue.ExMOV.CurrentValue);
                    Debug("Most:" + mostvalue.CurrentValue + "\n");
                }
            }
        }
    }
}

İyi çalışmalar.

BağlantıBayrakladüzenlendi · canustaaasiyangMatriks Destek11.113

Cevabınız

Cevap yazmak için giriş yapın.Giriş yapKayıt ol