Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 30

 
spoiltboy :

Selamlar. Buralara sordum ama henüz cevap bulamadım. Söyle bana, lütfen, neden böyle bir kayıtla

if (x!=maxpr1){x=maxpr1; OrderDelete(biletD);}

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}

sürekli hata veriyor

: OrderDelete işlevi için geçersiz bilet

: Sipariş Silme hatası 4051

kılavuza göre o

Geçersiz fonksiyon parametre değeri

parametreler aynı gibi görünse de.

Her ne kadar koşulu kaldırırsanız ve yalnızca bırakırsanız

OrderDelete(biletD);

OrderDelete(ticketUP);

bu başarıyla siler (ancak bir şartla gereklidir). Neyi yanlış yapıyorum? İşte tam olarak:

OrderSelect aracılığıyla seçmeniz gerektiğinden, ticketD değeriniz kaybolur ve büyük olasılıkla bir bilet yerine bir çeşit hile vardır, yazdırmayı ve karşılaştırmayı deneyin. Ve genel olarak, bu yazı tarzı saçmalık
 
Vitaly Muzichenko :
OrderSelect aracılığıyla seçmeniz gerektiğinden, ticketD değeriniz kaybolur ve büyük olasılıkla bir bilet yerine bir çeşit hile vardır, yazdırmayı ve karşılaştırmayı deneyin.

Silme işlevinin koşul tarafından tetiklenmesi nedeniyle mi, değer kayboluyor mu? Şöyle yazmaya çalıştım:

if (x!=maxpr1){x=maxpr1; OrderDelete(biletD);}

OrderDelete( biletUP );

"ticketD" için yaklaşan koşulda aynı hataları yazar ve " biletUP" siparişi her onayda başarıyla silinir.

 
Vitaly Muzichenko :
Genel olarak, bu yazı tarzı saçmalık
Yeni başladım, yorumlarsanız sevinirim.
 
spoiltboy :
Yeni başladım, yorumlarsanız sevinirim.
bakabilmeniz için kodu "SRC" üzerinden yapıştırın
 
Renat Akhtyamov :
bakabilmeniz için kodu "SRC" üzerinden yapıştırın
extern int pointsl= 100 , pointtp= 100 , MagicB= 1111 , MagicS= 2222 , bars= 10 ;   extern double lotB= 0.1 , lotS= 0.1 ;
double slB, tpB, slS, tpS;   double x= 0 , z= 0 ;


void OnTick ()  
{
double maxpr1=- 9999 ; double minpr1= 9999 ;

for ( int shift1= 0 ; shift1<bars; shift1++)
{ double i= iHigh ( Symbol (), PERIOD_CURRENT , shift1);
if (i>maxpr1){maxpr1=i;}}

for ( int shiftA1= 0 ; shiftA1<bars; shiftA1++)
{ double y= iLow ( Symbol (), PERIOD_CURRENT , shiftA1);
if (y<minpr1) {minpr1=y;}}

if (BuyLimitCount()== 0 && BuyCount()== 0 ){
slB= NormalizeDouble (minpr1-pointsl* Point , 5 );
tpB= NormalizeDouble (minpr1+pointtp* Point , 5 );
int ticketUP= OrderSend ( Symbol (), OP_BUYLIMIT , lotB, minpr1, 3 , slB, tpB, "" , MagicB, 0 , Red);
if (ticketUP==- 1 ) Print ( "ERROR OP_BUY" ); else Print ( "OP_BUY OK" );}

if (SellLimitCount()== 0 && SellCount() == 0 ){
slS= NormalizeDouble (maxpr1+pointsl* Point , 5 );
tpS= NormalizeDouble (maxpr1-pointtp* Point , 5 );
int ticketD= OrderSend ( Symbol (), OP_SELLLIMIT , lotS, maxpr1, 3 , slS, tpS, "" , MagicS, 0 , Blue);
if (ticketD==- 1 ) Print ( "ERROR OP_SELL" ); else Print ( "OP_SELL OK" );}

if (x!=maxpr1){x=maxpr1; OrderDelete (ticketD);}
OrderDelete (ticketUP);


double maxpr=- 9999 ; double minpr= 9999 ;

for ( int shift= 0 ; shift<bars; shift++)
{ double e= iHigh ( Symbol (), PERIOD_CURRENT , shift);
if (e>maxpr){maxpr=e;}}

for ( int shiftA= 0 ; shiftA<bars; shiftA++)
{ double r= iLow ( Symbol (), PERIOD_CURRENT , shiftA);
if (r<minpr) {minpr=r;}}

string a;
if (bars== 1 )a= "bar: " ;
else a= IntegerToString (bars, 1 ) + " bar's: " ;
Comment ( "Last " , a, "max " , DoubleToStr (maxpr, 5 ), ", min " , DoubleToStr (minpr, 5 ), "." );
}

