Yardım: EA neden bir takası kapatmıyor?

 

merhaba arkadaşlar,

Yardımınıza ihtiyaçım var.

Sürecinin bir parçasının bir işlevi kullanarak bir ticareti kapatması gereken bir EA oluşturdum. İşte ilgili kodun satırları.

Bazıları bana neden EA'nın takası kapatmadığına yardımcı olabilir mi? Teşekkür ederim.

(Belki, ana bölümde ORDERSELECT kullanırken, işlevde de ORDERSELECT kullanamaz ????)

for(int cnt=0; cnt < OrdersTotal(); cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol() == Pair && OrderType() == OP_BUY )

{

if ( MarketInfo(Çift,MODE_BID) >= Open_P_BUY + MarketInfo(Çift,MODE_POINT)*faktör*TP )

{

CLOSE_Single_P(Çift,"UZUN", OrderTicket(), OrderLots());

}

}

}

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

void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)

{

int Kod, işaret;

çift ÇHC;

if ( TREN == "UZUN")

Kod = 0;//OP_BUY

başka

if (TREN == "KISA" )

Kod = 1;//OP_SELL

for ( int k=0; k < OrdersTotal(); k++ )

{

OrderSelect(k, SELECT_BY_POS, MODE_TRADES);

if( OrderSymbol() == SEMBOL && OrderType() == Kod && OrderLots() == LOTT && OrderTicket() == BİLET )

{

if ( OrderType() == OP_BUY )

ÇHC = MarketInfo(OrderSymbol(),MODE_BID);

başka

if ( OrderType() == OP_SELL )

ÇHC = MarketInfo(OrderSymbol(),MODE_ASK);

SiparişKapat(Bilet,LOTT,PRC,Kayma,Sarı);

kırmak;

}

}

dönüş;

}

 

Daha iyi okumak için kodunuzu görüntülemek için SRC düğmesini kullanın, lütfen :)

OrderSelect() yanlış bir şekilde kodlanmış. Kodunuzu bununla karşılaştırın. O zaman hala sorun yaşıyorsanız veya yaşamıyorsanız tekrar yazın :)

   for ( int cnt= 0 ; cnt< OrdersTotal (); cnt++)
     {
       if ( OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == true &&
           OrderSymbol ()==Pair && 
           OrderType ()==OP_BUY)
          {
          // code to close
          }
      }
 
crossy :

merhaba arkadaşlar,

Yardımınıza ihtiyaçım var.

Sürecinin bir parçasının bir işlevi kullanarak bir ticareti kapatması gereken bir EA oluşturdum. İşte ilgili kodun satırları.

Bazıları bana neden EA'nın takası kapatmadığına yardımcı olabilir mi? Teşekkür ederim.

Bir döngünüz olduğunda ve (Bekleyen) siparişleri kapatırken veya silerken, yukarı DEĞİL , geri saymanız ZORUNLUDUR . . .

Close_Single_P İşlevinde neden bir döngü var? tek bir siparişi kapatmak için tasarlanmadı mı? Fonksiyonu çağırdığınızda sembol, bilet numarası, sipariş tipi ve pozisyon büyüklüğünü iletirsiniz. . . siparişi kapatmak için ihtiyacınız olan tek şey bu. . . neredeyse, kapatmak için fiyata ihtiyacınız var ve bunun için OrderClosePrice()'ı kullanabilirsiniz ve sonra bunun bir Buy veya Sell olup olmadığı konusunda endişelenmenize gerek yok. . . aslında, sadece Function'dan kurtulun ve bu satırı fonksiyon çağrısı yerine kullanın. . .

 OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), Slippage, Yellow );

. . . bu arada, Slippage'i nerede ayarlıyorsunuz? ve 4/5 Digit Brokers için ödeme yapıyor musunuz?

Order fonksiyonlarını kullandığınızda bir değer döndürürler. . . bu dönüş değeri, işlevin çalışıp çalışmadığını size söyler. . . bu dönüş değerini kullanmayı öğrenin ve size bir sorun olduğunu söylerse, ilgili bilgileri günlüklere bildirmek için bir Print deyimi kullanın. . . . o zaman tahmin etmek yerine neyin yanlış gittiğini bileceksin. . . .

Siparişiniz kapatılmalı mı? bunu doğruladınız mı? . .

 if ( MarketInfo (Pair,MODE_BID) >= Open_P_BUY + MarketInfo (Pair,MODE_POINT)*factor*TP )

. . . doğru ?

Neden bu satır doğruysa yürütülecek bir print deyimi eklemiyorsunuz. . . o zaman olup olmadığını bileceksin. . .

 if ( MarketInfo (Pair,MODE_BID) >= Open_P_BUY + MarketInfo (Pair,MODE_POINT)*factor*TP )
   {
   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 . . 
   }
 
onewithzachy :

Daha iyi okumak için kodunuzu görüntülemek için SRC düğmesini kullanın, lütfen :)

O halde GetLastError()'un dönüşü nedir?


Kodda yaklaşık 4.000 satır var...

Her neyse, herhangi bir hata masajı almıyorum.

 
crossy :


Kodda yaklaşık 4.000 satır var...

Her neyse, herhangi bir hata masajı almıyorum.

TÜM kodunuzu göndermek zorunda değilsiniz. . . ancak HERHANGİ BİR kod gönderirken lütfen SRC düğmesini kullanın. . .

