MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 15

 
Vitalie Postolache :
Döngüler, OrdersTotal () -1'den 0'a kadar ters sırada sayılmalıdır.
Bir döngüde kapanırken.
 
Vitalie Postolache :
Döngüler, OrdersTotal () -1'den 0'a kadar ters sırada sayılmalıdır.
Bunlar Kim'in işlevleri ve sorunsuz çalışıyorlar, sorun başka bir şey
 
Bu, bir sembolde yanlışlıkla birkaç danışmanı açtığım anlamına geliyor, çoğu böyle düştü.
 
Neron_76 :
Merhaba! Robotumu bir demo hesabına koydum, çalıştığı ikinci ay. Bugün terminali açıyorum, ondan önce bir sipariş verilmiş olmasına rağmen, bir sinyale iki sipariş verildi. Sipariş sayısında bir sınırlama vardır. Nedeni ne olabilir?

Koda bakılırsa, ikinci emriniz bir piyasa emri değil, bekleyen bir emirdir.

Açık emir sayısı limiti sadece piyasa emirleri için geçerlidir.

Bu nedenle, hata yoktur ve dolayısıyla sorun yoktur.

 
Renat Akhtyamov :

Koda bakılırsa, ikinci emriniz bir piyasa emri değil, bekleyen bir emirdir.

Açık emir sayısı limiti sadece piyasa emirleri için geçerlidir.

Bu nedenle, hata yoktur ve dolayısıyla sorun yoktur.

Kısıtlama, açık ve bekleyen siparişler için geçerlidir. Bir buçuk ay boyunca bu benim için ikinci vaka, geri kalanı olması gerektiği gibi sergileniyor.
 
Neron_76 :
Kısıtlama, açık ve bekleyen siparişler için geçerlidir. Bir buçuk ay boyunca bu benim için ikinci vaka, geri kalanı olması gerektiği gibi sergileniyor.

Şu şekilde deneyin:

if (NumberOfPositions(Symb,- 1 ,Magik_number)== 0 && NumberOfOrders(Symb,- 1 ,Magik_number)== 0 && Delta_Buy< Low [ 1 ] && sar> Close [ 1 ]) {
  SetOrder( NULL , OP_BUYSTOP ,Lts,sar,sar-SL* Point (),sar+TP* Point (),Magik_number);
  return ( 0 );
}
if (NumberOfPositions(Symb,- 1 ,Magik_number)== 0 && NumberOfOrders(Symb,- 1 ,Magik_number)== 0 && Delta_Sell> High [ 1 ] && sar< Close [ 1 ]) {
  SetOrder( NULL , OP_SELLSTOP ,Lts,sar,sar+SL* Point (),sar-TP* Point (),Magik_number);
  return ( 0 );
}

//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions( string sy= "" , int op=- 1 , int mn=- 1 ) {
int kp= 0 ;
   if (sy== "" ) sy= Symbol ();
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
     if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
       if (mn< 0 || OrderMagicNumber ()==mn) kp++;
}}}}
   return (kp);
}
//===============================================================================================
//------------------------------- Возвращает количество ордеров --------------------------------+
//===============================================================================================
int NumberOfOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
int kp= 0 ;
   if (sy== "" ) sy= Symbol ();
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
     if ( OrderType ()> 1 && OrderType ()< 6 ) {
       if (mn< 0 || OrderMagicNumber ()==mn) kp++;
}}}}
   return (kp);
}
 
Vitaly Muzichenko :

Şu şekilde deneyin:

if (NumberOfPositions(Symb,- 1 ,Magik_number)== 0 && NumberOfOrders(Symb,- 1 ,Magik_number)== 0 && Delta_Buy< Low [ 1 ] && sar> Close [ 1 ]) {
  SetOrder( NULL , OP_BUYSTOP ,Lts,sar,sar-SL* Point (),sar+TP* Point (),Magik_number);
  return ( 0 );
}
if (NumberOfPositions(Symb,- 1 ,Magik_number)== 0 && NumberOfOrders(Symb,- 1 ,Magik_number)== 0 && Delta_Sell> High [ 1 ] && sar< Close [ 1 ]) {
  SetOrder( NULL , OP_SELLSTOP ,Lts,sar,sar+SL* Point (),sar-TP* Point (),Magik_number);
  return ( 0 );
}

//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions( string sy= "" , int op=- 1 , int mn=- 1 ) {
int kp= 0 ;
   if (sy== "" ) sy= Symbol ();
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
     if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
       if (mn< 0 || OrderMagicNumber ()==mn) kp++;
}}}}
   return (kp);
}
//===============================================================================================
//------------------------------- Возвращает количество ордеров --------------------------------+
//===============================================================================================
int NumberOfOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
int kp= 0 ;
   if (sy== "" ) sy= Symbol ();
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
     if ( OrderType ()> 1 && OrderType ()< 6 ) {
       if (mn< 0 || OrderMagicNumber ()==mn) kp++;
}}}}
   return (kp);
}
Fonksiyonlar değiştirildi, test iyi gidiyor. Bakalım demo ticarette nasıl olacak. Ama nedense bana öyle geliyor ki benim durumumda hem bu işlevler hem de bu işlevler aynı görevi yerine getiriyor, yani. emir ve pozisyon olup olmadığı sorusunu cevaplayın.
 
Neron_76 :
Fonksiyonlar değiştirildi, test iyi gidiyor. Bakalım demo ticarette nasıl olacak. Ama nedense bana öyle geliyor ki benim durumumda hem bu işlevler hem de bu işlevler aynı görevi yerine getiriyor, yani. emir ve pozisyon olup olmadığı sorusunu cevaplayın.
Eğer emrin ikili ayarı tekrarlanırsa, o zaman " SetOrder " fonksiyonunun gözden geçirilmesi gerekir, belki iki istek verir, ilk istekten sonra fonksiyondan çıkış yoktur ve ikincisini göndermeyi başarır.
 
Vitaly Muzichenko :
Eğer emrin ikili ayarı tekrarlanırsa, o zaman " SetOrder " fonksiyonunun gözden geçirilmesi gerekir, belki iki istek verir, ilk istekten sonra fonksiyondan çıkış yoktur ve ikincisini göndermeyi başarır.
Eğer öyleyse, neden her zaman olmuyor, keneler arasında ne oluyor? Bu konuda pek iyi değilim.
 
Neron_76 :
Öyleyse neden hep olmuyor, keneler arasında bir şey oluyor mu? Bu konuda pek iyi değilim.
Bir sembolün keneleri arasında başka bir sembolün keneleri oluşabilir. Expert Advisor çoklu para birimi ise, başka bir sembolden keneler görür. Zamanlayıcı olayları keneler arasında da meydana gelebilir - OnTimer() ve OnChartEvent() olayları - Neredeyse "olay olayları" yazdım ... bu bir kurulum olurdu ...