0 beğenilme 0 beğenilmeme
561 kez görüntülendi

Merhaba. Biliyorum bu konu daha önce 2 defa soruldu fakat 2'si de farklı şekilde anlatılmış ve pek anlaşılır değil.

Ben kullandığım stratejime ekstradan sadece stoploss eklemek istiyorum ve örneğin long için de short için de pozisyona girdiğim fiyatın %1 lik zarara uğramasından sonra otomatik olarak pozisyonu kapamasını istiyorum.

Bunun için öncelikle public class bölümüne:

bunu mu?

		//Burdaki değer ile yüzdeli stoploss kurulur.
		[Parameter(1)]
		public decimal Zarar_Durdur_Yuzdesi;

yoksa bunu mu yazacağım?

		public bool Zarar_Durdur;
		[Parameter(1)]
		public decimal STOP_LOSS;
		ISyntheticOrderPrices SL;

ve yapıp daha sonraki kodu:

StopLoss(Symbol, SyntheticOrderPriceType.Percent, Zarar_Durdur_Yuzdesi);

Long işlemler için Buy kısmına mı yazacağım Sell kısmına mı? Ve hepsi bu kadar mı?

Bu koda göre 500$dan işleme girdiği bir enstrümanı, enstrüman 495$ a düştüğü zaman otomatik olarak satacak mı?

Ve bu kod short için de kullanılabilir mi?

Teşekkür ederim

Algoritmik Trading kategorisinde (289 puan) tarafından | 561 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme
En İyi Cevap

Merhaba,

Hangisini kullanayım diye sorduğunuz iki şekilde olur. O kod satırları stoploss un dinamik olarak parametresini oluşturmamızı sağlar.

StopLoss(Symbol, SyntheticOrderPriceType.Percent, Zarar_Durdur_Yuzdesi);

Örneğin yukarıdaki stoploss kodunda Zarar_Durdur_Yuzdesi ile belirtilen parametreyi aşağıdaki gibi parametreler kısmında tanımlarsanız stratejiyi çalıştırdığınızda siz değiştirmediğiniz sürece 1 değeri ile çalışacaktır.

		[Parameter(1)]
		public decimal Zarar_Durdur_Yuzdesi;

Ben kullandığım stratejime ekstradan sadece stoploss eklemek istiyorum ve örneğin long için de short için de pozisyona girdiğim fiyatın %1 lik zarara uğramasından sonra otomatik olarak pozisyonu kapamasını istiyorum.

Bu talebiniz için yapmanız gereken long veya short farketmeksizin pozisyona girdiğiniz kod satırından hemen sonra alttaki stoploss kodunu yapıştırın. Bu kod %1 zarar olduğu anda pozisyonunuzu kapatacaktır.
//Symbol : Zarar durdur kurulmak istenen sembol
//SyntheticOrderPriceType.Percent :Zarar durdur emrinin tipi Percent(Yüzde) veya PricePoint(Fiyat) adımı
//StopLevel(Alttaki 1 değeri) : Zarar durdur seviyesini hesaplama değeri

StopLoss(Symbol, SyntheticOrderPriceType.Percent, 1);

İyi çalışmalar

(4,555 puan) tarafından
tarafından seçilmiş
0 0
Örneğin MOST kulanarak short için kullandığım kod için bu doğru mudur?
Stoploss olduğu zaman ve pozisyonu kapadığı zaman, bu koda göre BUY koşulu sağlandığında tekrar long açmayacak değil mi?

            var Close = barDataCurrentValues.LastUpdate.Close;

            if ((CrossBelow(most.ExMOV, most)))
            {
                if (FirstRun == 0)
                {
                    SendMarketOrder(Symbol, 3500, OrderSide.Sell);
                    StopLoss(Symbol, SyntheticOrderPriceType.Percent, 1);
                    FirstRun = -1;
                    Debug("Shortlama emri verildi.");
                    Debug("Most.ExMov:" + most.ExMOV.CurrentValue);
                    Debug("Most:" + most.CurrentValue);

                }
            }

            if (CrossAbove(most.ExMOV, most))
            {
                if (FirstRun == -1)
                {
                    SendMarketOrder(Symbol, 3500, OrderSide.Buy);
                    FirstRun = 0;
                    Debug("Nötr emri verildi. Short pozisyonlar kapanacak");
                    Debug("Most.ExMov:" + most.ExMOV.CurrentValue);
                    Debug("Most:" + most.CurrentValue);

                }
            }
        }
    }
}
0 0

