Merhaba,
Aşağıda örnek kodu paylaştığım gii grafikte çizdiğim bir trendi yukarı kestiğinde alım yapacak bir bot yazmak istiyorum. Ancak bu kodu çalıştırdığımda
myTrend.CurrentValue
değerinde bir veri olmuyor. manuel çizdiğim trendi kestiğinde işlem yapacak bir örnek kod var mıdır?
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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 TrendTakip_dene2 : 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("ENJ_USDT_BIN")]
public string Symbol;
[Parameter(SymbolPeriod.Day)]
public SymbolPeriod SymbolPeriod;
ITrend myTrend;
/// <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);
//myTrend = MyTrend(Symbol, SymbolPeriod, 100, 0, TrendType.Increasing, true);
myTrend = MyTrend(Symbol, SymbolPeriod, new DateTime(2021, 4, 8, 12, 0, 0), 3.48572398074866m, new DateTime(2021, 6, 6, 12, 0, 0), 1.2152916014338m);
//MyTrend fonksiyonu arac kutusundan default degerler ile getirilmistir.
//Boylelikle hem hata alinmadan kod compile etmekte, hem de ornek degerler gosterilmektedir.
//***Grafikte gorebileceginiz bir trend olusturmak icin lutfen bu degerleri degistirin***
//(Kullanmak istediginiz MyTrend'e gore intellisense'de secenekleri gorebilirsiniz)
//Symbol, SymbolPeriod sizin tarafinizdan tanimlanmis sembol ve periyotudur.
//Parametre olarak tanimlanmadiysa ornek tanimlamalar: Symbol: "GARAN"
//barCount(default=100) trend cizgisinin kac bari kapsayacagidir.
//refIndex(default=0) son bardan kac bar once trend cizgisinin kapatilacagidir
//(orn. 0 son bara kadar cekilir, 10 ise canli bardan 10 bar once trend cizgisi sonlandirilir.)
//TrendType.Increasing veya TrendType.Decreasing yükselen/düşen trendler.
//isAutoTrend(false) trend'i otomatik olarak cizip birakir. True yapilirsa, bari her yeni data ile gunceller.
DrawTrend(myTrend, Colors.Red);
//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(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)
{
myTrend = MyTrend(Symbol, SymbolPeriod, new DateTime(2021, 4, 8, 12, 0, 0), 3.48572398074866m, new DateTime(2021, 6, 6, 12, 0, 0), 1.2152916014338m);
var close = barDataCurrentValues.LastUpdate.Close;
Debug("Trend current value : " + myTrend.CurrentValue);
if (close == myTrend.CurrentValue)
{
Debug("Trend current value eşitlendi!!! = " + myTrend.CurrentValue);
}
}
}
}


using System; using System.Collections.Generic; using System.Linq; using Matriks.Data.Symbol; 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 System.Windows.Media; //***********************************************************ACIKLAMA***********************************************************// //MatriksIQ'da grafik uzerine cizdigimiz trendlere sag tiklayarak Algo Kodu Kopyala secerek, algoya aktarabiliriz. Bu algo // //icerisinde kopyalamadan ve kopyalayarak yazilmis trend cizgisi ornekleri vardir. Ornek olarak bir trend ustu al, trend alti // //sat stratejisi de yazilmistir. Alis satis emirleri kapatilip bunun yerine bir alttaki comment'e alinmis alert fonksiyonlari // //acilarak sadece alarm ureten bir stratejiye de donusturulebilir. // namespace Matriks.Lean.Algotrader { public class Trend_Stratejisi_Deneme : 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("IRIS_USDT_BIN")] public string Symbol; [Parameter(1)] public int Quantity; [Parameter(SymbolPeriod.Min)] public SymbolPeriod SymbolPeriod; ITrend drawthis; //Cizdirecegimiz trend objesini burada tanimliyoruz public override void OnInit() { AddSymbol(Symbol, SymbolPeriod); //Cizilebilecek/grafikten kopyalanmis farkli trend ornekleri drawthis = MyTrend(Symbol, SymbolPeriod, new DateTime(2021, 6, 1, 10, 0, 0), 0.11m, new DateTime(2021, 6, 7, 15, 0, 0), 0.09m); //drawthis = MyTrend(Symbol, SymbolPeriod, new DateTime(2020, 4, 30, 3, 0, 0), new DateTime(2020, 5, 5, 14, 0, 0), TrendType.Decreasing); //drawthis = MyTrend(Symbol, SymbolPeriod, 100, 0, 0.12m, 0.09m); //MyTrend fonksiyonunu kullanarak trend cizdirip bunu drawthis objesine atiyoruz DrawTrend(drawthis, Colors.Gold); //Olusturdugumuz trend objesini cizdirmek icin DrawTrend fonksiyonunu kullaniyoruz, bu satirsa renklendirme ornegi de goruluyor //DrawTrend(drawthis, Color.FromRgb(255, 0, 255)); //Renk atamasini RGB olarak belirlemek istersek bu satiri acarak ederek deneyebiliriz SendOrderSequential(true); WorkWithPermanentSignal(true); } /// <summary> /// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir /// </summary> public override void OnInitComplated() { } /// <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) { Debug("Current= " + drawthis.CurrentValue); var close = barDataCurrentValues.LastUpdate.Close; if (close > drawthis.CurrentValue) { SendMarketOrder(Symbol, Quantity, OrderSide.Buy); Debug("Kapanis trend cizgisinin uzerinde. Alis emri gonderildi"); //Alert("Fiyat trend cizgisinin uzerinde kapatti"); } if (close < drawthis.CurrentValue) { SendMarketOrder(Symbol, Quantity, OrderSide.Sell); Debug("Kapanis trend cizgisinin altinda. Satis emri gonderildi"); //Alert("Fiyat trend cizgisinin altinda kapatti"); } } /// <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) { } } } }