Doğrusal yavaşlama - bir programcının hatası mı yoksa MT4'ün bir özelliği mi? - sayfa 4

 

Aşağıdaki yapı tek başına bir şeye değer.


     bool Ok= true ;
     for (i= OrdersTotal ()- 1 ;i>= 0 ;i--){ //проверяем наличие ордеров
       if ( OrderSelect (i,SELECT_BY_POS)){
       if (OrderSymbol()== Symbol ()&&OrderMagicNumber()==Magic){
         if (OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
         Ok= false ;
        }}}}

saçını biraz tara

     bool Ok= true ;
     for (i= OrdersTotal ()- 1 ;i>= 0 ;i--){ //проверяем наличие ордеров
       if ( OrderSelect (i,SELECT_BY_POS)){
         if (OrderSymbol()== Symbol ()&&OrderMagicNumber()==Magic){
           if (OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
            Ok= false ;
          }
        }
      }
    }

ve neyin, hangi sırayla yapıldığı netleşir. Sadece biçimlendirme. Ancak yine de kodu mantıksal olarak tutarlı işlemlere bölebilir ve bunları ayrı işlevlere ayırabilirsiniz. Böylece karışık kod yığınlarından ana algoritmayı kolaylaştırmak.

 
micle :

Sorun, aşırı derecede fazla sayıda koşullu ifadede kod çoğaltmasındadır. Aslında kod satırların %99'unu şu ya da bu şekilde koşullu işleci de içeriyor. yürütme, böyle bir kodun okunması zordur. Buna ekleyen kişinin en az 2 ana görevi vardır:

1-kırmayın

2 - istenen işlevselliği ekleyin

Okunamayan kod , öyle ya da böyle, her türlü kontrolün, karşılaştırmanın ek tekrarına yol açar - ve bu yine ek maliyetlerdir. Koda baktığımda, kendimi yaklaşık 25 yıl önce, programlamaya yeni başladığımda kişisel olarak hatırlıyorum ve bunu, sadece ilginç olduğu için, Atari 800XL PC'nin öğretmensiz talimatlarına göre öğrendim.

Tabii ki, ne tür bir "eğer"den bahsettiğimiz ilginç, görünüşe göre benim teknik özelliklerim var - "eğer öyleyse, öyleyse" yazdığım yer ve programcı bunu kodda bu şekilde yorumluyor ve orada bir "eğer" emirlerle doğrudan çalışma ile ilgili ve emirlerle yapılan birçok işlem var...

Tabii ki, konunun bir tür döngüde olduğunu düşündüm, bunun yürütülmesi TK koşullarının doğrulanmasının tekrar tekrar yürütülmesine yol açtı. Ancak durumu düzeltmenin tek yolunun kodu sıfırdan yeniden yazmak olduğu ortaya çıktı.

 
micle :

Aşağıdaki yapı tek başına bir şeye değer.

saçını biraz tara

ve neyin, hangi sırayla yapıldığı netleşir. Sadece biçimlendirme. Ancak yine de kodu mantıksal olarak tutarlı işlemlere bölebilir ve bunları ayrı işlevlere ayırabilirsiniz. Böylece karışık kod yığınlarından ana algoritmayı kolaylaştırmak.

Ve performansı herhangi bir şekilde etkiler mi?

 
micle :

Kod çoğaltma ile ilgili sorun

Çoğaltmanın ifa ile de ilgisi yoktur. Gerçek yavaşlama, siparişlerle çalışmaktan geliyor.
 
micle :

Aşağıdaki yapı tek başına bir şeye değer.


saçını biraz tara

ve neyin, hangi sırayla yapıldığı netleşir. Sadece biçimlendirme. Ancak yine de kodu mantıksal olarak tutarlı işlemlere bölebilir ve bunları ayrı işlevlere ayırabilirsiniz. Böylece karışık kod yığınlarından ana algoritmayı kolaylaştırmak.

Çok güçlü argümanlarınız var, kodunuz, deneyimli bir programcıyı nerede görebilirim?
 

devir 1.1

Zararı durdur ve bekleyen emirleri filtrelemek için ayna MA'yı kullanmak için iki seçenek kullanıyoruz.
maMirror - standart iMA işlevine göre hesaplanır, çubuk başına bir kez çalışır, veriler çubuk açılış fiyatları üzerinden alınır
Hesaplama algoritması:

Satılık:
hesaplamanın başlangıç noktası maMirror=iMA+pipsXHmaM(o/b)
sonraki hesaplama noktaları maMirror=maMirror(1)-(iMA(0)+pipsXHmaM(o/b)-iMA(1)+pipsXHmaM(o/b))
hesaplama, hesaplamanın bitiş noktasından sonra sona erer.

Satın almak için:
hesaplamanın başlangıç noktası maMirror=iMA-pipsXHmaL
sonraki hesaplama noktaları maMirror=maMirror(1)-(iMA(0)-pipsXLmaM-iMA(1)-pipsXLmaM)
hesaplama, hesaplamanın bitiş noktasından sonra sona erer.


