0 beğenilme 0 beğenilmeme
368 kez görüntülendi

Bu benim ağrılık arttırıp azalma stratejim. 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 zamanında kapatmazsam 2-3 defa alabiliyor. Bir al bir sat false olup, çalıştırırken gün içi işlem limitini 1 seçmeme rağmen işlemi 2 defa yapan sistemim oldu, sıkıntı yaşadım.

 

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

 Çok teşekkürler

 

 

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)

{

 

}

}

 

}

}

 

Algoritmik Trading kategorisinde (310 puan) tarafından | 368 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme

Merhaba,

Sadece bir defa almasını istiyorsanız SendOrderSequential(true); yapmanız yeterli olur.

Stratejiyi çalıştırdıktan sonra alış şartı gerçekleştiğinde 1 defa alış emri gönderir.

Stratejide satış şartı olmadığı için satış sinyali oluşmayacak ve emir gönderilmeyeceği için diğer alış şartlarında sinyal oluşsa dahi  sıralı gitmesi gerektiği için alış göndermeyecektir.

isterseniz kontrol mekanizması ekleyebilirsinizde

public bool StratejiDevamEtsinMi=true;

if ((bol_ratio > 1.0125m) && (close < bollinger.BollingerDown.CurrentValue) && StratejiDevamEtsinMi)
{
	SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
	Debug("Alis emri gonderildi");
	StratejiDevamEtsinMi=false;
}

 

(15,892 puan) tarafından
8,636 soru
8,590 cevap
4,821 yorum
19,790 kullanıcı