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

 
crossy :


Burada Orderselect YANLIŞ ise, EA kod satırına nasıl geri dönebilir: for(int cnt=OrdersTotal() ; cnt > 0; cnt-- )

???

Devam kullanarak döngüdeki bir sonraki değere gidebilirsiniz. . . veya break ile döngüden çıkın. . . her birine ilişkin belgeler için bağlantıları tıklayın.
 
crossy :

Burada Orderselect YANLIŞ ise, EA kod satırına nasıl geri dönebilir: for(int cnt=OrdersTotal() ; cnt > 0; cnt-- )


???

O kod yanlış. . . .

cnt'nin OrdersTotal() - 1'den başlaması ve cnt >= 0'a düşürmesi gerekir. . . . ilk giriş 0 değil 1

Bu yüzden kodu görmek istedim. . . ve sorunu tanımlamaya yetecek kadar gösterdiniz. . . muhtemelen. ;-)

 
RaptorUK :

O kod yanlış. . . .

cnt'nin OrdersTotal() - 1'den başlaması ve cnt >= 0'a düşürmesi gerekir. . . . ilk giriş 0 değil 1

Bu yüzden kodu görmek istedim. . . ve sorunu tanımlamaya yetecek kadar gösterdiniz. . . muhtemelen. ;-)


Çok doğru. Teşekkürler Wizeman!
 
crossy :

Çok doğru. Teşekkürler, Wizeman!


Ve başka bir fikir:

Çok şartım varsa yazabilirsiniz:

Eğer( X>b && B>S && NB<F......)

{

BBB= 5;

}fe

Burada EA, parantez içindeki her koşulu hesaplamak zorundadır.

Ancak, verimlilik arıyorsanız (4.000 kod satırı...) şunları yapmayı tercih ederim:

(X>b) ise

{

(B>S) iken

{

(NB<F..) iken

{

BBB=5;

}

kırmak;

}

kırmak;

}

2 varyasyon aynı mı?

Y.

 

crossy, kodu yazarken lütfen SRC butonunu kullanın, çok daha okunaklı olacaktır.

Yani bu şekilde gösterilecek

   //--- first code
   If (X>b && B>S && NB<F......)
     {
      BBB= 5 ;
     }
   
   // --- second code
   If (X>b)
     {
       while (B>S)
        {
         while (NB<F..)
           {
            BBB= 5 ;
           }
         break ;
         }
       break ;
     }

mql4 https://book.mql4.com/operators/assign içinde "if, while ve for" döngüsü hakkında açıklama var

İkinci kodda, break kullandığınız için sorun değil, ancak bu sadece BBB = 5 elde etmenin uzun bir yolu, ilk kodu tercih ediyorum, daha az kaynak kullanıyor

 
crossy :


Ve başka bir fikir:

Çok şartım varsa yazabilirsiniz:

Eğer( X>b && B>S && NB<F......)

{

BBB= 5;

}fe

Burada EA, parantez içindeki her koşulu hesaplamak zorundadır.

Ancak, verimlilik arıyorsanız (4.000 kod satırı...) şunları yapmayı tercih ederim:

while'ı bu şekilde kullanarak kendinizi sonsuz bir döngüde bulabilirsiniz. . .
 
İkinize de teşekkürler!.
 
onewithzachy :

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 değilseniz tekrar yazın :)


onewithzachy'ye özel teşekkürler,

ORDERSELECT'in yakalayamayacağını bilmiyordum, bu yüzden bilinmeyen hatalar olabilir.

4016 kod satırı olan kodum neredeyse 4500 satır oldu - ama hatasız.

Hepinize teşekkürler arkadaşlar.

Y.

 

merhaba arkadaşlar,

Burada uzun bir yolculuktan sonra, EA'mla iyi bir avantaj elde ettim, ancak aşağıdaki gibi bir sorunum daha var:

Aşağıdaki kod satırına sahibim:

CLOSE_Single_P(Çift1,"UZUN",SiparişT,SiparişL);

gibi:

Çift1 Semboldür,

"UZUN" uzun bir ticaretin işaretidir,

OrderT , sipariş Bilet numarasıdır,

OrderL , sipariş lotu boyutudur.

İşlev aşağıdaki gibidir:

void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
çift ÇHC;
bool Kontrol = yanlış;
için ( int cntt=0; cntt<20000; cntt++ )
{
eğer (Kontrol et)
{
Check_Ini();
dönüş;
}
for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
{
if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES))
{
Kontrol = yanlış;
if ( TREN == "UZUN")
ÇHC = MarketInfo(SYMB,MODE_BID);
başka
if (TREN == "KISA" )
ÇHC = MarketInfo(SYMB,MODE_ASK);

Kontrol = SiparişKapat(TICKET,LOTT,PRC,Kayma,Sarı);
eğer (Kontrol et)
kırmak;
}
}
}
dönüş;
}

SORUNUM: EA bazen ticareti çok iyi kapatır, ancak bazen EA tarde'yi kapatır ANCAK zaten kapalı olmasına rağmen onu kapatmak için bileti aramaya devam ediyor.

("Bilinmeyen bilet numarası.." hatası alıyorum.

Sanırım mantık hatası var.

Nazik yardımın için teşekkür ederim.

Y

 

Lütfen . . . . . .


Neden: