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

 
Maxim Kuznetsov :

bu nasıl bir kanon? bir off.doc var - tam olarak sizinki gibi .. geri kalan her şey kötü olandan.

1. OnCalculate içinde kullanılan tüm dizilerin seriliğini ayarlayın

2. döngüye girmeden önce, buff[uzunluk]=Teklif+boyutu ayarlayın; - tam istediğiniz gibi olacak. Eğri çizgi ve "vizör"ün sonunda Teklif + boyut düzeyinde

3. Dizi sınırlarına dikkat edin. Tabii ki, pek Rate_total <uzunluk, ama ne şaka değil :-)

1. Yani, başlangıçta ArraySetAsSeries yazıp bundan sonra dans etmek?

Ah evet, biraz yanlış anladım. Yani, bu satırın grafik boyunca sola doğru gitmesi ve her tik ile güncellenmesi gerekir.

 
YanSay :

Ayrıntılı cevap için çok teşekkür ederim!

Tavsiyeniz üzerine şubeleri böldüm ve her şey ortaya çıktı.

Sonra aynı anda 10-15 bekleyen sipariş açan bir sorunla karşılaştım, kodunuzdan sonra ekleyerek sorunu çözdüm:

Bu da bir seçenek değil. Sipariş manuel olarak veya başka bir EA tarafından açılabilir. Sonuç olarak, geliştirilen Expert Advisor hiçbir şey açmayacaktır. Bu nedenle, danışman tarafından açılan siparişlerin sayısını saymanız gerekir. Bu verilere sahip olarak, sipariş açma ihtiyacına karar verin.

Eminim daha akıllı bir yolu vardır.

Kodunuza göre lütfen 1'in ne anlama geldiğini açıklamayın; ben >=0; --i ?

Bu standart bir sipariş döngüsüdür. OrdersTotal(), sipariş sayısıdır. Siparişler sıfırdan başlayarak indekslenir. Yani 1 sipariş varsa, o zaman indeksi 0'dır ve OrdersTotal() 1 döndürür. Bu nedenle, döngü emir sayısından 1 eksik olan bir indeksten başlamalıdır. OrdersTotal() - 1 elde ederiz. İkinci işlenen, döngü gövdesini yürütmek için koşuldur. Bu durumda döngü i = -1 değerinde kopacaktır. Üçüncü işlenen, bir sonraki dizine atlamaktır (1 azalma).

Döngü operatörü hakkında belgelerde okuyabilirsiniz.

 
Ihor Herasko :

Bu da bir seçenek değil. Sipariş manuel olarak veya başka bir EA tarafından açılabilir. Sonuç olarak, geliştirilen Expert Advisor hiçbir şey açmayacaktır. Bu nedenle, danışman tarafından açılan siparişlerin sayısını saymanız gerekir. Bu verilere sahip olarak, sipariş açma ihtiyacına karar verin.

Böyle denedim ama yine 1 sinyal için 10-15 sipariş açmaya başladı:

 if (( OrdersTotal ()> 0 ) && ( OrderMagicNumber () != 100)) return ;

Üçüncü işlenen, bir sonraki dizine atlamaktır (1 azalma).

Yani, tüm siparişleri sondan tarıyor mu?

 
YanSay :

Böyle denedim ama yine 1 sinyal için 10-15 sipariş açmaya başladı:

Yani, tüm siparişleri sondan tarıyor mu?

OrderMagicNumber() işlevini kullanmak için önce bir sipariş seçmelisiniz . Siparişleriniz hakkında bilgi toplamak için standart döngü şöyle görünür (örneğin, siparişlerimizin sayısını sayalım):

 int nCnt = 0 ;     // Счетчик количества своих ордеров
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS ))
         continue ;

       if ( OrderSymbol () != Symbol ())
         continue ;

       if ( OrderMagicNumber () != <значение ID ордеров эксперта>)
         continue ;

      ++nCnt;
   }

Bu kodu çalıştırdıktan sonra, nCnt değişkeni Expert Advisor'ın çalışma emirlerinin sayısını içerecektir.

 
Ihor Herasko :

sorunu şu şekilde çözüyorum...


Teşekkür ederim.

 
Ihor Herasko :

OrderMagicNumber() işlevini kullanmak için öncebir sipariş seçmelisiniz . Siparişleriniz hakkında bilgi toplamak için standart döngü şöyle görünür (örneğin, siparişlerimizin sayısını sayalım):

Bu kodu çalıştırdıktan sonra, nCnt değişkeni Expert Advisor'ın çalışma emirlerinin sayısını içerecektir.

 int nCnt = 0 ;     // Счетчик количества своих ордеров
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS ))
     continue ;
   if ( OrderSymbol () != Symbol ())
     continue ;
   if ( OrderMagicNumber () != MagicNumber)
     continue ;
  ++nCnt;
  {
   if (nCnt>0)
       return ;
  }
 }

Çok teşekkürler! İşe yaradı.

Söyleyin bana, ++nCnt, alınan sipariş sayısının nCnt değişkeninin kendisinde bir ikame mi?

 
YanSay :

Çok teşekkürler! İşe yaradı.

Söyleyin bana, ++nCnt, alınan sipariş sayısının nCnt değişkeninin kendisinde bir ikame mi?

Tüm bu durumlarda, derhal belgelere bakın. ))

 
YanSay :

Çok teşekkürler! İşe yaradı.

Söyleyin bana, ++nCnt, alınan sipariş sayısının nCnt değişkeninin kendisinde bir ikame mi?

Dille ilgili tüm belgeler var, sitenin üst menüsüne bakmanız yeterli.

Okumak için tembel olmayın - her şeyi kafanızda tutmak imkansızdır - hemen hemen herkes her zaman orada çalışır - sadece yeni başlayanlar değil.

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...
 
Artyom Trishkin :

Dille ilgili tüm belgeler var, sitenin üst menüsüne bakmanız yeterli.

Okumak için tembel olmayın - her şeyi kafanızda tutmak imkansızdır - hemen hemen herkes her zaman orada çalışır - sadece yeni başlayanlar değil.

Teşekkür ederim. Yönüm kötüyken hangi bölümü arayacağımı her zaman anlamıyorum ve F1 editörü her zaman doğru yere göndermiyor)

Aptalca sorular için endişelenmemeye çalışacağım, sabrınız için teşekkürler)

 
Roman Sharanov :

1. Yani, başlangıçta ArraySetAsSeries yazıp bundan sonra dans etmek?

Ah evet, biraz yanlış anladım. Yani, bu satırın grafik boyunca sola doğru gitmesi ve her onay işaretiyle güncellenmesi gerekir.

yani yatay bir çizgi çizin.

Neden herhangi bir arabelleğe ve bunların yeniden hesaplanmasına ihtiyacınız var? ObjectSetDoubke(0,myHLine,OBJPROP_PRICE,concrete_price_value);

kullanıcı satırı görecek, arabellekleri yeniden hesaplamakla zaman kaybetmeyeceksiniz, herkes mutlu ve mutlu bir şekilde dağılıyor

PS/ doğru anla - bir gösterge tamponu, ilk etapta yapılan hesaplamaların sonuçlarını aktarmak (paylaşmak / paylaşmak) içindir. N uzunluğunda yatay bir çizgi çizin - bu başka bir şeyle ilgili