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

Bollinger üst / Bollinger alt

Soruldu
Görüntülenme
1.266 görüntülenme
Durum
Cevaplandı
Merhaba,

Bollinger stratejime "bollinger.Bollingerup / bollinger.BollingerDown>1.0125" koşulunu eklemeye çalıştım ama / işareti kullanılamaz uyarısı veriyor. Kısaca kanal biraz açıkken tetiklensin istiyorum, yardımcı olur musunuz lütfen, teşekkürler
Paylaş

1 Cevap

0

Iyi aksamlar,

if(bollinger.Bollingerup.CurrentValue / bollinger.BollingerDown.CurrentValue>1.0125m)

seklinde yaziniz.

BağlantıBayraklaMatt RicksMatriks Destek8.033

Yorumlar (4)

  • ▲0
    Merhaba, hellettim gibi ama backtestte her 5 dkkada aynı fiyattan sürekli alıp satıyor gözüküyor. Hatayı bulmamama yardımcı olur musunuz lütfen

     

    using System;

    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 GI_BOL_AL : 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("GARAN")]

    public string Symbol;

     

    [Parameter(SymbolPeriod.Min5)]

    public SymbolPeriod SymbolPeriod;

     

    [Parameter(5)]

    public decimal BuyOrderQuantity;

     

    [Parameter(5)]

    public decimal SellOrderQuantity;

     

    [Parameter(MovMethod.E)]

    public MovMethod MovMethod;

     

    [Parameter(20)]

    public int Period;

     

    [Parameter(2)]

    public decimal StandartDeviation;

     

    // indikator tanımları.

    BOLLINGER bollinger;

    /// <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()

    {

    AddSymbol(Symbol, SymbolPeriod);

    bollinger = BollingerIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, StandartDeviation, MovMethod);

     

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

     

    //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);

     

    }

     

     

    /// <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)

    {

    if (bollinger.Bollingerup.CurrentValue / bollinger.BollingerDown.CurrentValue>1.0125m && barDataCurrentValues.LastUpdate.Close < bollinger.BollingerDown.CurrentValue);

    SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));

     

    if (bollinger.Bollingerup.CurrentValue / bollinger.BollingerDown.CurrentValue>1.0125m && barDataCurrentValues.LastUpdate.Close > bollinger.Bollingerup.CurrentValue);

    SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));

     

    }

     

    /// <summary>

    /// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.

    /// </summary>

    /// <param name="barData">Emrin son durumu</param>

    public override void OnOrderUpdate(IOrder order)

    {

    if (order.OrdStatus.Obj == OrdStatus.Filled)

    {

     

    }

    }

     

    }

    }
  • ▲1

    IF kosulundan sonra satir bitimine ";" noktali virgul koydugunuz icin bu satirlar islevsiz hale gelmis.

    using System;
    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 GI_BOL_AL : 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("GARAN")]
    		public string Symbol;
    
    		[Parameter(SymbolPeriod.Min5)]
    		public SymbolPeriod SymbolPeriod;
    
    		[Parameter(5)]
    		public decimal BuyOrderQuantity;
    
    		[Parameter(5)]
    		public decimal SellOrderQuantity;
    
    		[Parameter(MovMethod.E)]
    		public MovMethod MovMethod;
    
    		[Parameter(20)]
    		public int Period;
    
    		[Parameter(2)]
    		public decimal StandartDeviation;
    
    		// indikator tanımları.
    		BOLLINGER bollinger;
    		/// <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()
    		{
    			AddSymbol(Symbol, SymbolPeriod);
    			bollinger = BollingerIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, StandartDeviation, MovMethod);
    
    			// 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(false);
    
    			//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);
    		}
    
    
    		/// <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 bol_ratio = bollinger.Bollingerup.CurrentValue / bollinger.BollingerDown.CurrentValue;
    			var close = barDataCurrentValues.LastUpdate.Close;
    			Debug("**************************************");
    			Debug($"bol_ratio = {Math.Round(bol_ratio,4)}, close = {Math.Round(close,4)}, BolDOWN = {Math.Round(bollinger.BollingerDown.CurrentValue,4)}, BolUP = {Math.Round(bollinger.Bollingerup.CurrentValue,4)}");
    
    			if ((bol_ratio > 1.0125m) && (close < bollinger.BollingerDown.CurrentValue))
    			{
    				SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
    				Debug("Alis emri gonderildi");
    			}
    
    			if (bol_ratio > 1.0125m && close > bollinger.Bollingerup.CurrentValue)
    			{
    				SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
    				Debug("Satis emri gonderildi");
    			}
    		}
    
    		/// <summary>
    		/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.
    		/// </summary>
    		/// <param name="barData">Emrin son durumu</param>
    		public override void OnOrderUpdate(IOrder order)
    		{
    			if (order.OrdStatus.Obj == OrdStatus.Filled)
    			{
    
    			}
    		}
    
    	}
    }

     

  • ▲1
    Çok teşekkürler, öğreniyoruz :)
  • ▲0
    Tekrar merhaba Matt

    Ben yazdığın sistemdeki AL-SAT'ı ayırıp 2 sistem yaptım. Bunlar benim ağrılık arttırıp azalma stratejilerim. Uygun gördüğüm yerde çalıştırayım, şartlar oluşunca satsın veya alsın istiyorum. Ama şartlar oluşsa bile al pozisyonunda kaldığı için satmıyor mesela. Bir al bir sat'ı false yaptığımda da kaçırırsam 2 defa alabiliyor. Bir al bir sat True olup, çalıştırırken gün içi işlem limitini 1 seçtiğimde de işlemi 2 defa yapan sistemim oldu.

     

    Kısacası ben aşağıdaki sistemin, çalıştırdıktan sonra al-sat pozisyonuna bakmadan 1 defa işlem yapmasını istiyorum, nasıl yapabiliriz?

     

     

    using System;

    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 GI_BOL_AL : 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("GARAN")]

    public string Symbol;

     

    [Parameter(SymbolPeriod.Min5)]

    public SymbolPeriod SymbolPeriod;

     

    [Parameter(5)]

    public decimal BuyOrderQuantity;

     

    [Parameter(5)]

    public decimal SellOrderQuantity;

     

    [Parameter(MovMethod.E)]

    public MovMethod MovMethod;

     

    [Parameter(20)]

    public int Period;

     

    [Parameter(2)]

    public decimal StandartDeviation;

     

    // indikator tanımları.

    BOLLINGER bollinger;

    /// <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()

    {

    AddSymbol(Symbol, SymbolPeriod);

    bollinger = BollingerIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, StandartDeviation, MovMethod);

     

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

     

    //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(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 bol_ratio = bollinger.Bollingerup.CurrentValue / bollinger.BollingerDown.CurrentValue;

    var close = barDataCurrentValues.LastUpdate.Close;

    Debug("**************************************");

    Debug($"bol_ratio = {Math.Round(bol_ratio,4)}, close = {Math.Round(close,4)}, BolDOWN = {Math.Round(bollinger.BollingerDown.CurrentValue,4)}, BolUP = {Math.Round(bollinger.Bollingerup.CurrentValue,4)}");

     

    if ((bol_ratio > 1.0125m) && (close < bollinger.BollingerDown.CurrentValue))

    {

    SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));

    Debug("Alis emri gonderildi");

    }

     

     

    }

     

    /// <summary>

    /// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.

    /// </summary>

    /// <param name="barData">Emrin son durumu</param>

    public override void OnOrderUpdate(IOrder order)

    {

    if (order.OrdStatus.Obj == OrdStatus.Filled)

    {

     

    }

    }

     

    }

    }

Cevabınız

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