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

Codi ile oluşturulan Kodda Hata

Soruldu
Görüntülenme
210 görüntülenme
Durum
Cevaplandı
Merhaba Codi yardımı ile kod yazımı denedim ama aşağıdaki hataları verdi. Hata ve kod ektedir.

error CS1061: 'DI' bir 'PDI' tanımı içermiyor ve 'DI' türünde bir ilk bağımsız değişken kabul eden hiçbir erişilebilir 'PDI' genişletme yöntemi bulunamadı (bir kullanma yönergeniz veya derleme başvurunuz eksik olabilir mi?)7511

 

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 Matriks.Data.Tick;

using Matriks.Enumeration;

using Matriks.IntermediaryInstitutionAnalysis.Enums;

using Newtonsoft.Json;

 

namespace Matriks.Lean.Algotrader

{

public class MK2025_1 : 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(14)] // DI indikatörü için periyot değeri

public int DIPeriod;

 

[Parameter(1)]

public decimal BuyOrderQuantity;

 

[Parameter(1)]

public decimal SellOrderQuantity;

 

DI di;  // DI indikatörü için değişken

 

/// <summary>

/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayıt işlemleri,

/// indikatör ekleme, haberlere kayıt olma işlemleri burada yapılır.

/// </summary>

public override void OnInit()

{

AddSymbol(Symbol, SymbolPeriod);  // Sembol ekleme işlemi

di = DIIndicator(Symbol, SymbolPeriod, OHLCType.Close, DIPeriod);  // DI indikatörü başlatılıyor

WorkWithPermanentSignal(true);  // Sürekli sinyal ile çalışmayı etkinleştir

SendOrderSequential(true);  // Emirleri sıralı olarak gönder

}

 

/// <summary>

/// Init işlemleri tamamlanınca, bardatalar kullanmaya hazır hale gelince bu fonksiyon tetiklenir.

/// Data üzerinde bir defa yapılacak işlemler için kullanılır.

/// </summary>

public override void OnInitCompleted()

{

// Eğitim veya başlangıç işlemleri burada yapılabilir, mevcut durumda boş bırakılıyor

}

 

/// <summary>

/// Eklenen sembollerin bardata'ları ve indikatörler 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)

{

var barDataModel = GetBarData();  // Mevcut bar verilerini al

decimal close = barDataModel.Close[barData.BarDataIndex];  // Kapanış fiyatını al

 

// DI+ > DI- ve ADX > 25 ise alım sinyali ver

if (di.PDI.CurrentValue > di.MDI.CurrentValue && di.ADX.CurrentValue > 25)

{

SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);  // Alış emri gönder

Debug("DI+ > DI- ve ADX > 25 - Alış emri gönderildi");  // Debug mesajı

}

// DI+ < DI- ve ADX > 25 ise satış sinyali ver

else if (di.PDI.CurrentValue < di.MDI.CurrentValue && di.ADX.CurrentValue > 25)

{

SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);  // Satış emri gönder

Debug("DI+ < DI- ve ADX > 25 - Satış emri gönderildi");  // Debug mesajı

}

}

 

/// <summary>

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

/// </summary>

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

public override void OnOrderUpdate(IOrder order)

{

if (order.OrdStatus.Obj == OrdStatus.Filled)  // Emir gerçekleştiğinde

{

Debug("Emir gerçekleşti: " + order.Symbol);  // Emir gerçekleşme debug mesajı

}

}

 

/// <summary>

/// Strateji durdurulduğunda bu fonksiyon tetiklenir.

/// </summary>

public override void OnStopped()

{

// Strateji durdurulduğunda yapılacak işlemler, mevcut durumda boş

}

}

}
Paylaş

1 Cevap

0
Merhabalar,
Şu şekilde düzenleyiniz.

Satır 147
if (di.Pdi.CurrentValue > di.Mdi.CurrentValue && adx.CurrentValue > 25)

Satır 158
else if (di.Pdi.CurrentValue < di.Mdi.CurrentValue && adx.CurrentValue > 25)

ADX indikatörü kullanılıyor. OnInit içerisine tanımlamanız gerekir.
ADX adx;  // DI indikatörü için global değişken
adx = ADXIndicator(Symbol, SymbolPeriod, OHLCType.Close, 14);

Bu şekilde deneyiniz lütfen.

İyi çalışmalar dileriz.
BağlantıBayraklaemresMatriks Destek6.795

Cevabınız

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