Merhaba, portfolio'yu strateji icerisinden canli olarak takip etmek saglikli olmayacagindan simdilik bunu tavsiye etmiyoruz. Kurumlardan bize sunulan baglanti yavas ve minimum dakikada bir update edebiliyoruz. Bu sizin icin sorun teskil etmiyorsa Bakiyenizi asagidaki sekilde takip edebilirsiniz.
var overall = GetOverall();
var para1 = BistOverall;
var para = BistAvailableMargin;
Bahsettiginiz takibi en saglikli ve guvenilir olarak strateji icerisinden yapabilirsiniz, ornegin baslangic bakiyesi manuel olarak belirleyip sonra stratejinizde yaptiginiz islemleri canli takip edebilir, bu sekilde de baslangic bakiyenizi strateji icerisinde guncelleyerek canli takip edebilirsiniz.
Islemleri canli takip edebilmek icin OnDataupdate fonksiyonu icerisinde (ya da orn. OnTimer) asagidaki kodu kullanabilirsiniz. inAlgoQuantity, strateji calismaya basladigindan itibaren portolio'da belirtilen sembolden net kac adet oldugunu takip edecektir.
IDictionary<string, decimal> portfolio = GetPortfolio();
var positionflag = portfolio.ContainsKey(Symbol) && portfolio[Symbol] != 0;
if (positionflag)
{
inAlgoQuantity = portfolio[Symbol];
}
Asagidaki kod ile ise gercek zamanli emir/pozisyon takibi yapabilirsiniz
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
{
var positionChange = order.OrderQty;
realposition += (int) positionChange;
Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
}
if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
{
var positionChange = order.OrderQty;
realposition -= (int) positionChange;
Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
}
}
Sadece Son yazdigim kod kullanilarak bahsettiginiz takibi emirlerin gerceklesme fiyatlarindan toplam kar/zararinizi hesaplayip %10 dusus varsa stratejiyi durduracak bir flag olusturabilirsiniz. Yazdiklarima bir bakin daha fazla yardima ihtiyaciniz olursa tekrar yazabilirsiniz.