Merhaba, kurumlar portfoy bilgisini anlik olarak veremedikleri icin portfoy'de bulunan butun hisseleri sat islemini algo icerisinden yapamiyoruz.
Fakat bir hisse algo icerisinde kac kere alinmis bunu takip edip, sonra butun alinanlari tek seferde rahatlikla satabilirsiniz.
Bu manuel olarak da yapilabilir ornegin islem yapildikca OnOrderUpdate fonksiyonu ile pozisyonumuzu guncel olarak takip edebiliriz.
public override void OnOrderUpdate(IOrder order)
{
//Gercek zamanli pozisyon takibi
if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
{
var positionChange = order.OrderQty;
realposition += (int) positionChange;
Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
if (realposition == 0)
{
SystemPosition = 0;
Debug("Kar AL / Zarar Durdur tetiklendi");
}
}
if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
{
var positionChange = order.OrderQty;
realposition -= (int) positionChange;
Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
if (realposition == 0)
{
SystemPosition = 0;
Debug("Kar AL / Zarar Durdur tetiklendi");
}
}
}
Ayrica GetPortfolio() fonksiyonu da algo icerisinde yapilan islemleri otomatik olarak tutmaktadir, bu fonksiyonu da kullanabiliriz:
---------------------------------GetPortfolio()---------------------------------
//Algo icerisinde net portfolio durumunu gosterir
IDictionary<string, decimal> portfolio = GetPortfolio();
var positionflag = portfolio.ContainsKey(Symbol) && portfolio[Symbol] != 0;
Debug("current position flag = " + positionflag);
var miktar = portfolio[Symbol];
Debug("miktar " + miktar);
//var manyshares = portfolio.Keys.Count(Symbol);
Calisan ornek strateji icin KADEMELI isimli stratejiye bakabilirsiniz.