Döngüler ve Emirleri Kapatma veya Silme - sayfa 4

 
ggekko :

Merhaba uzmanlar, bu çözüm hakkında ne düşünüyorsunuz?

 while ( OrdersTotal ()> 0 )
Bu, diğer tüm EA (kendisi dahil) ve manuel ticaret ile uyumlu olmadığı anlamına gelir. (Diğer grafiklerde işlem görür)
 
WHRoeder :
ggekko :

Merhaba uzmanlar, bu çözüm hakkında ne düşünüyorsunuz?

Bu, diğer tüm EA (kendisi dahil) ve manuel ticaret ile uyumlu olmadığı anlamına gelir. (Diğer grafiklerde işlem görür)

Elbette. Bu tamamen yakın.

Bazen, "orijinal" versiyonun çalışmadığı durumlar olabilir (örneğin, çok sayıda açık işlemi hemen kapatmak istersiniz). Bu sürüm bunun için iyidir.

 
ggekko :

Elbette. Bu tamamen yakın.

Bazen, "orijinal" versiyonun çalışmadığı durumlar olabilir (örneğin, çok fazla açık işlemi hemen kapatmak istersiniz). Bu sürüm bunun için iyidir.

Neden hatalara tepki vermeye çalışmıyorsunuz? hatayı analiz edip ona göre tepki vermen gerekmez mi? bazı hatalar için yeniden deneyebilirsiniz, diğerleri için denemeyi bırakmanız gerekir.
 

Merhaba,


while döngüleri hakkında bir sorum var. Mevcut EA'yı mümkün olduğunca sık bir döngüde çalıştırmak istiyorum. Bu yüzden benim düşüncem, geçerli kodu, içinde while'ın yalnızca her 1 milisaniyede bir yürütülmesine neden olan bir uyku işleviyle birlikte bir while döngüsüne koymak.


Ancak, bunu yaptığımda, (her döngüde neler olup bittiğini takip eden bazı Print("...") işlev çağrılarım var), bu donmayı görüyorum ve ekrana daha fazla baskı gelmiyor.

Sorunun ne olabileceğini merak ediyorum. EA'yı 1 ms kadar sık bir döngüde çalıştırmak uygun mudur? Örneğin her milisaniyede bir sunucudan en son teklifi/talebi almaya çalışmakta bir sorun olur mu? Bu, oraya çok fazla yük getirerek donmaya neden olur mu?

Muhtemelen algoritmamın yaptığı başka bir şey buna neden oluyor, emin değilim.


200ms döngülerde çalıştırdım ve hala aynı sorunu yaşıyorum (ancak hemen olmasa da). Günlük dosyasına çok fazla satır yazdırmakla ilgili bir sorun olabilir mi?



bu konuda herhangi bir tavsiye için teşekkürler.

Saygılarımızla,


C.

 
Bir kod sorunu olabilir - ancak kodu bilmeden?
 

14967057 :

while döngüleri hakkında bir sorum var. Mevcut EA'yı mümkün olduğunca sık bir döngüde çalıştırmak istiyorum.

Bu yüzden benim düşüncem, geçerli kodu, içinde while'ın yalnızca her 1 milisaniyede bir yürütülmesine neden olan bir uyku işleviyle birlikte bir while döngüsüne koymak.

En son teklifi/sormayı almaya çalışmakla ilgili bir sorun olur mu?

Günlük dosyasına çok fazla satır yazdırmakla ilgili bir sorun olabilir mi?

  1. Bu konu, Emirleri Kapatma ve Silme ile ilgiliydi. Konu dışı sorular için konuları ele geçirmeyin. Yeni bir tane yayınlayın.
  2. Neden sürekli döngü yapmak istiyorsunuz? Hiçbir şey değişmiyor. Tek yaptığın CPU zamanını boşa harcamak.
  3. Baştan geri dönün ve Teklif/Soruşturma değiştiğinde, başlangıcınız mümkün olduğunca hızlı bir şekilde çağrılır.
  4. Evet, mevcut tüm ram'leri satırlarla doldurdunuz, Windows'un onları diske koyabileceğinden daha hızlı. Tüm programlar çağrılır. Her şey asılı.
 

