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

 
Andrey Sokolov :

içinde ne yazdığını söyler misin

int i,limit=prev_hesaplanmış==0 ? oranları_toplam-1 : oranları_toplam-önceki_hesaplanmış;

"==", "?" , ": "

?

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
Sadece korkunç! Expert Advisors'daki mantığı hala izleyebiliyorsam, bir şeyleri düzeltebilir, bir şeyler ekleyebilirsem... o zaman göstergelerin kodunu hiç anlamıyorum (
 
prom18 :

Teşekkürler Igor. Sadece gerekli olanı doğru formüle etmedim. Öğreticideki gösterge, belirli sayıda çubuk için (bu durumda 50) ve ayrı bir pencerede hesaplanır ve çizilir. MA-shku'yu çekmek için açılış fiyatından değil, günün ilk çubuğundan itibaren gereklidir. Yinede teşekkürler.

SetIndexDrawBegin() oku - bu, gösterge arabelleğinin çizilmesinin bir sınırlamasıdır, hiç kullanmadı

veya benim örneğimde bunu yapabilirsiniz:

 input int BarCount = 50 ;
....

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   int i,limit;
   static double dayopen= 0.0 ;
   static int lastday= 0 ;
   if (prev_calculated== 0 )
     {
      limit=rates_total- 1 ;
      dayopen= 0.0 ;
      lastday= 0 ;
     }
   else limit=rates_total-prev_calculated;
   limit = fmin (BarCount,limit);
   for (i=limit; i>= 0 ; i--)
     {
       if (TimeDay(time[i])!=lastday)
        {
         dayopen=open[i];
         lastday= TimeDay(time[i]);
        }
      Label1Buffer[i]=dayopen;
     }
   return (rates_total);
  }

onlar. BarCount'u ayarlayarak gösterge arabelleklerinin hesaplanmasını sınırlayın

 
Andrey Sokolov :

içinde ne yazdığını söyler misin

int i,limit=prev_hesaplanmış==0 ? oranları_toplam-1 : oranları_toplam-önceki_hesaplanmış;

"==", "?" , ": "

?

https://docs.mql4.com/en/basis/operators/ternary


örneğimi yeniden yazdım, ilk seçenekte TF'yi değiştirirken düzgün çalışmayacaktı, dayopen ve lastday'i sıfırlamanız gerekiyor, bunlar statik değiştirici ile açıklanıyor

Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
Artyom Trishkin :

Ayrıca referans tarafından geçirilen fonksiyon parametresindeki indeksi döndürür

İade:

çift GetPatt5barsDN()
{
çift düşük3 = 0;
int dizin = 0;
for(int i=1; i<20; i++)
{
Eğer
((Kapat[i] > Aç[i]) &&
(Kapat[i+1] > Aç[i+1]) &&
(Kapat[i+2] > Aç[i+2]) && //Bu mumun Düşük[i+2] değerine ihtiyacı var
(Kapat[i+3] < Aç[i+3]) &&
(Kapat[i+4] < Aç[i+4]))

düşük3 = Düşük[i+2];
indeks = i+2;
}

dönüş(düşük3);
dönüş(indeks);
}


Ve sonra ne yapılmalı?

 
Sfinks35 :

İade:

çift GetPatt5barsDN()
{
çift düşük3 = 0;
int dizin = 0;
for(int i=1; i<20; i++)
{
Eğer
((Kapat[i] > Aç[i]) &&
(Kapat[i+1] > Aç[i+1]) &&
(Kapat[i+2] > Aç[i+2]) && //Bu mumun Düşük[i+2] değerine ihtiyacı var
(Kapat[i+3] < Aç[i+3]) &&
(Kapat[i+4] < Aç[i+4]))

düşük3 = Düşük[i+2];
indeks = i+2;
}

dönüş(düşük3);
dönüş(indeks);
}


Ve sonra ne yapılmalı?

bu yüzden geri dönme


