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

 
Tapochun :

1. Günlük mumun açılış saatini belirleyin;

2. İhtiyacınız olan zaman dilimindeki çubuk sayısını belirleyin (günün ekstremumunu her 15 dakikada bir kontrol etmek istiyorsanız - M15 çubuklar);

3. Sayı çubukları için yüksek veri alın;

3. Döngüde, istenen gün mumu için tüm yüksek çubuk değerlerini dayHigh değişkeni ile karşılaştırın (başlangıçta dayHigh = 0);

4. Yüksek > dayHigh ise - yeni değeri dayHigh değişkeninde saklayın;

Bu anlaşılabilir, teşekkürler. Ama şimdilik benim için zor… veya daha doğrusu 2. nokta, bu hesaplamayı her TF için yapmam ve mum sayısını bulmak için aralıklara mı sürmem gerekiyor?

Geçmiş mumların sayısını belirlemeden, sadece mevcut zaman çerçevesinin tarihini öğrenemez ve tarih için tüm değerleri sıralayamaz mısınız?

 
-Aleks- :

Bu anlaşılabilir, teşekkürler. Ama şimdilik benim için zor… veya daha doğrusu 2. nokta, bu hesaplamayı her TF için yapmam ve mum sayısını bulmak için aralıklara mı sürmem gerekiyor?

Geçmiş mumların sayısını belirlemeden, sadece mevcut zaman çerçevesinin tarihini öğrenemez ve tarih için tüm değerleri sıralayamaz mısınız?

Bir gün içindeki çubuk sayısını belirlemek kolaydır. Örneğin, 15 dakikalık bir grafik için. Bir gündeki dakika sayısını 15'e bölün (1440/15 = 96 bar veya başka bir şekilde PERIOD_D1/PERIOD_M15 = 96)
 
Vitalii Ananev :
Bir gün içindeki çubuk sayısını belirlemek kolaydır. Örneğin, 15 dakikalık bir grafik için. Bir gündeki dakika sayısını 15'e bölün (1440/15 = 96 bar veya başka bir şekilde PERIOD_D1/PERIOD_M15 = 96)
Bunu yapmamalısın! TF'de herhangi bir gündeki çubuk sayısının aynı olacağı gerçeğini asla kabul edemezsiniz!
 
Vitalii Ananev :
Bir gün içindeki çubuk sayısını belirlemek kolaydır. Örneğin, 15 dakikalık bir grafik için. Bir gündeki dakika sayısını 15'e bölün (1440/15 = 96 bar veya başka bir şekilde PERIOD_D1/PERIOD_M15 = 96)

Evet, bu matematiksel olarak anlaşılabilir, ancak nasıl işlevler - soru bu! Diyelim ki Zaman aracılığıyla şimdiki zamanı alacağım ve sonra

Kendimi her TF için, yeni bir gün geldiğinde sıfırlanacak ve günlük maksimumu sıfırlayacak yeni bir çubukla bir sayaç yaptığımı ve ondan önce her çubuğun bir karşılaştırmasını yaptığımı görüyorum, ancak nasıl programlanır?

 
Tapochun :
Bunu yapmamalısın! TF'de herhangi bir gündeki çubuk sayısının aynı olacağı gerçeğini asla kabul edemezsiniz!

Evet mesela Cuma daha erken kapanabilir...

Yani günü belirlemeniz ve mum sayısını hesaba katmadan gün için maksimumu aramak için bir dizi almanız gerekiyor, bu nasıl yapılır?

 
-Aleks- :

Evet, bu matematiksel olarak anlaşılabilir, ancak nasıl işlevler - soru bu! Diyelim ki Zaman aracılığıyla şimdiki zamanı alacağım ve sonra nasıl

Kendimi her TF için, yeni bir gün geldiğinde sıfırlanacak ve günlük maksimumu sıfırlayacak yeni bir çubukla bir sayaç yaptığımı ve ondan önce her çubuğun bir karşılaştırmasını yaptığımı görüyorum, ancak nasıl programlanır?

Günün başlangıcına karşılık gelen ilk çubuğu bu şekilde bulabilirsiniz.

 datetime BeginDay = iTime( Symbol (), PERIOD_D1 , iBarShift( Symbol (), PERIOD_D1 , Time[NumberBar]));  

 int StartBar = iBarShift( Symbol (), 0 , BeginDay);
 
Vitalii Ananev :

Günün başlangıcına karşılık gelen ilk çubuğu bu şekilde bulabilirsiniz.

Örneğin, aşağıdaki algoritmayı elde ederiz.

İlk çubuğu bulduk - oluştuğu zamanda, bu çubuğun Yüksek'i günün en yükseği olacak. Ardından, bir sonraki çubuğu alıyoruz ve bir öncekinden daha yüksek olup olmadığını kontrol ediyoruz, o zaman bu günün yeni bir zirvesi. Ve böylece günün son çubuğuna kadar.

 
#property script_show_inputs
#property strict
//+------------------------------------------------------------------+
//| Входные параметры                                                |
//+------------------------------------------------------------------+
input ENUM_TIMEFRAMES inpUserTimeframe=PERIOD_M15;   // Пользовательский ТФ
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// Определяем время открытия текущего дня
   datetime open_D1=iTime(_Symbol,PERIOD_D1,0);

// Определяем номер первого сформированного бара по пользовательскому ТФ за текущий день
   int last_utf = iBarShift( _Symbol, inpUserTimeframe, open_D1, true );
   if( last_utf == -1 )
     {
      Alert(EnumToString(inpUserTimeframe)+" ОШИБКА #",GetLastError(),": номер бара не определен! "+TimeToStr(open_D1));
      return;
     }

// Определяем максимум дня
   double dayHigh=0;
   double high;
   int highNum=0;

   for(int i=1; i<=last_utf; i++) // Цикл по сформированным свечам за текущий день
     {
      high = iHigh( _Symbol, inpUserTimeframe, i );   // Максимум на i свече
      if( high > dayHigh )                            // Если максимум дня превышен
        {
         dayHigh = high;                              // Запоминаем новый максимум
         highNum = i;                                 // Запоминаем номер свечи
        }
     }

   Alert(EnumToString(inpUserTimeframe)+": максимум дня = ",DoubleToString(dayHigh,_Digits)," обнаружен на свече #",highNum);
  }
Dosyalar:
toAleks.mq4  3 kb
 
Tapochun , Vitalii Ananev - Teşekkürler! Şimdi öğrendiklerimi uygulamaya çalışacağım.
 
Tapochun :
Komut dosyası yazmamak, ancak göstergeyi görmek mümkün mü? Sadece tüm bu zaman dizilerinde hala zorluk çekiyorum ... Bir örnekten öğrenirdim.
Neden: