MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 15
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım 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
Döngüler, OrdersTotal () -1'den 0'a kadar ters sırada sayılmalıdır.
Döngüler, OrdersTotal () -1'den 0'a kadar ters sırada sayılmalıdır.
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.
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.
Şu şekilde deneyin:
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);
}
Şu şekilde deneyin:
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.
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.
Öyleyse neden hep olmuyor, keneler arasında bir şey oluyor mu? Bu konuda pek iyi değilim.