Merhaba
Stratejime kaldıraçlı işlem eklemek istiyorum. Al emri verdiğinde long pozisyon açsın, sat emri verdiğinde short pozisyona dönüştürsün. İlave olarak, emirden sonra işlem ters yöne giderse (Hem long hem de short pozisyonda) stoploss olayım isterim ayrıca istediğim oranda take profit çalıştırabileyim. Sizin daha önce konu ile ilgili verdiğiniz cevapları inceledim aralarında tam istediğimi yapacak örnekler bulunmaktadır. Ancak bunları Binance'da canlıda denedim herşey süper ama kaldıraç oranı 5x görünse de ilk alış emrini direk "BuyOrderQuantity" olarak alım satım yapıyor. Yani backtestlerde kullandığım ilk alış emrini istediğim kaldıraç oranı ile çarpıp işlem açmıyor.
Kod içindeki al sat emrilerini "BuyOrderQuantity * KaldiracOrani" diye değiştirdim. Burada da sıkıntı olmadı ama bu seferde alış emrinden sonra (long pozisyonda) stoploss çalışmıyor. Sadece short pozisyonda çalışıyor. Long pozisyonda stopp loss çalışmayınca güven vermedi. Yani kaldıracı hallediyorum ama bu seferde long pozisyonda stoploss olamıyorum. Kodlamayı orjinali gibi kullansam her iki yönde de stoploss oluyorum ama bu seferde kaldrıaç oranı çalışmıyor.
Hareketli ortalamanın kesişimi ile ilgili bir örnek üzerinden yaptığım revize çalışmam aşağıda görünmektedir.
Son bir şey, emirlere hangisi önce gelirse başla olarak değiştirmek isterim ama beceremedim.
Çok teşekkür ederim, umarım sorum analışılır olmuştur.
// Gerekli
WorkWithPermanentSignal(true);
if (AcigaSatisYapilsin)
{
SendOrderSequential(true, Side.Buy);
SendOrderSequentialForShort(true, Side.All);
}else
{
SendOrderSequential(true, Side.Buy);
}
// #Gerekli
// kaldıraç oranı
SetLeverage(Symbol1, KaldiracOrani);
// kaldıraç tipi – true isolated, false cross
SetLeverageType(Symbol1, false);
// Gerekli
}
[Parameter(false)]
public bool AcigaSatisYapilsin;
[Parameter(false)]
public bool AksamSeansiniDahilEt;
List<string> orderIDList = new List<string>();
public void FX_Alis()
{
string _orderID = string.Empty; ;
decimal _quantity = 0;
if (LastOrderSide.Obj != Side.Buy)
{
if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
{
_orderID = SendMarketOrder(Symbol1, BuyOrderQuantity * KaldiracOrani, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
_quantity = BuyOrderQuantity * KaldiracOrani;
}else
{
if (LastOrderSideForShort.Obj == Side.All)
{
_orderID = SendMarketOrder(Symbol1, BuyOrderQuantity * KaldiracOrani, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
_quantity = BuyOrderQuantity * KaldiracOrani;
}else
{
_orderID = SendMarketOrder(Symbol1, BuyOrderQuantity * KaldiracOrani, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
_quantity = BuyOrderQuantity * KaldiracOrani;
}
}
if (_orderID != string.Empty && _quantity != 0)
{
orderIDList.Add(_orderID);
Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSide.Obj = Side.Buy;
LastOrderSideForShort.Obj = Side.Buy;
}
}
}
public void FX_Satis()
{
string _orderID = string.Empty; ;
decimal _quantity = 0;
if (LastOrderSide.Obj != Side.Sell)
{
if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
{
_orderID = SendMarketOrder(Symbol1, SellOrderQuantity * KaldiracOrani, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
_quantity = SellOrderQuantity * KaldiracOrani;
}else
{
if (LastOrderSideForShort.Obj == Side.All)
{
_orderID = SendMarketOrder(Symbol1, SellOrderQuantity * KaldiracOrani, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
_quantity = SellOrderQuantity * KaldiracOrani;
}else
{
_orderID = SendMarketOrder(Symbol1, SellOrderQuantity * KaldiracOrani, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
_quantity = SellOrderQuantity * KaldiracOrani;
}
}
if (_orderID != string.Empty && _quantity != 0)
{
orderIDList.Add(_orderID);
Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSide.Obj = Side.Sell;
LastOrderSideForShort.Obj = Side.Sell;
}
}
}
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
// Senntetik emirler tanımlanıyor
StopLoss(Symbol1, SyntheticOrderPriceType.Percent, Zarar_Durdur_Yuzdesi);
// TakeProfit(Symbol1, SyntheticOrderPriceType.Percent, Kar_al);
if (!orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)
{
LastOrderSideForShort.Obj = Side.All;
Debug("Sentetik emir tetiklendi");
}
}
}
// #Gerekli
}