0 beğenilme 0 beğenilmeme
52 kez görüntülendi
Aşağıda kodumu payaşıyorum yapmak istediğim 200 günlük periyotta düşen trendi yukarı kesen fiyat barlarında alım yapacak kıvanç hocanın kodlarını explorerdan uyarlamaya çalıştım ama beceremedim hic bir değer gelmiyor..

 

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;

using Matriks.Data.Tick;

using Matriks.Enumeration;

using Matriks.IntermediaryInstitutionAnalysis.Enums;

using Newtonsoft.Json;

 

namespace Matriks.Lean.Algotrader

{

public class dusentrendstrateji : 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.Day)]

public SymbolPeriod SymbolPeriod;

 

[Parameter(5)]

public decimal BuyOrderQuantity;

 

[Parameter(5)]

public decimal SellOrderQuantity;

 

// Trendin aranacagi bar sayisi

[Parameter(200)]

public int TrendBarCount;

 

// Trendin yuksegi yakaladigi noktalar arasindaki min bar sayisi

[Parameter(10)]

public int MinTrendLength;

 

// Trendin yuksegi yakaladigi ilk noktanin son bara olan minimum mesafesi

[Parameter(50)]

public int MinTrendStartDistance;

 

public ITrend Trend;

 

// indikator tanımları.

 

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

{

Trend = MyTrend(TrendBarCount, 1, TrendType.Decreasing);

 

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

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

/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.

/// </summary>

public override void OnTimer()

{

 

}

 

/// <summary>

/// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.

/// </summary>

/// <param name="newsId">Gelen haberin id'si</param>

/// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>

public override void OnNewsReceived(int newsId, List<string> relatedSymbols)

{

 

}

 

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

{

// trending degeri null ise dusen trendin bulunamadigi anlamina geliyor.

if (Trend.CurrentValue == null)

return;

 

var barDataModel = GetBarData();

var close = barData.BarData.Close;

var open = barData.BarData.Open;

 

// trendi yukari kirmis mi

var crossCondition = close > Trend.CurrentValue;

// Trendin yuksege degdigi uclar arasinda yeterince bar var mi

var lengthCondition = (Trend.SnapX2 - Trend.SnapX1) >= MinTrendLength;

// Trendin baslangici yeterince eski bir barda mi

var distanceCondition = (barData.BarDataIndex - Trend.SnapX1) >= MinTrendStartDistance;

 

// Kesisim, uzunluk ve baslangic bari kosullarinin tamami saglanmali

var result = crossCondition && lengthCondition && distanceCondition;

if (result)

{

SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);

Debug("Alış Emri Gönderildi");

}

 

// Aşağı kırılım koşulları sağlanıyorsa satış emri gönder

if (crossDownCondition && lengthCondition && distanceCondition)

{

SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);

Debug("Satış Emri Gönderildi");

}

}

 

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

{

 

}

}

 

/// <summary>

/// Strateji durdurulduğunda bu fonksiyon tetiklenir.

/// </summary>

public override void OnStopped()

{

}

}

}
önce Algoritmik Trading kategorisinde (38 puan) tarafından | 52 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,
Aşağıda yer alan bağlantıdan çalışmaya ulaşabilirsiniz.
https://destek.matriksdata.com/?qa=blob&qa_blobid=7575761123211842932

****düşen trendi yukarı kesen fiyat****
Fiyatın trendden büyük olma koşulunu kontrol edip, al IF içerisine eklemeniz gerekiyor.
var crossCondition = close > Trend.CurrentValue;

****yükselen trendi aşağı kesen fiyat****
Fiyatın trendden küçük olma koşulunu kontrol edip, sat IF içerisine eklemeniz gerekiyor.
​var crossDownCondition = close < Trend.CurrentValue;

İyi çalışmalar dileriz.

önce (5,375 puan) tarafından
Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. 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.



9,596 soru
9,553 cevap
5,170 yorum
44,033 kullanıcı