Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım 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
Sorunun yüzüme bakmak olduğunu biliyorum ama göremiyorum...
Yine de sahip olduğum sorun; Aynı "OP_BUY" veya "OP_SELL" i farklı fiyatlarla 4 defaya kadar kısmi olarak kapatmaya çalışıyorum... Sanırım sormam gereken soru şu, bir yol alabilir miyim, burada TÜM kısmi bir kuralım var mı? kapanışlar (belirli BİR işlemdeki herhangi bir lotun ve fiyatın) önceden tanımlanmış "OrderClose()" parametre setlerinde yalnızca BİR KEZ kısmen kapanacaktır...
Bu şekilde, şimdi bunu OrderOpenTime()'ı karşılaştırarak yapmayı düşünüyorum, esasen yalnızca bir kez çalışacak ve diğer herhangi bir OrderClose() işlevinin gerçekleşmesini kısıtlayacaktır... Sahip olabileceğim bir yol bulmak istiyorum. 4 OrderClose() işlevine uygulanan bir kural... (eğer bu mantıklıysa?)
İnsanların açık 4 sipariş önerdiğini biliyorum, ancak çok derine inmeden bu şekilde yapmak benim için daha az verimli.
Neden sadece bilet numarasını ve gerçekleştirilecek kalan mevcut kısmi kapanışların sayısını saklayan iki boyutlu bir diziye sahip değilsiniz.
Anahat/Sözde kod:
1. statik iki boyutlu diziyi tanımlayın: cOrders[][2].
2. girilen her yeni sipariş için: cSiparişlerin ilk boyutunu boyut+1 olarak yeniden boyutlandırın, yeni siparişin bilet numarasını [x][0]'a ve gerçekleştirmek için kalan kısmi kapanış sayısını (bu durumda, 4) [x]['e koyun] 1].
3. Herhangi bir zaman aralığında (örneğin, her başlangıç()), dizide dolaşın, saklanan bilet numarasını kullanarak her bir siparişi seçin ve kısmi bir kapatmanın gerekip gerekmediğini belirleyin.
4. Kısmi kapatmanın gerçekleştirilmesi gerekiyorsa (3. adıma bakın), OrderClose()'u kullanarak emri kısmen kapatın ve cOrders[x][0]'ı yeni bilet numarasını yansıtacak ve cOrders[x][1]'i 1 azaltacak şekilde güncelleyin.
5. Kapatılan veya gerçekleştirilecek kısmi kapanış sayısının 0 olduğu siparişleri siparişlerden kaldırın .
Tek sorun, platform/bilgisayar yeniden başlatıldığında ne yapılacağıdır. Bu bilgileri bir dosyada saklayabilir ve dosyayı platform yeniden başlatıldığında init() içinde okuyabilirsiniz.
Neden sadece bilet numarasını ve gerçekleştirilecek kalan mevcut kısmi kapanışların sayısını saklayan iki boyutlu bir diziye sahip değilsiniz.
Anahat/Sözde kod:
1. statik iki boyutlu diziyi tanımlayın: cOrders[][2].
2. girilen her yeni sipariş için: cSiparişlerin ilk boyutunu boyut+1 olarak yeniden boyutlandırın, yeni siparişin bilet numarasını [x][0]'a ve gerçekleştirmek için kalan kısmi kapanış sayısını (bu durumda, 4) [x]['e koyun] 1].
3. Herhangi bir zaman aralığında (örneğin, her başlangıç()), dizide dolaşın, saklanan bilet numarasını kullanarak her bir siparişi seçin ve kısmi bir kapatmanın gerekip gerekmediğini belirleyin.
4. Kısmi kapatmanın gerçekleştirilmesi gerekiyorsa (3. adıma bakın), OrderClose()'u kullanarak emri kısmen kapatın ve cOrders[x][0]'ı yeni bilet numarasını yansıtacak ve cOrders[x][1]'i 1 azaltacak şekilde güncelleyin.
5. Kapatılan veya gerçekleştirilecek kısmi kapanış sayısının 0 olduğu siparişleri siparişlerden kaldırın.
Tek sorun, platform/bilgisayar yeniden başlatıldığında ne yapılacağıdır. Bu bilgileri bir dosyada saklayabilir ve dosyayı platform yeniden başlatıldığında init() içinde okuyabilirsiniz.
Farklı parametreleri tanımlamak için sihirli sayının bölümlerini nasıl kullanacağım konusunda hiçbir fikrim yok? Bence OrderOpenTime() kullanmak mantıklı bir yol olmayacak... Bu iş parçacığının ne kadar uzun sürdüğüne inanamıyorum. Yüksek sesle gülmek.
Allah'a yemin ederim ki (herkesin de yardımıyla!) bu konuyu çözdüğümde bununla ilgili bir konu açacağım.
Bence bunu yapmanın en kolay yolu Magic Numbers ile. . . farklı parametreleri tanımlamak için sayının bölümlerini kullanın, örneğin: parça sayısı, sipariş numarası, gün, ay, EA numarası . . . tüm parçalar aynı Sihirli Numaraya sahip olacak ve Tarihte kolayca izlenebilecekti. Kapalı kısmın ve açık kalan kısmın her ikisinin de aynı Magic Number'a sahip olduğunu varsayıyorum. . .
Sihirli Sayının bilgi parçalarını kodlamak için kullanılması oldukça mümkündür, ancak birkaç olası sınırlama görüyorum. İlk olarak, Sihirli Sayı bir int'dir ve bu nedenle 10 basamak uzunluğundadır, burada en soldaki basamak yalnızca 1 veya 2 olabilir (ve en soldaki basamak 2 ise, en soldaki ikinci basamak 7 veya daha az olmalıdır) ). İkincisi, sadece mevcut siparişin kısmen kapatılmasının gerekip gerekmediğini (veya kapatılıp kapatılamayacağını) belirlemek için her bir siparişin tüm bölümlerini bulmak için tüm geçmişi gözden geçirmek her start() için daha fazla zaman alabilir. Sadece daha fazla zamanın önemsiz olup olmayacağından emin değilim.
Bekle, birkaç sihirli numaram olamaz mı? İlk OrderSend() için bir tane, OrderModify() için bir tane kullanın, pozisyonun yarısı ilk 1:1 hedefinde kapatıldıktan sonra MagicNumber değiştirilsin mi? Bu nedenle, 1:1'de ilk yarıyı kapatmak istediğimde, o anki açık "OP_BUY" ilk verdiğim sihirli sayıya karşılık geldiği sürece sadece 1:1 kapanacak? Kısmen kapandıktan sonra, bu sihirli sayıyı değiştirip değiştirelim mi?!
Yüksek sesle gülmek? Bu gerçekten basit değil mi?!
GÜNCELLEME: Açıkçası bugün buna bakmayı bırakmam gerekiyor - bir MagicNumber'ı değiştiremezsiniz - keşke yapabilseydiniz... (facepalm) - Tüm bunların ne kadar kolay olacağını hayal edebiliyor musunuz...
Bekle, birkaç sihirli numaram olamaz mı? İlk OrderSend() için bir tane, OrderModify() için bir tane kullanın, pozisyonun yarısı ilk 1:1 hedefinde kapatıldıktan sonra MagicNumber değiştirilsin mi? Bu nedenle, 1:1'de ilk yarıyı kapatmak istediğimde, o anki açık "OP_BUY" ilk verdiğim sihirli sayıya karşılık geldiği sürece sadece 1:1 kapanacak? Kısmen kapandıktan sonra, bu sihirli sayıyı değiştirip değiştirelim mi?!
Yüksek sesle gülmek? Bu gerçekten basit değil mi?!
Hayır. İlk olarak, ilk OrderSend()'den sonra, OrderModify() kullanarak Sihirli Numarayı ekleyemez/değiştiremezsiniz. İkincisi, OrderClose() kullanarak kısmi bir sipariş kapanışı yaptığınızda, yeni sipariş (sanırım) eski siparişle aynı Sihirli Numarayı alır.
Hayır. İlk olarak, ilk OrderSend()'den sonra, OrderModify() kullanarak Sihirli Numarayı ekleyemez/değiştiremezsiniz. İkincisi, OrderClose() kullanarak kısmi bir sipariş kapanışı yaptığınızda, yeni sipariş (sanırım) eski siparişle aynı Sihirli Numarayı alır.
Evet. Ne kadar geri zekalı olduğumu anladım. Uzun gün!
Evet, ilk kısmi kapanıştan sonra kalan pozisyona hala ilk başladığı sihirli sayı atanır.
Şimdi gerçekten sinirimi bozuyor... Sihirli sayıyı değiştirebilseydim, çok kolay olurdu!? Bir pozisyonu BİR KEZ kısmen kapatmanın mantıklı bir yolu olmalıdır - ve bunu OrderClose() içinde belirtilen herhangi bir önceden tanımlanmış fiyatta birden çok kez yapın - MagicNumber()'ı değiştirmemize izin verecek bir güncelleme olması gerekiyor!
Hiç mantıklı düşünmüyorsun.
1. Sihirli sayıyı değiştirmek, OrderOpenTime()'ı bilmekten daha fazla size nasıl yardımcı olabilir? Bu siparişin tanımlayıcısı ile tamamen aynı anlama gelir.
2. timetostr ile neden gün/saat/dakika biçimine dönüştürüyorsunuz? OrderOpenTime() zaten zaman damgası biçimindedir ve şöyle görünür: 1375356521, siparişin açıldığı saniyeye kadar olan tam zamanı temsil eder.
Sihirli sayıyı değiştirebilseydiniz, siparişin sihirli numarasına sahip olmadığından emin olmak için siparişin sihirli numarasını karşılaştırırdınız, bu da zaten kısmen kapalı olduğu anlamına gelir değil mi?
Bunu yapabilseydiniz, neden siparişin OrderOpenTime'ını zaten kısmen kapalı olduğunu bildiğiniz zaman damgasıyla karşılaştıramıyorsunuz?
statik tarihsaat zatenpartkapalı;
parça kapatma siparişi başarılı olursa
zatenpartclosed = OrderOpenTime();
sipariş, parça kapama kriterlerini karşıladığında
if(OrderOpenTime() != zatenpartclosed )
Aynı anda birden fazla açık siparişi yönetiyorsanız, kısmi kapalı siparişlerin her bir zaman damgasını tutmak için bir dizi[] kullanın.