Evet kodunuz doğru deneme ortamında tam emin olana kadar test ediniz.

Stoploss olduğu zaman ve pozisyonu kapadığı zaman, bu koda göre BUY koşulu sağlandığında tekrar long açmayacak değil mi?

Sanırım firstrun değerinin değişip değişmeyeceğini soruyorsunuz koşullarınız bu değere bağlı çünkü. Stoploss koşul içerisindeki değerleri etkilemez. Stoploss gerçekleştikten sonra pozisyon sıralamanız değişebilir bilginiz olsun. Örn. 3500 lot satış emri geldi daha sonra stoploss gerçekleşirse tam tersi yönde emir verecek ve 3500 alış emri gönderecek. Fakat bu işlem firstrun değerini etkilemediği için al emri tetiklendiğinde 3500 alış emri gerçekleşecek ve long pozisyona geçeceksiniz.

Bu durumu engellemek için OnOrderUpdate içerisinde pozisyon takibi yapabilirsiniz.

0 0
SendOrderSequential dan LONG lar için true set ettim. Yani önce LONG açmadan sakın SHORT (neutral) açma dedim ve böylelikle LONG stoploss olsa bile kendisi SHORT açmayacak değil mi?

 

Shortlar için false set edip flagler yaptım. İlk SHORT açmadan LONG açma dedim. böylelikle açtığı SHORT stoploss olursa kendi kendine LONG açamayacak değil mi? .. o yüzden shortlama kodumda BUY kısmına stoploss eklemedim.
0 0

SendOrderSequential dan LONG lar için true set ettim. Yani önce LONG açmadan sakın SHORT (neutral) açma dedim ve böylelikle LONG stoploss olsa bile kendisi SHORT açmayacak değil mi?

Bu işinizi görür gibi geliyor ama siz yine emin olana kadar test edin.

Shortlar için false set edip flagler yaptım. İlk SHORT açmadan LONG açma dedim. böylelikle açtığı SHORT stoploss olursa kendi kendine LONG açamayacak değil mi? .. o yüzden shortlama kodumda BUY kısmına stoploss eklemedim.

Buradaki durum koyduğunuz flaglare bağlı eğer short pozisyondayken stoploss tetiklenirse pozisyon kapanacaktır. Flagleriniz bu durumu kontrol etmiyorsa buy koşulu gerçekleştiğinde long pozisyona geçme ihtimaliniz var. Dediğim gibi bu durumu en güzel OnOrderUpdate de pozisyon takibi yaparak kontrol edebilirsiniz. İsterseniz birkaç gün süreyle test ortamında strateji çalıştırıp durumu gözleyin.

0 0
Flagleri daha önce denedim 3 aydır çalışıyorlar. Short açmadan long komutu tetiklemiyor. Ben sadece SHORT altına Stoploss koydum bu koydum. Yukarıda verdiğim örnek buydu
0 0
Anladım ama örneğin short pozisyondayken stoploss tetiklenirse otomatik olarak pozisyonunuz sıfır olacak ardından long koşul gerçekleşirse long pozisyon oluşabilir.
0 0
Anladım. Ama backtestlerde hep al sat eşit çıktı 23 al 23 sat vb gibi. Umarım öyle bir şey olmaz. Olursa daha ne yapılabilir ki?    SendOrderSequential(false);  set ettim. Ve flagler de doğru. StopLoss için ekstra flag mi eklemem gerek acaba?
Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



7,509 soru
7,511 cevap
4,405 yorum
8,750 kullanıcı