Yardım Gerekiyor'da dizi aralık dışında - sayfa 7

 
Valeriy Yastremskiy :

Günlük uç noktalar ve bulduğunuz şey esasen aşırı uçlardır, düşükler (veya yüksekler) mevcut fiyattan oldukça büyük mesafelere sahiptir. Havva'da 132 günde minimum ve maksimumun yayılması 12300 puandan fazladır. 2000'in en düşük seviyesinden, 800'ün en yüksek seviyesinden fiyat.

ben de tutmuyorum.

Kusura bakmayın yarın açıklamaya çalışacağım bugün yoruldum

 
MakarFX :

AUDUSD'm yok

ArrayCopyRates(Bar_data_D1, _Symbol , PERIOD_D1 ); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров

Neyi kopyalar, nereye ve kime geri döner?

 
Алексей Тарабанов :

Neyi kopyalar, nereye ve kime geri döner?

Alexey Tarabanov :

Neyi kopyalar, nereye ve kime geri döner?

Bir işlevi çağırmanın 2 yolu vardır:

int ArrayCopyRates (
    MqlOranlar&    Rates_array[] , // Referans tarafından geçirilen MqlRates dizisi
    sicim       sembol=NULL , // araç
    int          zaman aralığı=0      // zaman aralığı
);

Belirtilen grafiğin çubuklarının verilerini double RateInfo[][6] türünde iki boyutlu bir diziye kopyalar ve kopyalanan çubukların sayısını döndürür.

int ArrayCopyRates (
    geçersiz&       dest_array[][] , // başvuruya göre geçirilen dizi
    sicim      sembol=NULL , // araç
    int         zaman aralığı=0        // zaman aralığı
);

Seçenekler

DiziKopyaOranları

Çağrının ikinci formunu kullanırken, veriler aslında dest_array[][] dizisine kopyalanır, dizinin kendisi zaman serisi boyutuna uyacak şekilde otomatik olarak yeniden tahsis edilir (dizi statik olarak bildirilmiş olsa bile).

Dizinin ilk boyutu çubuk sayısını içerir. İkinci boyutun değerleri olan 6 öğesi vardır:

0 - zaman (zaman),
1 - açılış fiyatı (açık),
2 - en düşük fiyat (düşük),
3 - en yüksek fiyat (yüksek),
4 - kapanış fiyatı (kapanış),

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
Dark Kchlyzov :
Bir işlevi çağırmanın 2 yolu vardır:

int ArrayCopyRates (
    MqlOranlar&    Rates_array[] , // Referans tarafından geçirilen MqlRates dizisi
    sicim       sembol=NULL , // araç
    int          zaman aralığı=0      // zaman aralığı
);

Belirtilen grafiğin çubuklarının verilerini double RateInfo[][6] türünde iki boyutlu bir diziye kopyalar ve kopyalanan çubukların sayısını döndürür.

int ArrayCopyRates (
    geçersiz&       dest_array[][] , // başvuruya göre geçirilen dizi
    sicim      sembol=NULL , // araç
    int         zaman aralığı=0        // zaman aralığı
);

Seçenekler

DiziKopyaOranları

Çağrının ikinci formunu kullanırken, veriler aslında dest_array[][] dizisine kopyalanır, dizinin kendisi zaman serisi boyutuna uyacak şekilde otomatik olarak yeniden tahsis edilir (dizi statik olarak bildirilmiş olsa bile).

Dizinin ilk boyutu çubuk sayısını içerir. İkinci boyutun değerleri olan 6 öğesi vardır:

0 - zaman (zaman),
1 - açılış fiyatı (açık),
2 - en düşük fiyat (düşük),
3 - en yüksek fiyat (yüksek),
4 - kapanış fiyatı (kapanış),

int türünün dönüş değeri nerede saklanır? Tüm verileri işleve ilettiniz, ancak ondan bir bok alamadınız.

 
Алексей Тарабанов :

int türünün dönüş değeri nerede saklanır? Tüm verileri işleve ilettiniz, ancak ondan bir bok alamadınız.

Min_D_Level = iLow(_Symbol,PERIOD_D1,i); break ;

burada gibi görünüyor

çift Min_D_Level ; // en yakın minimum D seviyesi

Yoksa bir şey anlamıyor muyum?

int türünün dönüş değeri nerede saklanır?  

???

Gerçekten beyin haşlanmış.

Prosh'ta bir şekilde mümkün.

Mesela burada siz (siz) burada kabul edilemez olana izin verdiniz, aynen bu şekilde olacak, bir kod örneği vb.

 

Burada biraz oturdu.

 #property version    "1.00"
