Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1207
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
mql5 (hedge)
nasıl uygulanır pozisyonları ikişer kapatma algoritması koşullar?
1 vaka. 2 pozisyon açıksa, kârın fazla olduğu pozisyonu kapatın... 2. durum. 2 veya daha fazla pozisyon açıksa, değere göre ortalama alarak kapatın...
Şimdi bu tür pozisyonları iki yöntem kullanarak kapatıyorum,
1. durum için, pozisyonları kâra göre karşılaştırmak ve kârı daha yüksek olanı kapatmak; 2. durumda, tüm pozisyonları, Özsermaye ile ortalama alarak kapatmak.
Bireysel olarak, bu yöntemler iyi çalışır, ancak birlikte çalışmazlar. iki olaydan birinin her iki yöntemin dağılımına girmesi nedeniyle.
Ve görünüşe göre onları ayıramıyorum. Sonuç olarak, her iki dava da esas olarak tüm pozisyonların kapatılmasıyla Özkaynak tarafından kapatılır. Bu, ilk durumda istenen pozisyonun silinmesine ve yeniden açılmasına neden olur.
Sonuç olarak. Çifte yayılma, çift komisyon. sinir bozucu)))
Sipariş ve pozisyon verme şeması şöyle görünür: SATIŞ için (ve sonra sadece SATIŞ için)
Sınır emri. SATIŞ_LIMIT _
konum. SATMAK (her zaman siparişler arasında)
Siparişi durdur. SATIŞ_DURDUR _
Ekli diyagramdır.
Kapanış pozisyonları.
1. durdurma emri tetiklendiyse , yani aynı anda iki veya daha fazla pozisyon ortaya çıktı, o zaman bir pozisyonu kapatmanız gerekiyor, daha fazla kar... (20)
2. bir limit emri tetiklendiyse, yani, aynı anda iki veya daha fazla pozisyon açıksa, o zaman onları (özsermayeye göre)...(15) değerine göre ortalamasını alarak kapatmanız gerekir.
Soru. Bu iki yöntemi, yalnızca kendi olaylarını işlemeleri için nasıl ayırabiliriz?
Belki de bu iki koşulun nasıl işleneceği başka bir yöntem var mı?
Kullandığım yöntemlerden örnekler.
Pozisyonlar danışmanın üzerinde çalıştığı sembolle açılıyor mu? Sihirli sayı kullanılır
Evet, mevcut sembol için. Evet, büyü kullanılır.
Evet, mevcut sembol için. Evet, büyü kullanılır.
İkinci koşulu açıklayın, bu ne anlama geliyor? ( 2 veya daha fazla pozisyon açıksa, değer başına ortalama alarak kapatın... )
İkinci koşulu açıklayın, bu ne anlama geliyor? ( 2 veya daha fazla pozisyon açıksa, değer başına ortalama alarak kapatın... )
Bu şu anlama gelir: İki veya daha fazla pozisyon açıksa ve Özkaynak tutarı bakiyeden bir miktar daha büyükse (diyelim ki 15), tüm pozisyonlar kapalıdır.
Örneğin. üç pozisyon açık. ilkinde, mevcut kayıp -10, ikincisinde -5, üçüncüsünde +15 tutarında kar +30, her şeyi kapatabilirsiniz.
Ortalama kar + 15'e ulaşılmamışsa, pozisyonlar kendi ön ayarlı SL veya TP'lerinde kapatılacaktır. (Bu, pozisyonları kapatmak için üçüncü koşul gibi, ancak bununla ilgili bir sorun yok, bu yüzden sessiz kaldım.)
Bu şu anlama gelir: İki veya daha fazla pozisyon açıksa ve Özkaynak tutarı bakiyeden bir miktar daha büyükse (diyelim ki 15), tüm pozisyonlar kapalıdır.
Örneğin. üç pozisyon açık. ilkinde, mevcut kayıp -10, ikincisinde -5, üçüncüsünde +15 tutarında kar +30, her şeyi kapatabilirsiniz.
Ortalama kar + 15'e ulaşılmamışsa, pozisyonlar kendi ön ayarlı SL veya TP'lerinde kapatılacaktır. (Bu, pozisyonları kapatmak için üçüncü koşul gibi, ancak bununla ilgili bir sorun yok, bu yüzden sessiz kaldım.)
İşte iki koşul için tam kod:
İşte iki koşul için tam kod:
Vladimir'e teşekkürler. Çözmeye çalışacağım.
Kendimce çözmeye çalıştım, bu iki koşulun nasıl ayrılabileceğini anlıyorum.
Örneğin.
Üç boole değişkeni tanımlayalım.
Konum_1;
Pos_2_Clos_1;
Pos_2_Clos_All;
1. Açık pozisyonların sayısını kontrol ediyoruz.
Eğer sadece 1 açık pozisyonumuz var SE LL ataması anlam:
Pos_1=doğru; Pos_2_Clos_1=yanlış; Pos_2_Clos_All =yanlış ;
2 pozisyon açıksa ve özkaynak tutarı pozitifse (bu sadece SELL_S TOP emri tetiklendiğinde meydana gelebilir), o zaman bu olaya bir boole değeri atayın
Pos_1= yanlış ; Pos_2_Clos_1= doğru ; Pos_2_Clos_All =yanlış ;
2 pozisyon açıksa ve özkaynak tutarı negatifse (bu sadece SELL_LIMIT emri tetiklendiğinde meydana gelebilir), o zaman
Pos_1= yanlış ; Pos_2_Clos_1= yanlış ; Pos_2_Clos_All =doğru ;
Hepsi bu gibi görünüyor... Boole değişkenlerini kontrol edebilir ve onlara kendi kapanış yönteminizi atayabilirsiniz, ancak nedense bu benim için işe yaramadı ...
Ben hala işe yaramaz bir programcıyım, belki bir yerlerde bir hata yaptım ...
Yardım için teşekkürler)
Vladimir Karputov :
Vladimir. Yapamayacağım bir şey. SELL_STOP siparişleri tetiklendiğinde - her şey yolunda. Daha fazla kârı olan sadece bir pozisyon kapatılır,
ancak SELL_LIMIT tetiklendiğinde, tüm açık pozisyonların kârının toplamı ile değil, kapanış yanlış gerçekleşir, ancak kârı daha yüksek olan pozisyonun kapatıldığı görülmektedir.
Daha önce benzer bir hata almıştım. Şimdi şimdiden düşünmeye başladım belki bir tür söve, belki de bir şekilde pozları saymıyorum ve onları açmıyorum.
Lütfen test için hazır kod parçama bakın, bir hata görebilirsiniz. Ancak kodunuzda da bir uyumsuzluk olabilir. Ya da bir şekilde onları yanlış açıkladım .., benim için ortalama kâr nedir.
Şimdi algoritma ile uğraşmaya başladım ve sonuçlarında size daha önce anlattığımdan biraz daha karmaşık olduğunu fark ettim.
Bir pozisyonu kendi SL ile kapatmak için üçüncü koşul, ilk iki koşulun algoritmasında hatalara yol açabilir.
SEL_STOP durumu olması gerektiği gibi yürütüldüğünden, yalnızca SELL_LIMIT durumu için pozisyonları kapatmak için tam algoritmayı bir kez daha açıklayacağım. Şimdilik bırakalım.
1. Başlangıçta bir açık SATIŞ pozisyonumuz var , kendi SL seti var, ancak SELL_LIMIT'den daha yüksek, yani SL SELL_LIMIT'den önce çalışmayacak.
2. SELL_LIMIT tetiklendi ve kendi SL'si ile ikinci bir SATIŞ pozisyonu belirdi, bu da bir sonraki SELL_LIMIT'den önce tetiklenemez
3. SELL_LIMIT siparişi tetiklenirse yeni bir SELL_LIMIT siparişi belirlenir. (her zaman)
4. Açık SATIŞ pozisyonlarının sayısı 1-3 veya daha fazla olabilir, hepsi SL'lerinin ne kadar uzakta olduğuna bağlıdır. En fazla üç tane varsa durumu düşünün. (SL ile sınırlayabilirim)
Şimdi pozisyonları kapatmak için senaryolar.
Açık pozisyon ise 2, o zaman bir veya tüm pozisyonları kapatmak için sadece iki senaryo mümkündür
1. Öz sermaye ile eğer bakiye 15'ten fazla ise ( tüm pozisyonlar kapalı ), (m_account.Equity()>= m_account.Balance()+15) Birkaç pozisyonu kapatmak istedim. ortalama alarak.
2. Kendi SL ile (bir pozisyon kapalı).
3. Hangi koşulun uygulanacağını bilmediğimiz için, kalan bir pozisyon daha önce ayarlanmışsa kapanış koşullarından arındırılmalıdır .
SELL_LIMIT betiğini tekrarlayabilir veya SEL_STOP'a inebilir ve farklı bir kapatma koşulu izleyebilir. (bunun için koşulları sıfırlayın)
4. Üç pozisyon varsa, onları da kapatın (m_account.Equity()>= m_account.Balance()+15) veya bunlardan biri SL'yi tetikler ve iki pozisyon kalır.
Kapanış koşullarının tanımlanmadığı bir pozisyon kalana kadar bu kuralı uyguluyoruz...
Vladimir Karputov :
Vladimir. Yapamayacağım bir şey. SELL_STOP emirleri tetiklendiğinde her şey yolunda demektir. Daha fazla kârı olan sadece bir pozisyon kapatılır,
ancak SELL_LIMIT tetiklendiğinde, tüm açık pozisyonların kârının toplamı ile değil, kapanış yanlış gerçekleşir, ancak kârı daha yüksek olan pozisyonun kapatıldığı görülmektedir.
Daha önce benzer bir hata almıştım. Şimdi şimdiden düşünmeye başladım belki bir tür söve, belki de bir şekilde pozları saymıyorum ve onları açmıyorum.
Lütfen test için hazır kod parçama bakın, bir hata görebilirsiniz. Ancak kodunuzda da bir uyumsuzluk olabilir. Ya da bir şekilde onları yanlış açıkladım .., benim için ortalama kâr nedir.
Genel olarak, hangi bekleyen emrin tetiklendiği önemli değildir - sonuçta, sonunda bir pozisyon alırız ve sonra pozisyonun karını hesaplarız.
Genel olarak, hangi bekleyen emrin tetiklendiği önemli değildir - sonuçta, sonunda bir pozisyon alırız ve sonra pozisyonun karını hesaplarız.
Evet, önemli değil. Fark konusunda şüphelerim vardı çünkü emirleri ve pozisyonları verirken onlara pozisyonlarım, emirlerim için "yorumlar" verdim. Sonuç olarak, bir emir bir pozisyona girdiğinde, emir yorumunu devralır.
Sonra, yorumlar yoluyla pozisyonları kontrol ederken, kafa karışıklığı ortaya çıktı ... sonra yorumları farklı çıktı. Neyse düzelttim.
Kodunuzda SELL_LIMIT'in çalıştığı durumda pozisyonların nasıl kapatıldığını hiç bulamadım veya anlamadım. Sermaye tarafından.
Görünüşe göre tüm pozisyonları kapatma olasılığı için bir kontrol yapıldı ve üzerine bir bayrak kondu.
ancak CloseAllPositions() içinde;
böyle bir şey eksik.
Vaka için tüm pozisyonları kapatmanız gereken - çalıştı SELL_LIMIT
Belki de aynı m_account.Equity()>= m_account.Balance()+ 15'i bir şekilde farklı şekilde uygulamışsınızdır?
Yoksa gerçekten işinize yaramıyor mu? Belki de benim anlayışımda ortalamanın ne olduğunu açıklamamış olmamdan dolayı.