int BuyLimitCount(){
int count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true ){
if ( OrderMagicNumber ()==MagicB){
if ( OrderType ()== OP_BUYLIMIT )
count++;}}} return (count);}

int BuyCount(){
int count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true ){
if ( OrderMagicNumber ()==MagicB){
if ( OrderType ()== OP_BUY )
count++;}}} return (count);}

int SellLimitCount(){
int count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true ){
if ( OrderMagicNumber ()==MagicS){
if ( OrderType ()== OP_SELLLIMIT )
count++;}}} return (count);}

int SellCount(){
int count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true ){
if ( OrderMagicNumber ()==MagicS){
if ( OrderType ()== OP_SELL )
count++;}}} return (count);}
 
spoiltboy :

Silme işlevinin koşul tarafından tetiklenmesi nedeniyle mi, değer kayboluyor mu? Şöyle yazmaya çalıştım:

if (x!=maxpr1){x=maxpr1; OrderDelete(biletD);}

OrderDelete( biletUP );

"ticketD" için yaklaşan koşulda aynı hataları yazar ve " biletUP" siparişi her onayda başarıyla silinir.

Bir siparişin olup olmadığını kontrol etmek gerekiyor ve böyle bir bileti olan varsa onu sileriz, değilse hiçbir şey yapmıyoruz. Size olan şey, siparişin zaten silinmiş olması ve tekrar silmeye devam etmenizdir.
 
Vitaly Muzichenko :
Bir siparişin olup olmadığını kontrol etmek gerekiyor ve böyle bir bileti olan varsa onu sileriz, değilse hiçbir şey yapmıyoruz. Size olan şey, siparişin zaten silinmiş olması ve tekrar silmeye devam etmenizdir.

Bu girişte, ticketUP bileti ile bir emir önce açılır ve ardından her tikte silinir ve tikcetD emri, ilgili koşul oluştuğunda silme hatası verir. Bir dergiden.

Yoksa bir şeyi karıştırıyor muyum?

 
spoiltboy :

ama ikisinin alt satırında hiç de gereksiz değil mi?

if (x!=maxpr1){x=maxpr1; OrderDelete (ticketD);}
OrderDelete (ticketUP); //лишняя?

Gereksiz değilse, silinme koşulu nerede?

Kodun bu versiyonunda, bence her tikte gecikmeyi ortadan kaldırmaya çalışıyor.

Üstelik erteleme biletinin numarası da belli değil.

Bu size bir hata döndürür.

 
spoiltboy :

Bu girişte, ticketUP bileti ile bir emir önce açılır ve ardından her tikte silinir ve tikcetD emri, ilgili koşul oluştuğunda silme hatası verir. Bir dergiden.

Yoksa bir şeyi karıştırıyor muyum?

bu doğru

o zaman soru ne

 
Renat Akhtyamov :

bu doğru

o zaman soru ne

Bu farklı siparişler içindir. Birini koşula göre silme, diğerini koşulsuz silme işlevi.

Soru, benim durumumda neden koşulsuzken silme işlevinin başarılı bir şekilde çalıştığı ve onu bir koşula koyarsanız, koşul oluştuğunda bir hata verdiğidir.