Sık Rastlanan Hatalar #

Q. error CS0246: SeriYukari’ türü veya ad alanı adı bulunamadı (bir using yönergeniz veya derleme başvurunuz mu eksik?)

A. Strateji ismi ile stratejinin kod deklerasyonunda yazılan isim arasında uyuşmazlık var, tamamen aynı olduğundan emin olunuz. Küçük büyük harfe duyarlıdır. Örn. SeriYukari olarak isimlendirdiğimiz stratejiyi public class seriyukari : MatriksAlgo şeklinde deklare edersek, bu hatayı alırız. Doğru tanım public class SeriYukari : MatriksAlgo şeklinde olmalıdır.

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

A. SymbolPeriod öğesi için yanlış metod girilmiştir. SymbolPeriod yazdıktan sonra “.” (nokta) yazarsanız, Intellisense sayesinde alabileceği metodları net olarak görebilirsiniz. Bu metodlar Day, Min, Min10, Min120…,Week, Month, Year şeklinde olmalıdır.

Q. error CS1503: 3 bağımsız değişkeni: ‘double’ öğesinden ‘decimal’ öğesine dönüştürülemiyor

A. Fonksiyonunuzda kullandığınız 3. değişken decimal olarak beklenmekte ama double olarak yazılmıştır. C# casting yaparak sorun çözülebilir.

Örn.

StopLoss(Symbol1, SyntheticOrderPriceType.PricePoint,1.10); //Yanlış

StopLoss(Symbol1, SyntheticOrderPriceType.PricePoint,1.10m); //Doğru. 1.10 double öğesi artık decimal olarak tanımlanmıştır (casting)

Q. error CS0019: >’ işleci ‘decimal’ ve ‘double’ türündeki işlenenlere uygulanamaz

A. İki ayrı tipte eleman kıyaslanmaya çalışılmaktadır. Double olan elemanı decimal olarak cast ediniz.

Örn.

if (macd.Macd.CurrentValue > 0.0001) //Yanlış

if (macd.Macd.CurrentValue > 0.0001m) //Doğru. 0.0001 double öğesi artık decimal olarak tanımlanmıştır (casting)

Q. Hata! Strateji çalıştırılırken bir hata oluştu: Nesne başvurusu bir nesnenin örneğine ayarlanamadı.

A. Bu hata başka nedenlerle de görülebilmekle birlikte, çoğunlukla yanlış veya olmayan bir sembol kullanıldığında alınmaktadır. Bu durumda çözümü basittir.

Örn. 

[SymbolParameter("garanti")]  //Yanlış. ‘garanti’ diye bir sembol mevcut değildir.

[SymbolParameter("GARAN")]  //Doğru

Q. Emir sinyali geldi fakat emirlerin sıralı gitmesi seçeneği aktif olduğundan emir gönderilmedi şeklinde bir hata alıyorum.

A. Bu bildiri aslında bir hata değildir. Stratejinizde OnInit() fonksiyonu içerisinde SendOrderSequential fonksiyonu bulunur (bulunmuyorsa aşağıda yazıldığı şekilde eklenebilir). Bu fonksiyon emirlerin sıralı gönderilmesini tanımlar. Eğer false değeri ile çağırılırsa emirleriniz sırasız olarak gönderilebilecektir.

Örneğin SendOrderSequential(true) yazılırsa, stratejiniz ilk olarak bir satış emri üretirse bu emir gönderilmeyecektir. IQ stratejinizin öncelikle bir alım emri üretmesini bekleyecek, daha sonra da bir satım emri üretmesini bekleyecektir. Bu sırayı bozan emirler, strateji tarafından üretilse bile işleme alınmayacaktır.

//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); //True: Emirler sıralı olarak gönderilecektir