Çoklu sipariş sorunu - sayfa 4

 
luisneves :

Merhaba Kronin,

Modifikasyonunuz çalışıyor. Maksimum siparişleri sınırladınız, bunun yerine hepsini kapatmak mümkün mü?

Bunu aşağıdaki kodla yapmaya çalıştım ama işe yaramıyor gibi görünüyor.

Saygılarımla

Luis

Hmmm, ne demek istediğini anladığımdan emin değilim...
Son siparişi açmak yerine (MaxOrders 7 olarak ayarlanmışsa 7. sipariş) tüm siparişleri kapatmak mı istiyorsunuz?

MaxOrders'a ulaşılana kadar beklemek ve ardından hepsini hemen kapatmak istemediğinizden oldukça eminim. Son sipariş çoğu zaman (veya her zaman) bir kayıpla biter.
Btw. Yayılma denetleyicisi hakkında PM'yi gördünüz mü?

 
kronin :

Hmmm, ne demek istediğini anladığımdan emin değilim...
Son siparişi açmak yerine (MaxOrders 7 olarak ayarlanmışsa 7. sipariş) tüm siparişleri kapatmak mı istiyorsunuz?

MaxOrders'a ulaşılana kadar beklemek ve ardından hepsini hemen kapatmak istemediğinizden oldukça eminim. Son sipariş çoğu zaman (veya her zaman) bir kayıpla biter.
Btw. Yayılma denetleyicisi hakkında PM'yi gördünüz mü?


Merhaba Kronin,

Hemen yanıt verdiğiniz için teşekkür ederiz.

n siparişlik bir pinpon döngüsünden sonra (MaxOrders) tüm açık siparişlerin kapatılması gerektiğini söyleyin, bunun mantıklı olmayacağını biliyorum, ama öyle olsa bile.

Başarısız olması ve bunun mantıklı olup olmadığı konusunda şüphelerim olması durumunda Reentry kodunu eklemeye çalışıyorum çünkü zaten IsContextBusy () Sleep (10) kodu var. Anladığım kadarıyla anlamı "Sunucu meşgulse veya platformdaki başka bir cihaz iletişim kurmaya çalışıyorsa, 10 milisaniye bekleyip tekrar deneyin". Bu nedenle, EA'nın bir bilet alınana kadar bu davranışı sürdüreceğini varsayıyorum, değil mi?

PM sorunuyla ilgili olarak, bu durumda Test'i hafta sonu kullanmamak veya bunu platform çevrimdışıyken yapmak daha iyidir....

5. satırı ekledim, ancak bunun gerekli olmadığını düşünüyorum çünkü 1. satırı zaten yaptınız, değil mi?

 int LastClosedTicket=GetTicketFromHistory( Symbol (),MagicNumber);  //1  
   if (LastClosedTicket> 0 )
    {                                                                 
       Print ( "LastClosedTicket=" ,LastClosedTicket);                   
       if ( OrderSelect (LastClosedTicket,SELECT_BY_TICKET))
      {
       if (OrderSymbol()== Symbol () && OrderMagicNumber()== MagicNumber)  //5            
       {            
         if (OrderType()==OP_BUY)
         {
         BuyAllowed= false ;SellAllowed= true ;
         } 
         else                    
         {
         BuyAllowed= true ;SellAllowed= false ;
         } 
        }   
      }
    }             
   return ( 0 );   
  }
 
   //+---------------------------------------------------------------------------+

Başka bir konu,

Aşağıdaki kod parçasında, sym ve mn'nin yer aldığı Kalın yazılan satırlar, Symbol() ve MagicNumber ile değiştirilmemelidir?

GetTicketFromHistory

