Yardım: EA neden bir takası kapatmıyor? - sayfa 6

 
RaptorUK :

İşleve hiç ihtiyacınız yok. . . . . . ondan kurtulmak.



Merhaba Raptor,

EA karmaşık bir fonksiyondan çıktığı için bu fonksiyona ihtiyacım var ve bu fonksiyonu kapatma koşullarının birçok versiyonunda kullanıyorum.

Umarım beni anlıyorsun.

Y.

 
onewithzachy :

2. bölümü tekrar yapalım :(


Teşekkür ederim onewithzachy, ancak daha önce yanıtladığım gibi, birçok koşul sürümüyle kapatmak için bu işleve ihtiyacım var, Bu nedenle, özellikle tek kodlu bir komut olmadığı için, kapatma kodu komutlarını her koşula koymak çok karmaşık.

Teşekkürler,

Y.

 
RaptorUK :

Bunu yap . . . ( buradan tekrarlanır: https://www.mql5.com/en/forum/139543 )

. . . ve İşleve hiç ihtiyacınız yok.


Raptor, gördüğün gibi REQUATE durumlarının üstesinden gelmek için bu fonksiyona ihtiyacım var.

Y.

 
onewithzachy :

@ RaptorUK, en azından şu anda olduğumdan daha ilerisini düşünebilmek için kask takmayı düşünüyorum. Bu sürücülerin yaptığı, iyi düşünme değil mi? :D


@ skaboy, burada kibarca soruyorum, sakıncası yoksa, kodunuzu göndermek için SRC düğmesini kullanır mısınız? Bunu sadece bu başlıkta defalarca sorduk.

@crossy, İlk gönderinizin üzerinden neredeyse bir hafta geçmiş. Elbette anlıyorum ki şu anda 4000 satırla ilgili net bir kafanız olmayabilir, şu anda benim de burada benimki var. Hala anlamadıysanız, - ehm - o Kapat kodunu sizin için yazmamızı isteyebilirsiniz. Ancak yine de kodu biraz da olsa yazmanız ve bize göstermeniz gerekiyor. :D, RaptorUK'un hemen yukarıdaki kodu benimkinden daha doğrudan, bir düşünün ve sonra EA'nız ile devam edebilirsiniz.

Buraya kod yazma şekliniz ile - çok fazla gereksiz tekrarlanan kod - 4000 satırlık kodunuzun EA'nızı yavaşlatabileceği ve EA'nızı bir tık kaçırabileceği konusunda biraz endişelenmeniz gerekir. Birkaç noktayı kaçırmak sorun değil, ancak 10 pip uzakta kaçırırsan ne olur? ve muhtemelen 4000 satırınız hala sadece 400 satıra düşürülebilir. Kim bilir?, EA'nız, daha hafif ve daha hızlı hale gelir. :D


teşekkür ederim onewithzachy,

EA'm şu küçük hataya sahip:

1) İlgili bileti kapatır ve onu da arar.

2) Bu hata her yakın siparişte görünmüyor ve bazen iyi çalışıyor.

diğer 3.950 kod satırları için - çok iyi çalışıyorlar.

İlgili kod satırlarını tekrar ekliyorum.

Y.

...
   for ( int cnt = OrdersTotal ()- 1 ; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol ();
         OrderT   = OrderTicket ();
         OrderM   = OrderMagicNumber ();
         OrderTyp = OrderType ();
         OrderL   = OrderLots ();
      }   
       if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1, "LONG" ,OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P( string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt= 0 ; cntt< 20000 ; cntt++ )
   {
       if ( Check )
      {
         Check_Ini();
         return ;
      }
      Check = false;
       if ( TREN == "LONG" )
         PRC = MarketInfo (SYMB,MODE_BID);
       else
       if ( TREN == "SHORT" )
         PRC = MarketInfo (SYMB,MODE_ASK);
         
      Check = OrderClose (TICKET,LOTT,PRC,Slippage, Yellow );
   }
   return ;
}
//-----------------------------------------------+
 
crossy :



Merhaba Raptor,

EA karmaşık bir fonksiyondan çıktığı için bu fonksiyona ihtiyacım var ve bu fonksiyonu kapatma koşullarının birçok versiyonunda kullanıyorum.

Umarım beni anlıyorsun.

Y.

Başka bir yerden kopyalayıp yapıştırdığınız kodu anladığınızı sanmıyorum. . . ve hayır, alıntılar için değil. . . Aldığınız bir hatanın yeniden alıntı olup olmadığını kontrol bile etmiyorsunuz.
 
RaptorUK :
Başka bir yerden kopyalayıp yapıştırdığınız kopyayı anladığınızı sanmıyorum. . . ve hayır, alıntılar için değil. . . Aldığınız bir hatanın yeniden alıntı olup olmadığını kontrol bile etmiyorsunuz.


Raptor Yok, Aldığım hata şuydu: Bilet numarası bulunamadı. Ve size şunu söyleyebilirim ki, bilet bir saniye önce zaten kapanmıştı.

Bileti nasıl kapatıyor ve aramaya devam ediyor anlamıyorum...

 
crossy :


Bileti nasıl kapatıyor ve aramaya devam ediyor anlamıyorum...

İhtiyacın olmadığını söylediğim döngü yüzünden. . . ihtiyacınız olmayan fonksiyonda .

" Close_Single_P İşlevinde neden bir döngü var? " 1. sayfadaki 3. yazıdan

" neden döngü ? " sayfa 4, 2. yazıdan

 

Yanılıyor muyum yoksa bu fonksiyon KISA siparişleri hiç kapatmıyor mu?

...
   for ( int cnt = OrdersTotal ()- 1 ; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol ();
         OrderT   = OrderTicket ();
         OrderM   = OrderMagicNumber ();
         OrderTyp = OrderType ();
         OrderL   = OrderLots ();
      }   
       if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1, "LONG" ,OrderT,OrderL);
                               ^^^^ - You always pass LONG to variable TREN, so variable PRC (below) is always equal taken from LONG, but NEVER from SHORT.

//-----------------------------------------------+
void CLOSE_Single_P( string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt= 0 ; cntt< 20000 ; cntt++ )
   {
       if ( Check )
      {
         Check_Ini();
         return ;
      }
      Check = false;
       if ( TREN == "LONG" )
         PRC = MarketInfo (SYMB,MODE_BID);
       else
       if ( TREN == "SHORT" )
         PRC = MarketInfo (SYMB,MODE_ASK);
         ^^^   Never executed
         
      Check = OrderClose (TICKET,LOTT,PRC,Slippage, Yellow );
   }
   return ;
}
//-----------------------------------------------+
 
Waidas :

Yanılıyor muyum yoksa bu fonksiyon KISA siparişleri hiç kapatmıyor mu?


Haklısın. Ancak bu, UZUN ve KISA'yı kapatan EA'dan sadece küçük bir parça.

Teşekkürler.

 
RaptorUK :

İhtiyacın olmadığını söylediğim döngü yüzünden. . . ihtiyacınız olmayan fonksiyonda.

" Close_Single_P İşlevinde neden bir döngü var? " 1. sayfadaki 3. yazıdan

" neden döngü ? " sayfa 4, 2. yazıdan


Raptor, Haklıydın ve döngüleri ayarladım, yani fonksiyon artık döngüsüz.

tekrar buraya ekliyorum.

Y.

...
   for ( int cnt = OrdersTotal ()- 1 ; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol ();
         OrderT   = OrderTicket ();
         OrderM   = OrderMagicNumber ();
         OrderTyp = OrderType ();
         OrderL   = OrderLots ();
      }   
       if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1, "LONG" ,OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P( string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt= 0 ; cntt< 20000 ; cntt++ )
   {
       if ( Check )
      {
         Check_Ini();
         return ;
      }
       if ( TREN == "LONG" )
         PRC = MarketInfo (SYMB,MODE_BID);
       else
       if ( TREN == "SHORT" )
         PRC = MarketInfo (SYMB,MODE_ASK);
         
      Check = OrderClose (TICKET,LOTT,PRC,Slippage, Yellow );
   }
   return ;
}
//-----------------------------------------------+
Neden: