yardım edin lütfen [çözüldü]

 

mql4'te yeniyim ve bu kod birden fazla sipariş açıyor, bundan nasıl kaçınabilirim? kapanana kadar sadece 1 sipariş açmalı,

bunu nasıl yapabilirim?

teşekkürler

void OnTick ()
  {

  
   double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
   double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

  
   if ( MathMin (up,down) < Bid )
  

   OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
    
    
  }
  
 
void OnTick()
  {

  if(OrdersTotal()==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMin (up,down) < Bid )

     OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
    }
    
  }
 
çok teşekkür ederim efendim, beni çevrelere göndermemek konusunda çok katıydınız.
 

Bu bir çözüm ama devam ederseniz öğreneceğiniz gibi en iyi çözüm değil.

Ancak bu noktada size yardımcı olabilir.

 
Marco vd Heijden :

Bu bir çözüm ama devam ederseniz öğreneceğiniz gibi en iyi çözüm değil.

Ancak bu noktada size yardımcı olabilir.

evet konudaki sorunu çözdü ama kapandığında yine bulutun üzerindeyse yeni bir düzen oluşturuyor. Bu yeni sorunu çözmeme yardım eder misin?

İlkini başarıyla kapattıktan sonra tüm yeni siparişler nasıl engellenir?

 

Peki bir bayrak oluşturabilirsiniz.

bool order= 0 ;


Ardından, sipariş verildiğinde değeri bir olarak ayarlayabilirsiniz.

void OnTick ()
  {

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMin (up,down) < Bid )

     OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
     order= 1 ;
    }
    
  }

Ancak size orderend fonksiyonunun dönüş değerini kontrol etmeniz gerektiği uyarısını verecektir.

void OnTick ()
  {

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMin (up,down) < Bid )

     int ticket= OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
      {
       if (ticket!=- 1 )
        {
         order= 1 ;
        }
      }
    }
  }

Neden siparişin başarıyla verilip verilmediğine bağlı olarak bayrağı ayarlamıyorsunuz?

Bu durumda siparişiniz başarısız olursa denemeye devam edecektir.

 
mrluck1 :

evet konudaki sorunu çözdü ama kapandığında yine bulutun üzerindeyse yeni bir düzen oluşturuyor. Bu yeni sorunu çözmeme yardım eder misin?

İlkini başarıyla kapattıktan sonra tüm yeni siparişler nasıl engellenir?

Marco'nun zaten ima ettiği gibi, muhtemelen başka sorunlarla karşılaşacaksınız.

Ya başka bir sembolde açık bir emir varsa?

Ya başka bir EA tarafından kontrol edilen siparişler varsa?

Ya bekleyen siparişler varsa?

İlkini kapattığınızda tetikleyici hala etkinse ne olur?

İkincisine yanıt olarak, Marco'nun önerdiği gibi bir bayrak kullanabilirsiniz. Bayrağı ne zaman sıfırlayacağınıza karar vermeniz gerektiğini unutmayın, yoksa EA bir daha asla takas yapmaz.

Alternatif olarak, bulutun altından/içinden bulutun üstüne bir çapraz/durum değişikliği olup olmadığını kontrol edebilirsiniz.

 

kodunu girdim ve biletin açıklanmadığını söylüyor, bu yüzden ilan ettim, ancak şimdi kod birden fazla sipariş açıyor, tıpkı eskisi gibi, şimdi nasıl ilerlenir?

void OnTick ()
  {

bool order= 0 ;
int ticket;

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMax (up,down) < Bid )

     int ticket= OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
      {
       if ( ticket!= 1 )
        {
         order= 1 ;
        }
      }
    }
  }


Ve dürüst olmak gerekirse: Bu örnekte, bu bir senaryo, yani sadece 1 takas tamam
 
mrluck1 :

kodunu girdim ve biletin açıklanmadığını söylüyor, bu yüzden ilan ettim, ancak şimdi kod birden fazla sipariş açıyor, tıpkı eskisi gibi, şimdi nasıl ilerlenir?

void OnTick ()
  {

bool order= 0 ;
int ticket;

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMax (up,down) < Bid )

     int ticket= OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
      {
       if ( ticket!= 1 )
        {
         order= 1 ;
        }
      }
    }
  }


Muhtemelen değişkenlerin kapsamı hakkında okumanıza yardımcı olacaktır.

Her tik sırasının değerine ne olur?

 

Tamam, bileti boole bayrağıyla ilan ediyorsunuz.

bool order= 0 ;
int ticket;

Ve daha sonra

void OnTick ()
  {

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMax (up,down) < Bid )

    ticket= OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
      {
       if ( ticket>0)
        {
         order= 1 ;
        }
      }
    }
  }

Onları OnTick()'te bildiremezsiniz çünkü değerleri elbette her tikte sıfırlanacaktır.

Ayrıca, OrderSend'in ya bilet numarasını döndürdüğünü ya da başarısız olursa -1 eksi bir olduğunu unutmayın.

 

Koydum

bool düzeni ve

int bilet

global değişkenlerde ve kodun geri kalanında OnTick'te, ancak şimdi hala herhangi bir giriş yapmıyor