int GetTicketFromHistory( string sym, int mn, int orderposinhistory= 0 ) // <------------------------Should replace sym and mn with Symbol () and MagicNumber ?
 {
   bool debug= false ;
   if (debug) Print ( "Orders in history: " , OrdersHistoryTotal());
   int ticket,count= 1 ,i;
   datetime orderclosedates[];
   for (i=OrdersHistoryTotal()- 1 ;i>= 0 ;i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)) continue ;
       if (debug) Print ( "OrderSymbol: " ,OrderSymbol(), "; OrderMagicNumber: " ,OrderMagicNumber(),
                     " ;OrderType: " ,OrderType(), "; OrderTicket: " ,OrderTicket(),
                     "; OrderCloseTime: " ,TimeToStr(OrderCloseTime()), ";" ); 
       if ((OrderMagicNumber()  ==mn) // <---------------------------------------------------------Should replace  mn with  MagicNumber ?
         &&(OrderSymbol()     ==sym) // <---------------------------------------------------------Should replace sym with Symbol () ?
         &&(OrderType()==OP_BUY||OrderType()==OP_SELL))
         {                       
         ArrayResize (orderclosedates,count);
         orderclosedates[count- 1 ]=OrderCloseTime();
         count++;

Burada, aşağıdaki koda tavsiyenize göre filtreler ekledim;

(//Fil:

//Toplam sipariş miktarını kontrol edin. Pazar, sihir ve sembol için bir filtre eklerdim...//<----------- Pazar filtresi ile ne demek istediğinizi bilmiyorum..... (Phil: piyasa emirleri, bekleyen emir yok )

//.... ama şimdi tembelim..... bu senin yapman gereken bir şey.

Bu doğru mu ?

 int start()
 { //0 
                                         
  OTLastTick = OTCurrentTick;                      
  OTCurrentTick = OrdersTotal ();
     if (OrderSymbol() == Symbol ()           //<--------filter for symbol and magic number, but for market (suppose market orders can't understand how....)
      && OrderMagicNumber() == MagicNumber) //<-|
     if (OTCurrentTick == 0 && OTLastTick > 0 )
      {
      BuyTrigger = Ask + OpenDistance * pt;
      SellTrigger = Bid - OpenDistance * pt;
      }             
     if (OTCurrentTick > 0 )Trail();                   
     if (OTLastTick >= 2                      //<------could you comment the meaning of this line ?                            
     &&OTCurrentTick < OTLastTick
     && OTCurrentTick > 0 )
     {
      CloseAllOnSL(); return ;
     }      
     if (OTCurrentTick >= MaxOrders) return ;                                                            
     if (OTCurrentTick > 0 )OpenOppositeOrder();                        
     if (OTCurrentTick == 0 )
     {
      BuyAllowed = true ;
      SellAllowed = true ;


Saygılarımla

Luis

 

Fonksiyonların kullanımı hakkında yorum yapmıyorum. RaptorUK bunu daha önce birkaç gönderi yaptı. Tekrar okuyun ve verilen kodda neden hiçbir şeyi değiştirmeniz gerekmediğini anlayın. Daha da iyisi, neden diğer EA'larda olduğu gibi kullanabileceğinizi anlayın.

OrdersTotal(), bir miktar siparişi geri verir. Muhtemelen bilmek istersiniz, emirler EA'nıza veya manuel ticarete aittir veya emirler bekleyen veya zaten piyasa emirleridir. EA'nın yarattığı sipariş miktarını geri veren bir işlev (int) yaratırdım.

if (OTLastTick >= 2 //<------bu satırın anlamını yorumlayabilir misiniz?
Yalnızca bir açık siparişiniz (2'den az) varsa, CloseAllOnSL işlevini çağırmanın bir anlamı yoktur..... tek açık sipariş açıkça durdurulmaz.

 
kronin :

Fonksiyonların kullanımı hakkında yorum yapmıyorum. RaptorUK daha önce birkaç gönderi yaptı. Tekrar okuyun ve verilen kodda neden hiçbir şeyi değiştirmeniz gerekmediğini anlayın. Daha da iyisi, neden diğer EA'larda olduğu gibi kullanabileceğinizi anlayın.

OrdersTotal(), bir miktar siparişi geri verir. Muhtemelen bilmek istersiniz, emirler EA'nıza veya manuel ticarete aittir veya emirler bekleyen veya zaten piyasa emirleridir. EA'nın yarattığı sipariş miktarını geri veren bir işlev (int) yaratırdım.

if (OTLastTick >= 2 //<------bu satırın anlamını yorumlayabilir misiniz?
Yalnızca bir açık siparişiniz (2'den az) varsa, CloseAllOnSL işlevini çağırmanın bir anlamı yoktur..... tek açık sipariş açıkça durdurulmaz.


Merhaba Kronin,

Sorunlarıma verdiğiniz yanıt için teşekkür ederim.

En çok dikkatimi kodunuza ve daha önce verilen RaptorUK tavsiyesine koyacağım.

Saygılarımla

Luis

 

Merhaba Kronin,

Bir sorun çıktı ve iki EA'nın kullanımıyla ilgili. İki EA'yı farklı çizelgelere koyarsam ve farklı sihirli sayılarla aynı anda çalışmazlar. Uninit neden 5 olarak bir hata alıyorum ancak foruma bir göz attığımda bu sorunla başa çıkmak için beni doğru yöne koyan bilgileri bulamıyorum.

Tamamlayıcı bilginiz var mı?

Saygılarımla

Luis

 
luisneves :

Merhaba Kronin,

Bir sorun çıktı ve iki EA'nın kullanımıyla ilgili. İki EA'yı farklı çizelgelere koyarsam ve farklı sihirli sayılarla aynı anda çalışmazlar. uninit nedeni 5 olarak bir hata alıyorum

https://docs.mql4.com/constants/uninit
 

Merhaba RaptorUK,

Hemen yanıt verdiğiniz için teşekkür ederiz.

Sağlanan bağlantıda buldum,

REASON_PARAMETERS 5 Giriş parametreleri kullanıcı tarafından değiştirildi.

Ama bu bilgiyle hiçbir şey yapamam (bildiğim kadarıyla). Hangi girdi parametrelerinin değiştirildiğini anlayamıyorum. Ea aynıdır, diğer ea arasında çakışmaları önlemek için sadece sihirli sayıyı değiştirin.

Bu arada, bir kez burada olduğunuzda, aşağıdaki kodda, siparişlerin tekrar gönderilmesini sağlamak için bir kod girmeniz gerekip gerekmediğini ve kapanış siparişleri için aynı bilet alınmadığını söyleyebilir misiniz?

 while (IsTradeContextBusy()) Sleep ( 10 );
          RefreshRates();       
                       
     BuyTicket= OrderSend ( Symbol (),OP_BUY,LotSize,Ask,RealSlippage, 0 , 0 , "Buy Order" ,MagicNumber, 0 ,Green);
     if (BuyTicket > - 1 )

Saygılarımla

Luis

 
luisneves :

Merhaba RaptorUK,

Hemen yanıt verdiğiniz için teşekkür ederiz.

Sağlanan bağlantıda buldum,

REASON_PARAMETERS 5 Giriş parametreleri kullanıcı tarafından değiştirildi.

Ama bu bilgiyle hiçbir şey yapamam (bildiğim kadarıyla). Hangi girdi parametrelerinin değiştirildiğini anlayamıyorum. Ea aynıdır, diğer ea arasında çakışmaları önlemek için sadece sihirli sayıyı değiştirin.

Sihirli Numarayı değiştirdiyseniz. . .

 extern int     MagicNumber    = 08012013 ;

. . . ve bu bir extern'dir, o zaman bir parametreyi değiştirmişsinizdir, EA yeniden başlar ve sebep 5 verir

EA'nızı birden fazla çiftte çalıştırmak istiyorsanız, 2 şey yapmanızı öneririm, önce EA'nızın bir çift üzerinde doğru çalışmasını sağlayın, çalıştığını anlamak için tamamen test edin. Ardından, ikinci olarak, bir Mutex tanıtın, böylece diğer EA aynı şeyi yapmaya çalışmadığında alım satımlarınız işlenir.

 
RaptorUK :

Sihirli Numarayı değiştirdiyseniz. . .

. . . ve bu bir haricidir, o zaman bir parametreyi değiştirmişsinizdir, EA yeniden başlatılır ve neden 5 verir

EA'nızı birden fazla çiftte çalıştırmak istiyorsanız, 2 şey yapmanızı öneririm, önce EA'nızın bir çift üzerinde doğru çalışmasını sağlayın, çalıştığını anlamak için tamamen test edin. Ardından, ikinci olarak, bir Mutex tanıtın, böylece diğer EA aynı şeyi yapmaya çalışmadığında alım satımlarınız işlenir.


Merhaba RaptorUk,

Hata ile ilgili cevabınız için teşekkür ederim, sanırım adı ve sihirli numarayı değiştirip, platformu kapatmadan ikinci ea'yı grafiğe koydum.

Zaman aşımı olarak bir hata döndüren kapanış sırasında başarısız olması gereken yeniden giriş emirleriyle ilgili diğer sorunla ilgili. bu yüzden kodun olduğu gibi sipariş kapatmayı mı yoksa sipariş göndermeyi mi yeniden gireceğini bilmiyorum.

Saygılarımla

Luis

 
luisneves :


Merhaba RaptorUk,

Hata ile ilgili cevabınız için teşekkür ederim, sanırım adı ve sihirli numarayı değiştirip, platformu kapatmadan ikinci ea'yı grafiğe koydum.

Zaman aşımı olarak bir hata döndüren kapanış sırasında başarısız olması gereken yeniden giriş emirleriyle ilgili diğer sorunla ilgili. bu yüzden kodun olduğu gibi sipariş kapatmayı mı yoksa sipariş göndermeyi mi yeniden gireceğini bilmiyorum.

Saygılarımla

Luis

Yürütme hata kodlarını okuyun ve kodunuzu burada verilen bilgilerle uyumlu hale getirin, örneğin . . .

ERR_TRADE_TIMEOUT 128 İşlem için zaman aşımına ulaşıldı. Yeniden denemeden önce ( en az 1 dakikalık süre içinde ), alım satım işleminin gerçekten başarılı olmadığından (yeni bir pozisyon açılmadığından veya mevcut emrin değiştirilmediğinden veya silinmediğinden veya mevcut pozisyonun mevcut olmadığından emin olunmalıdır) kapatılmadı)