Teknik görevi basitleştirmek için, çalışma ve değişkenler açısından bağımsız olacak ve kullanıcı tarafından yapılandırılacak iki hesaplama bloğu ayarlamak gerekir.
maMBlock=0 - blokları kullanmayın (standart durdurma kaybı kullanılır)
maMBlock=1 - yalnızca blok #1'i kullanın
maMBlock=2 - yalnızca blok #2'yi kullanın (standart durdurma kaybı kullanılır)
maMBlock=3 - her iki bloğu da kullanın

Blok 1
Kayıp hesaplamasını durdurun. Stoploss yeniden hesaplanır ve sipariş her çubukta maMirror değeri ile güncellenir.
1. Hesaplamanın başlangıç noktasını belirlemek için, BaşlangıçNoktası=1 ise (hesaplama maT'ye dokunduktan sonra gerçekleşir), BaşlangıçNoktası=2 ise (hesaplama sipariş açıldıktan sonra gerçekleşir) BaşlangıçNoktası değişkeni kullanılır.
1.1 StartPointO=1 ise, hesaplamanın sonu maT'ye dokunulduktan sonra gerçekleşir;
1.2.StartPointO=2 ise, sipariş kapatıldıktan sonra hesaplamanın sonu gelir;
1.3. MaMirror'da stop loss koymak mümkün değilse, sipariş kapatılır.
1.4. Levl_Zerro=0 (kullanılmaz), Levl_Zerro!=0 (zararı belirtilen maksimum değere yükseltiriz, geri sayım açık fiyattan başlar, eksi değer zararı durdurun pozitif değere dönüştürüldüğü anlamına gelir)

Blok #2
Bekleyen siparişleri filtrelemenin hesaplanması.
0.1 maMirror> bekleyen emir açılış fiyatları ise satın alma emirleri verilir.
0.2 Satış için siparişler, eğer maMirror< bekleyen bir sipariş açma fiyatı ise verilir
1. Hesaplamanın başlangıç noktasını belirlemek için, BaşlangıçNoktası=1 ise (hesaplama maT'ye dokunduktan sonra gerçekleşir), BaşlangıçNoktası=2 ise (hesaplama sipariş açıldıktan sonra gerçekleşir) BaşlangıçNoktası değişkeni kullanılır.
1.1 StartPointB=1 ise, hesaplamanın sonu maT'ye dokunulduktan sonra gerçekleşir;
1.2. StartPointB=2 ise, sipariş kapatıldıktan sonra hesaplamanın sonu gerçekleşir;
2. maMirrorDell=0 (kullanılmıyor) ise maMirrorDell=1 (0 noktasındaki koşullar eşleşmezse tüm açık emirler silinir)

Kullanıcı değişkenleri
maMirrorO (iMA ayarları)
maMirrorB (iMA tarafından yapılan ayarlar)
Başlangıç NoktasıO
Başlangıç NoktasıB
pipXHmaMo
pipsXLmaMo
pipXHmaMb
pipsXLmaMb
maMBlock

maMirrorDell

Görevin değerlendirilmesine yardımcı olun, müşteri yeni bir iş istiyor, ne kadar tahmin edeceğimi bilmiyorum) Programcı olmadığım için Havacılık ve Uzay Akademisi'nde mühendisim)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Belki tekrar edeceğim, ama! İlk ve büyük olasılıkla asıl sorun, kodun okunamaz ve yapılandırılmamış olmasıdır. Çok net bir TK'ye sahip olabilirsiniz. Ama alnına üzerine kod yazarsanız, o zaman böyle bir karışıklık yaşarsınız. TK'yi anlarsanız ve kodu sağ taraftan yazmaya yaklaşırsanız, bu (kural olarak) yürütme hızında önemli bir kazanç sağlar, ancak aynı zamanda başka paralara da mal olur.
 
-Aleks- :

Ve performansı herhangi bir şekilde etkiler mi?

belirli bir örnekte etkilemez. Danışman komut dosyasında bu tür biçimlendirme ile tamamen ilgilenmek ve tamamen yeniden biçimlendirmek gibi bir istek yoktur.
 
zfs :
Çok güçlü argümanlarınız var, kodunuz, deneyimli bir programcıyı nerede görebilirim?
Kodum herkese açık değil. Ticari gelişmeler, yüksek düzeyde yüklü web sunucuları üzerinde ve yakınında çalışır. Kodum özellikle DorogaTV projesinde "birkaç" şehrin yollarındaki trafik sıkışıklığını hesaplıyor.
 
TheXpert :
Çoğaltmanın ifa ile de ilgisi yoktur. Gerçek yavaşlama, siparişlerle çalışmaktan geliyor.

TK'ye göre koddaki siparişlerle mi çalışıyorsunuz, yoksa TK'nin kendisi mi yoksa MT4 genel olarak siparişlerle mi çalışıyor?