Bunun gibi bir şey

 int GetPatt5barsDN()
      {
       double low3 = 0 ;
       int index = 0 ;
       for ( int i= 1 ; i< 20 ; i++)
          {
             if
            ((Close[i] > Open[i]) &&  
            (Close[i+ 1 ] > Open[i+ 1 ]) &&
            (Close[i+ 2 ] > Open[i+ 2 ]) && //На этой свече нужен Low[i+2]
            (Close[i+ 3 ] < Open[i+ 3 ]) &&  
            (Close[i+ 4 ] < Open[i+ 4 ]))
             
            low3 = Low[i+ 2 ];
            index = i+ 2 ;
          } 
           
           return (index);
      }


daha uzak

 double min = Low[GetPatt5barsDN()];
 
Sfinks35 :

İade:

çift GetPatt5barsDN()
{
çift düşük3 = 0;
int dizin = 0;
for(int i=1; i<20; i++)
{
Eğer
((Kapat[i] > Aç[i]) &&
(Kapat[i+1] > Aç[i+1]) &&
(Kapat[i+2] > Aç[i+2]) && //Bu mumun Düşük[i+2] değerine ihtiyacı var
(Kapat[i+3] < Aç[i+3]) &&
(Kapat[i+4] < Aç[i+4]))

düşük3 = Düşük[i+2];
indeks = i+2;
}

dönüş(düşük3);
dönüş(indeks);
}


Ve sonra ne yapılmalı?

Ve referansa göre parametre aracılığıyla dizinin dönüşü nerede?

Ve lütfen doğru kodu yapıştırın:


 
MQL4'te, hesap türüne ilişkin, yani 5 basamaklı veya 4 basamaklı teklifleri tanıyan bir işlev var mı, bir varlığın ondalık noktadan sonra kaç sıfıra sahip olduğunu nasıl belirleyebilirsiniz, örneğin EURJPY'de ondalık sayıdan sonra 2 sıfır vardır noktası, EURUSD'nin ondalık noktadan sonra 4 sıfırı var mı?
 
Seric29 :
MQL4'te, hesap türüne ilişkin, yani 5 basamaklı veya 4 basamaklı teklifleri tanıyan bir işlev var mı, bir varlığın ondalık noktadan sonra kaç sıfıra sahip olduğunu nasıl belirleyebilirsiniz, örneğin EURJPY'de ondalık sayıdan sonra 2 sıfır vardır noktası, EURUSD'nin ondalık noktadan sonra 4 sıfırı var mı?

https://docs.mql4.com/en/predefined/digitsvar

Digits - Предопределенные переменные - Справочник MQL4
Digits - Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Digits - Предопределенные переменные - Справочник MQL4
 
Artyom Trishkin :

Ve referansa göre parametre aracılığıyla dizinin dönüşü nerede?

Ve lütfen doğru kodu yapıştırın:


Tünaydın!
Şu anda yapılmış gibi görünüyor:
 double GetPatt5barsDN( int &index)
      {
       double low3 = 0 ;
       for ( int i= 1 ; i< 20 ; i++)
          {
             if
            ((Close[i] > Open[i]) &&  
            (Close[i+ 1 ] > Open[i+ 1 ]) &&
            (Close[i+ 2 ] > Open[i+ 2 ]) && //На этой свече нужен Low[i+2]
            (Close[i+ 3 ] < Open[i+ 3 ]) &&  
            (Close[i+ 4 ] < Open[i+ 4 ]))
             
            low3 = Low[i+ 2 ];
            index = i+ 2 ;
          }           
     return (low3);
     }

Ancak derlerken bir uyarı veriyor: satırdaki tür dönüşümü nedeniyle olası veri kaybı :
dizin = GetPatt5barsDN(dizin);

 double low3 = 0 ;
   int index = 0 ;
   low3 = GetPatt5barsDN(index);
   index = GetPatt5barsDN(index);
   Print ( "low3= " , low3);
   Print ( "index= " , index);

İşlev başlığında (ve işlevin kendisinde) derleme hatası yoktur.