Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1418

 

İyi akşamlar, sevgili programcılar!

Basit bir sorunu çözmeme yardım edin. MQL4'ten bir kod var. Bunu 5'e uyarlamak istiyorum. Yani, MQL5'te benzer şekilde çalışmak için.


//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=High[0];
   double Lowest=Low[0];
 
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   for(int i=0; i<=Window; i++) {
   if(Low[i]<Lowest) Lowest=Low[i];
   if(High[i]>Highest) Highest=High[i];  
}
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}



Açıkçası varyantım geçmiyor, bazı nedenlerden dolayı çok fazla hata var):

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
 
void OnStart()
{

double   o = iOpen(NULL, PERIOD_CURRENT, 0);
double   h = iHigh(NULL, PERIOD_CURRENT, 0);
double   l = iLow(NULL, PERIOD_CURRENT, 0);
double   c = iClose(NULL, PERIOD_CURRENT, 0);

double Highest=h;
double Lowest=l;

   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
     
   for(int i=0; i<=Window; i++) 
{
   if  ( l[i] < Lowest ) 
   Lowest=[i];
  

   if  ( h[i] > Highest ) 
   Highest=[i];  
  
}
 
   //Выводим результат.
   Print("Самая высокая цена ",Highest,
         " - Самая низкая цена ",Lowest);
}
 
 
Alexey Belyakov #:

İyi akşamlar, sevgili programcılar!

Basit bir sorunu çözmeme yardım edin. MQL4'ten bir kod var. Bunu 5'e uyarlamak istiyorum. Yani, MQL5'te de benzer şekilde çalışmalıdır.


Yardım bölümüne bakın

iHigh

ve benzer işlevler

Eğer çalışmazsa, döngüde bir hata var demektir.

ve hangi değişkene veri eklediğinizi göremiyorsunuz

 
lynxntech #:

yardım bölümüne bakın

ve benzer işlevler

eğer çalışmazsa, döngüde bir hata var demektir

ve hangi değişkene veri eklediğinizi göremezsiniz

En Yüksek / En Düşük göstermesi gerekiyordu.

Şuna baktım :

int val_index=iLowest(NULL,0,MODE_CLOSE,10,1);

Çok yakın, ama henüz değil.

En düşük olan son 10 mum çubuğunun (ilk "1" den başlayarak) SAYISINI gösteriyor. Ama benim mum numarasına değil fiyat değerine ihtiyacım var.

 

Genel olarak geriye değil, ileriye bakmak gerekir.

Örneğin: sonraki 100 mum boyunca bir önceki mumun başlangıcından ("1" numaralı) itibaren "minimum" olanı arayın.

 
lynxntech #:

hepsi yapılabilir, soru gerçek işi ölçenlere ve daha iyisi geliştiricilere, orada planlarında ne olduğunu kim bilir

Deney yapmak istemiyorum, başka birçok görev var.

Doğru. Kraliyet işi değil .........

 
Alexey Viktorov #:

Bu doğru. Kralın işi değil .........

belki de yeni başlayanların soruları başlığını kapatmalıyız? Alexei, eğer yardım etmek istemiyorsan lütfen bu konuya karışma, senden çok fazla şikayet var.

Platformun nasıl çalıştığı hakkında fikir sahibi olmak için profesyonel bir cevapla ilgileniyordum.

 
Alexey Belyakov #:

İyi akşamlar, sevgili programcılar!

Basit bir sorunu çözmeme yardım edin. MQL4'ten bir kod var. Bunu 5'e uyarlamak istiyorum. Yani, MQL5'te de benzer şekilde çalışmalıdır.




Benim varyantım açıkçası çalışmıyor, bazı nedenlerden dolayı çok fazla hata var):

Görünüşe göre, programlamaya tamamen yabancısınız. Bu yüzden size ne tavsiye edilirse edilsin, şu ana kadar başarılı olamayacaksınız.

Ama yine de... şu fonksiyonu anlamaya çalışın

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   int              start_pos,        // откуда начнем 
   int              count,            // сколько копируем
   double           high_array[]      // массив для копирования максимальных цен
   );

ve dizilerle çalışma işlevi

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );

Bu sorunu çözmenin başka çeşitleri de vardır.

 
Alexey Belyakov #:

İyi akşamlar, sevgili programcılar!

Basit bir sorunu çözmeme yardım edin. MQL4'ten bir kod var. Bunu 5'e uyarlamak istiyorum. Yani, MQL5'te de benzer şekilde çalışmalıdır.




Benim varyantım açıkçası çalışmıyor, bazı nedenlerden dolayı çok fazla hata var):

CopyRates() yerine bir grup gösterge ve kod düzenlemesi minimum hale gelecek, kod kompakt ve okunabilir kalacaktır.

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=DBL_MIN;// 
   double Lowest=DBL_MAX; // 
   MqlRates rates[];
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   if (CopyRates(_Symbol,_Period,30,rates)!=30) {
      Alert("copyRates failed");
      return;
   }
   for(int i=0; i<=Window; i++) {
      if(rates[i].low<Lowest) Lowest=rates[i].low;
      if(rates[i].high>Highest) Highest=rates[i].high;  
   }
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}

Gerçekte, kavisli tırnak işaretleri için de bir kontrol eklemelisiniz

 
Maxim Kuznetsov #:

CopyRates() yerine bir sürü gösterge ve kod düzenlemesi minimuma inecek, kod kompakt ve okunabilir kalacaktır.

Gerçekte, kavisli alıntılar için de bir çek eklemelisiniz

Maxim, CopyRates bir sembolün tüm özelliklerini alıyormuş gibi sunulmuyor mu?

daha ucuz bireysel fonksiyonlar var

 
lynxntech #:

Maxim, CopyRates karakterin tüm özelliklerini alıyor olarak sunulmuyor mu?

daha ucuz bireysel özellikler vardır

orada 1) geliştiricilerin sözlerine göre sanal kopyalama, yani mümkünse veri aktarılmaz, iç referanslar aktarılır 2) tam kopyalama ile bile iHigh, iLow için ayrı ayrı CopyBuffer'dan daha hızlıdır (2 yerine 1 çağrı, yine de aynı terminal yapılarına gidecektir).

Ve son olarak, asıl önemli olan: taşırken, kodun görsel olarak bile orijinaline mümkün olduğunca benzer olması çok önemlidir. Kodun orijinali ile tam olarak aynı şeyi yaptığından kesinlikle emin olmalısınız. Ve küçük optimizasyonlar daha sonra ve yalnızca gerçekten kritik olduğu yerlerde yapılır.