0 beğenilme 0 beğenilmeme
757 kez görüntülendi
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
Algoritmik Trading kategorisinde (310 puan) tarafından | 757 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Iyi aksamlar,

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

seklinde yaziniz.

(8,035 puan) tarafından
0 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 0

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 0
Çok teşekkürler, öğreniyoruz :)
0 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)

{

 

}

}

 

}

}
8,636 soru
8,590 cevap
4,821 yorum
19,786 kullanıcı