0 beğenilme 0 beğenilmeme
20 kez görüntülendi
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ş

}

}

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

1 cevap

0 beğenilme 0 beğenilmeme
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.
önce (5,695 puan) tarafından
9,875 soru
9,846 cevap
5,313 yorum
59,015 kullanıcı
Codi