Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 30
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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.
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.
Genel olarak, bu yazı tarzı saçmalık
Yeni başladım, yorumlarsanız sevinirim.
bakabilmeniz için kodu "SRC" üzerinden yapıştırın
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);}
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.
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?
ama ikisinin alt satırında hiç de gereksiz değil mi?
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.
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
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.