Merhaba,

Görünen o ki, sahip olduğum sorun, EA kodumu 1ms uyku ile bir süre döngüsü içine yerleştirmekten kaynaklanmıyor. Bu kısım iyi görünüyor (ekrana nereden yazdırdığıma bakmaksızın) çünkü şimdi son yarım saattir hatasız çalışıyor.


Sorun, sonunda EA'nın sonsuz bir döngüye hapsolmasına neden olan koddayken başka bir sinsilikten kaynaklanıyordu.

Gooly ve Roesder girdiniz için teşekkürler.

Saygılarımızla,

 

Herkese merhaba. Bu konuyu okudum ve bir sorum olacak. Bekleyen emri silen bir kod oluşturmaya çalışıyorum (sadece DUR, LIMIT yok), ancak sadece bekleyen başka bir emir etkinleştirildiyse (başlat OP_SELL veya OP_BUY). Yani kod bu (ama bir hata var, ama nerede bilmiyorum). Koduma bakar mısınız lütfen?

 bool    result;
   int    i, j, cmd, cmd2,total;

   total= OrdersTotal ();

   for (i= 0 ; i<total; i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
        {
         cmd=OrderType();
         
         if (cmd!=OP_BUYSTOP && cmd!=OP_SELLSTOP)  //take an orders which was activated 
           {
           for (j= 0 ; j<total; j++)   //another variable j 
     { 
     if ( OrderSelect (j,SELECT_BY_POS,MODE_TRADES)){ cmd2=OrderType();
     if (cmd2!=OP_BUY && cmd2!=OP_SELL)
           {
            
            OrderPrint();
            
            result= OrderDelete ( O rderTicket ());  //first pending order become to OP_SELL or OP_BUY, second pending order will be delete
            if (result!=TRUE) Print("LastError = ", GetLastError());
            break;
           }
        }
       }
     }
     }
   }
 

OrdersTotal() doğru değil...

OrdersTotal() kullanan ve doğru sonuçlar vermeyen (iki farklı broker ile gözlemlenen) kod dizisini döngüye sokarak şaşırdım.

WINE 3.0 çalıştıran bir Linux Ubuntu-MATE 16.04 masaüstünde MT4 sürüm 1090 kullanıyorum

İşte kullandığım şey ...

for(int cc = 0; cc < OrdersTotal(); cc++)
{
(!OrderSelect(cc, SELECT_BY_POS, MODE_TRADES) ) devam ederse;
(OrderSymbol() != Symbol() ) devam ederse;
(OrderType() > 1) devam ederse; //--bekleyen işlemleri yoksay

OpenTradecnt++; //--o sembolün var olan her canlı konumu için sayar
Print("bu sembolün açık işlemlerinin sayısı: ", OpenTradecnt);
}

İki farklı komisyoncuyla, OrdersTotal() değerinin MT4 komisyoncusunun 'Ticaret' sekmesinde gösterilenle her zaman uyuşmadığını fark ettim. Başlangıçta, OrdersTotal() işlevinin düzgün çalışmamasına neden olanın aracı olduğunu düşündüm. 2. aracıda fark ettiğimde, MT4'ün dahili bir 'sorunu' olup olmadığını veya kodumun yanlış olup olmadığını VEYA bunun MT4'ün sunucuyla düzgün bir şekilde senkronize edilmesiyle ilgili bir sorun olup olmadığını merak etmeye başladım....?

Bu forum dizisini okuduktan sonra, for..loop'u okumak için değiştirmek için sonuçlarda bir değişiklik olup olmayacağını merak ediyorum:

for(int cc = OrdersTotal() - 1; cc >= 0; cc--)
{
...........
}

VEYA, OnTick() olayı sırasında OrdersTotal() öğesinin düzgün bir şekilde senkronize edilmesini sağlayacak bir bayrak veya kod satırı var mı?

Bununla ilgili herhangi bir açıklama çok yardımcı olacaktır ve çok takdir edilecektir!

 

Lütfen kodunuzu eklemek için </> düğmesini kullanın.