#property strict

//символ и таймфрейм текущего графика
string symbol;
ENUM_TIMEFRAMES frame;
datetime time;
   

struct BarData
   {
   struct Elem
      {
       int       number;     //порядковый номер периода (дня, месяца или года)
       double    high;       //максимум периода
       double    low;         //минимум периода
       datetime time_high;   //время максимума
       datetime time_low;   //время минимума
      } Arr[];             //массив периода
   int index;               //текущий индекс массива
   double    max;           //последнее максимальное значение периода
   double    min;           //последнее минимальное значение периода
   datetime time_max;       //время максимума
   datetime time_min;       //время минимума

   //при создании структуры указываем, что массив пустой
   BarData(){index=- 1 ;}    
   
   //функция записывает текущие экстремумы
   void WriteBar( int eNumber, string eSymbol, ENUM_TIMEFRAMES eFrame, datetime eTime)
      {
       int eShift= iBarShift (eSymbol,eFrame,eTime);
       double eHigh= iHigh (eSymbol,eFrame,eShift);
       double eLow= iLow (eSymbol,eFrame,eShift);
       //если элементов ещё нет или период сменился
       if (index< 0 || eNumber!=Arr[index].number)
         {
         ArrayResize (Arr,++index+ 1 );
         Arr[index].number=eNumber;
         Arr[index].high=eHigh;
         Arr[index].low=eLow;
         Arr[index].time_high=eTime;
         Arr[index].time_low=eTime;
         }
       //если произошло обновление текущего максимума
       if (eHigh-Arr[index].high> 0 )
         {
         Arr[index].high=eHigh;
         Arr[index].time_high=eTime;
         }
       //если произошло обновление текущего минимума
       if (Arr[index].low-eLow> 0 )
         {
         Arr[index].low=eLow;
         Arr[index].time_low=eTime;
         }
       //если произошло обновление предыдущего максимума
       if (eHigh-max> 0 )
         {
         for ( int i=index+ 1 ; i>= 0 ; i--)
            {
             if (Arr[index].high-eHigh> 0 )
               {
               max=Arr[index].high;
               time_max=Arr[index].time_high;
               break ;
               }
            }
         }
       //если произошло обновление предыдущего минимума
       if (min-eLow> 0 )
         {
         for ( int i=index+ 1 ; i>= 0 ; i--)
            {
             if (eLow-Arr[index].low> 0 )
               {
               min=Arr[index].low;
               time_min=Arr[index].time_low;
               break ;
               }
            }
         }
      }
   } day, month, year;

int OnInit ()
   {
   symbol= Symbol ();
   frame=( ENUM_TIMEFRAMES ) Period ();
   return ( INIT_SUCCEEDED );
   }

void OnTick ()
   {
   //текущее время закрытого бара
   time= iTime (symbol,frame, 1 );
   
   MqlDateTime date; 
   TimeToStruct (time,date);
   
   //делаем записи каждого периода
   day.WriteBar(date.day,symbol,frame,time);
   month.WriteBar(date.mon,symbol,frame,time);
   year.WriteBar(date.year,symbol,frame,time);
   
   //теперь имеем значения   
   Comment ( TimeToString (day.time_max)+ " : " + DoubleToString (day.max)+ " : " + DoubleToString (day.Arr[day.index].high)+ "\n" + TimeToString (day.time_min)+ " : " + DoubleToString (day.Arr[day.index].low)+ " : " + DoubleToString (day.min));
   }
Gereksiz döngülerden kaçınmaya çalışmalıyız. Bir akışta gelen alıntılarımız var ve daha sonra geçmişe dalıp bilgisayar kaynaklarını boşa harcamamak için gerekli girişleri hemen yapmanız gerekiyor.
 
Dark Kchlyzov :

burada gibi görünüyor

çift Min_D_Level ; // en yakın minimum D seviyesi

Yoksa bir şey anlamıyor muyum?

Evet, anlamıyorsun. Bunun gibi olmalı:

Количество_баров=ArrayCopyRates(Bar_data_D1, _Symbol , PERIOD_D1 ); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров

Peki, devamı...

 
Алексей Тарабанов :

Evet, anlamıyorsun. Bunun gibi olmalı:

Peki, devamı...

Bunun için çok teşekkür ederim!!

 
Dark Kchlyzov :

Bunun için çok teşekkür ederim!!

Hiçbir şey için büyük.

 

3.47 Yatağa gidiyorum.

Her şeyi yarın çözeceğim, herhangi bir sorunuz olursa bana bildirin!

Hepinize çok teşekkürler!!!