Günlüğe bildirmediğiniz için herhangi bir hata mesajı almazsınız. . . dönüş değerlerini kontrol etmeli ve hataları bildirmelisiniz.

 
RaptorUK :

Bir döngünüz olduğunda ve (Bekleyen) siparişleri kapatırken veya silerken, yukarı DEĞİL , geri saymanız ZORUNLUDUR . . .

Close_Single_P İşlevinde neden bir döngü var? tek bir siparişi kapatmak için tasarlanmadı mı? Fonksiyonu çağırdığınızda sembol, bilet numarası, sipariş tipi ve pozisyon büyüklüğünü iletirsiniz. . . siparişi kapatmak için ihtiyacınız olan tek şey bu. . . neredeyse, kapatmak için fiyata ihtiyacınız var ve bunun için OrderClosePrice()'ı kullanabilirsiniz ve sonra bunun bir Buy veya Sell olup olmadığı konusunda endişelenmenize gerek yok. . . aslında, sadece Function'dan kurtulun ve bu satırı fonksiyon çağrısı yerine kullanın. . .

. . . bu arada, Slippage'i nerede ayarlıyorsunuz? ve 4/5 Digit Brokers için ödeme yapıyor musunuz?

Order fonksiyonlarını kullandığınızda bir değer döndürürler. . . bu dönüş değeri, işlevin çalışıp çalışmadığını size söyler. . . bu dönüş değerini kullanmayı öğrenin ve size bir sorun olduğunu söylerse, ilgili bilgileri günlüklere bildirmek için bir Print deyimi kullanın. . . . o zaman tahmin etmek yerine neyin yanlış gittiğini bileceksin. . . .

Siparişiniz kapatılmalı mı? bunu doğruladınız mı? . .

. . . doğru ?

Neden bu satır doğruysa yürütülen bir print deyimi eklemiyorsunuz. . . o zaman olup olmadığını bileceksin. . .


Bilge teklifleriniz için teşekkürler Raptor. HER ZAMAN, bana akıllıca ve net bir şekilde yardım ediyorsun.

Az önce önerdiğiniz şeyi deneyeceğim.

En iyi dileklerimle.

 

Bileti zaten seçtiniz, aynı bileti bulmak için neden ikinci bir orderSelect döngüsünden geçiyorsunuz?

Neden OrderClose dönüş değerini kontrol etmiyor ve NEDEN'i bulmak için hatayı yazdırmıyorsunuz?

 
WHRoeder :

Bileti zaten seçtiniz, aynı bileti bulmak için neden ikinci bir orderSelect döngüsünden geçiyorsunuz?

Neden OrderClose dönüş değerini kontrol etmiyor ve NEDEN'i bulmak için hatayı yazdırmıyorsunuz?


Pekala arkadaşlar, çabalarınız için teşekkürler.

Bazı değişiklikler yaptım ve WHRoeder yorumunu görene kadar hiçbir şey yardımcı olmadı.

Sen dahisin, bence haklısın.

Pazartesi günü değiştirilmiş EA'yı deneyeceğim.

İyi hafta sonları.

 
crossy :


Pekala arkadaşlar, çabalarınız için teşekkürler.

Bazı değişiklikler yaptım ve WHRoeder yorumunu görene kadar hiçbir şey yardımcı olmadı.

Sen dahisin, bence haklısın.

Pazartesi günü değiştirilmiş EA'yı deneyeceğim.

İyi hafta sonları.


Pekala, arkadaşlarım,

Tüm önerilerinizi yaptım - ve EA başarısız oldu.

Başka fikir var mı?

 

Hadi tekrar yapalım

   #include "..\libraries\stdlib.mq4" // drag and drop from libraries to very top of your code
  
   for ( int cnt = OrdersTotal (); cnt >= 0 ; cnt--)   // from RaptorUK, count it down to zero 
     {
     if ( OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == true && OrderSymbol () == Pair) // this is how to write OrderSelect()
        {
         if ( OrderType ()== OP_BUY) // the code below is to close buy position only
          {
          
           //---
           if ( MarketInfo (Pair,MODE_BID) >= Open_P_BUY + MarketInfo (Pair,MODE_POINT) * factor * TP) // from RaptorUK, is this statemement true ?
             {
               //CLOSE_Single_P(Pair,"LONG",OrderTicket(),OrderLots()) // From RaptorUK & WHRoeder, you don't have to do OrderSelect() twice
             Print ( "Trying to close buy position : " , OrderTicket ());                            
             if (! OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), Slippage, Yellow )) // From Raptor UK, are you doing the slippage correctly ?
                 Print ( "failed to close buy position " , ErrorDescription( GetLastError ())  ); 
             }
             else
             {
             Print ( "Not qualify to close buy position " , OrderTicket ()); // from RaptorUK, is this statemement true ?, if not this print will tell you
             }
           //---
             
           }
           /*
           else
           {
           if (OrderType() == OP_SELL)
              {
              
              }
           }
           */
        }
     }
      

Valentino Rossi'nin MotoGP Le Mans ikinci podyumunu okurken, umarım bunu doğru yazmışımdır :)

 
onewithzachy :

Hadi tekrar yapalım

Valentino Rossi'nin MotoGP Le Mans ikinci podyumunu okurken, umarım bunu doğru yazmışımdır :)


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.