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

 
crossy :

Tamam İşte aynı hatayı aldığım değiştirilmiş versiyon.

Y.

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

 

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

 ...
   for ( int cnt = OrdersTotal ()- 1 ; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         // Do the selection and OrderClose() INSIDE HERE ..., please
         
         
         /*
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
         */
      }   
       // if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... ) // this selection goes up there
    
         //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); // close it up there, and you have to rewrite the parameters
   }
   */
 

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

 if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
   {
   Print ( "Trying to close Order: " , OrderTicket ());                             // <---- tells you that the   if  returned true
   if ( ! OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), Slippage, Yellow )
       Print ( "OrderClose failed, error # " , GetLastError ());                           // <------- reports the error if the OrderClose failed . . 
   } 

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

 
onewithzachy :

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


Exuss'unuzu istiyorum, lütfen, tatilim olduğu için, Pazar gecesi döneceğim.

Önerdiğiniz şeyi yapacağım ve başarılı olacağımı umuyorum.

İkinize de teşekkürler.

Y.

 
crossy :


Exuss'unuzu istiyorum, lütfen, tatilim olduğu için, Pazar gecesi döneceğim.


Tamam, Tatilinizin tadını çıkarın :-)
 
crossy :


Exuss'unuzu istiyorum, lütfen, tatilim olduğu için, Pazar gecesi döneceğim.

Önerdiğiniz şeyi yapacağım ve başarılı olacağımı umuyorum.

İkinize de teşekkürler.

Y.

iyi eğlenceler :D

Bu pazar izlemem gereken F1 Monaco var :D

 
onewithzachy :

iyi eğlenceler :D

Bu Pazar izlemem gereken F1 Monaco var :D

Ve yarın, FP3 ve Eleme ;-)
 
crossy :


teşekkürler onewithzachy,

Öncelikle şu konuda küçük bir hatanız olduğunu düşünüyorum:

for(int cnt = OrdersTotal() -1 ; cnt >= 0; cnt--)

Yeşil ve kalın düzeltmeyi eklemelisiniz.

Ancak, aşağıdaki satırın bize nasıl yardımcı olabileceğini anlamıyorum?

#include "..\libraries\stdlib.mq4"

Teşekkürler, Y.

Bunu çok daha basit buluyorum ve benim için çalışıyor:

//------------------------------------------------+

geçersiz CheckForClose()
{
int i, res, order_id;

//-------+
for(i=0;i<SiparişToplam();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==yanlış) ara;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) devam ediyor;
order_id= OrderTicket();


//---sondaki ve kapanış
if (OrderType() == OP_BUY)
{
if (Is_Close_Buy==true) //-- kapanma sinyali
{
RefreshRates();// Yenileme oranları
res= 0;
res= OrderClose(order_id,Lots,Bid,3,Gold);
while(IsTradeAllowed() == false) Sleep(100); //---sunucudan yanıt almak için biraz bekleyin
if (res>0){
PlaySound("cash_register.wav");} //--mutlu ses, umarım para kazanmak !!!!
eğer (res<0)
{
PlaySound("gıcırtı.wav");
Print("OrderSend # hatasıyla başarısız oldu",GetLastError());
dönüş(0);
}
dönüş;
}
}//son kapat Satın Alma Siparişi kontrolü
//---
if (OrderType() == OP_SEL)
{
if (Is_Close_Sell==true) //--kapanacak sinyal
{
RefreshRates();// Yenileme oranları
res= 0;
res= OrderClose(order_id,Lots,Ask,3,Gold);
while(IsTradeAllowed() == false) Sleep(100); //---sunucudan yanıt almak için biraz bekleyin
if (res>0){
PlaySound("cash_register.wav");}
if(res<0)
{
PlaySound("gıcırtı.wav");
Print("OrderSend # hatasıyla başarısız oldu",GetLastError());
dönüş(0);
}
dönüş;
}
}//son kapat Satış Emri kontrolü
}//--------+
dönüş;
}

//----------------------------------------------------------+

 
RaptorUK :
Ve yarın, FP3 ve Eleme ;-)

@ 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

 
skaboy :

Bunu çok daha basit buluyorum ve benim için çalışıyor:


Kapatılması gereken birden fazla siparişiniz varsa çalışmaz. . . bunu okuyun ve öğrenin: Döngüler ve Emirleri Kapatma veya Silme
Neden: