Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 978

 
Vadim_2015 :

Algoritma açık, anlaşıldı. Bir örnek yaptım, her şey çalışıyor.

Çok teşekkürler!

Ve ilk soruyla (maksimumlar hakkında), nasıl uygulanacağını daha ayrıntılı olarak açıklamıyor musunuz? Mümkünse küçük bir algoritma ile. bu konuda oldukça iyisin :)

Beni kendimden başka birinin anlaması beni mutlu ediyor.

Vadim_2015 :
Merhaba sevgili forum kullanıcıları!

MQL4 dilini öğrenmeye başladım ve basit bir gösterge yazarken çözemediğim bir problemle karşılaştım. Sorunun özü:

1_Günün geri kalanının Yüksek'i nasıl bulunur, basit bir döngü vardır Kapat[i]-Aç[i+1], Yüksek'i bulmanız gerekir[i - günün sonuna kadar]. Örneğin, [i],[1],[2]'den günün sonuna (PERIOD_H1) kadar. Nasıl yapacağım hakkında hiçbir fikrim yok. Bir 'iHigh' işlevi var, ancak biraz kapalı.


Bu sadece ihtiyaç duyulan şeydir. Günün sonuna kadar ne kadar zaman kaldığına bakılmaksızın mevcut günün en yüksek seviyesi.

 double   iHigh( 
   string            symbol,           // _Symbol
   int               timeframe,       // PERIOD_D1
   int               shift             // 0
   );

Soruyu doğru anladıysam.

 
AlexeyVik :

Beni kendimden başka birinin anlaması beni mutlu ediyor.

Bu sadece ihtiyaç duyulan şeydir. Günün sonuna kadar ne kadar zaman kaldığına bakılmaksızın mevcut günün en yüksek seviyesi.

Soruyu doğru anladıysam.

Anladığım kadarıyla biraz farklı. Bunun gibi bir şey.
bar=iBarShift( NULL , 0 ,t1, false );   //по времени, находим индекс бара
barH=iHighest( NULL , 0 ,MODE_HIGH,bar+ 1 , 1 );   //находим максимум, в этом промежутке    
 
r772ra :
Anladığım kadarıyla biraz farklı. Bunun gibi bir şey.

Benden önce tavsiye edilen tam olarak buydu.
Ancak iHighest (NULL, MODE_HIGH, bar+1, 1), bu aralıkta diğerlerinden daha yüksek olan Yüksek çubuğun indeksini döndürür ve mevcut günün Yüksek'ini sordunuz.

 
AlexeyVik :

Benden önce tavsiye edilen tam olarak buydu.
Ancak iHighest(NULL, MODE_HIGH, bar+1, 1), bu aralıkta diğerlerinden daha yüksek olan Yüksek çubuğun indeksini döndürür ve mevcut günün Yüksek'ini sordunuz.

Kabul edildi, " iHighest (NULL, MODE_HIGH, bar+1, 1), High değeri bu aralıktaki diğerlerinden daha yüksek olan çubuğun dizinini döndürür" . Ve kalan mevcut günün Yüksek demek istiyorum.

Daha kesin olmaya çalışacağım...

 #property indicator_separate_window
#property indicator_buffers 1

#property indicator_label1   "longBars"

#property indicator_color1 clrBlue

#property indicator_width1 2

//---углубление в историю на...
extern int barsToProcess = 100 ;
//---indicators Buffers
double    longBarsBuffer[];        
                

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   SetIndexBuffer ( 0 ,longBarsBuffer);
   SetIndexStyle( 0 , DRAW_HISTOGRAM );
   
   IndicatorDigits( Digits );
  
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 counted_bars=IndicatorCounted(), 
       limit;

   if (counted_bars< 0 ) return (- 1 );
   if (counted_bars> 0 )       
       counted_bars--;       
      
   limit= Bars -counted_bars;
   if (limit>barsToProcess)                                  
      limit=barsToProcess;
  
   double   longValue;
      
                            
   for ( int i= 0 ;i<limit;i++)
      {
       longValue = Close[i+ 1 ]-Open[i+ 3 ];
       
//--- само условие
         
       if (longValue> 0 ) 

//---собственно что необходимо получить: если на i-том баре выполнилось условие(i>0), то находим High от этого бара и 
//---до конца этого дня,я имею ввиду максимум всего этого промежутка. Примерно: Если условие выполнилось 
 //---на i=12h,то High от 12 до 00:00,
//--- если i=01:00, то High от 01:00 до 00:00, если i=22:00, то High от 22:00 до 00:00. Как то так.  Возможно ли это реализовать?  
//---Может я не правильно сделал цикл? Как его правильно организовать?
                  
       longBarsBuffer[i]=High[от i - и до конца дня] - то что необходимо получить. 
       else 
          longBarsBuffer[i]= 0.0 ; 
       

Mümkünse çok azarlamayın :) ... lütfen bunun nasıl yapıldığını açıklar mısınız?

 
Vadim_2015 :

Kabul edildi, "iHighest(NULL, MODE_HIGH, bar+1, 1) , bu yayılma alanında Yüksek olan tüm diğerlerinden daha yüksek olan çubuğun dizinini döndürür" . Ve kalan mevcut günün Yüksek demek istiyorum.

Daha kesin olmaya çalışacağım...

Mümkünse çok azarlamayın :) ... lütfen bunun nasıl yapıldığını açıklar mısınız?

İlk başta basit bir gaf olduğunu düşündüm, ama şimdi hiç şüphe yok, geleceğe bakmak ister misin??? O zaman sadece Geleceğe Dönüş'ten Doc size yardımcı olabilir.
 
AlexeyVik :
İlk başta basit bir gaf olduğunu düşündüm, ama şimdi hiç şüphe yok, geleceğe bakmak ister misin??? O zaman sadece Geleceğe Dönüş'ten Doc size yardımcı olabilir.

Korkarım Doc bana yardım etmeyecek ... bunu yapmıyor :)

Evet, bu soru, " Kalan günün en yüksek seviyesi." biraz kafa karıştırıyor. Sadece konuya girdi, bunun gerçekten bu gün geleceğe bakma girişimi olduğunu düşünebilirsiniz. Bu biraz farklı. Fiyat dizisinin başlangıcından sondan bir önceki güne (dün) kadar kalan geçerli günün _Yüksekliğini saymak istedim, çünkü tüm veriler orada. Ve son (bugün) gün biter bitmez yeniden hesaplanır. Aksi takdirde her şey dediğin gibi olacak _ geleceğe bakma girişimi! Fiyat dizisinin başından başlayıp sonuna (dün) giderseniz, sonraki her işaretlenen çubuktaki Yüksek değişecektir.   Bu yüzden günün geri kalanında Yüksek'i nasıl çıkaracağımı sordum. Bugünün alınmadığını söylemeyi bitirmedim, çünkü henüz tamamlanmadı. Kusura bakmayın hemen anlamadım :). Böyle bir hesaplamayı nasıl organize edeceğimi söyler misiniz? Aslında mümkün mü?

 
Vadim_2015 :

Korkarım Doc bana yardım etmeyecek ... bunu yapmıyor :)

Evet, bu soru, " Kalan günün en yüksek seviyesi." biraz kafa karıştırıyor. Sadece konuya girdi, bunun gerçekten bu gün geleceğe bakma girişimi olduğunu düşünebilirsiniz. Bu biraz farklı. Fiyat dizisinin başlangıcından sondan bir önceki güne (dün) kadar kalan geçerli günün _Yüksekliğini saymak istedim, çünkü tüm veriler orada. Ve son (bugün) gün biter bitmez yeniden hesaplanır. Aksi takdirde her şey dediğin gibi olacak _ geleceğe bakma girişimi! Fiyat dizisinin başından başlayıp sonuna (dün) giderseniz, sonraki her işaretlenen çubuktaki Yüksek değişecektir.   Bu yüzden günün geri kalanında Yüksek'i nasıl çıkaracağımı sordum. Bugünün alınmadığını söylemeyi bitirmedim, çünkü henüz tamamlanmadı. Kusura bakmayın hemen anlamadım :). Böyle bir hesaplamayı nasıl organize edeceğimi söyler misiniz? Aslında mümkün mü?

Sorunuzu anlamaya çalışacağım. Çubuklar arasında Yüksek'i bulmanız mı gerekiyor 1) önceki gün ve bugün için ne var, yoksa 2) bugün için ne var? Belki iHighest() yardımcı olur?
 
paladin80 :
Sorunuzu anlamaya çalışacağım. Çubuklar arasında Yüksek'i bulmanız mı gerekiyor 1) önceki gün ve bugün için ne var, yoksa 2) bugün için ne var? Belki iHighest() yardımcı olur?

Sevgili, ne elde etmek istediğimi maksimumda açıklamaya çalışacağım ... ..ya da başaracağım ..ya da herkesin kafasını tamamen karıştıracağım!

Bakın bir dizi fiyat var 01.02.2015'ten itibaren diyelim. 12/15/2015 (bugün) tarihine kadar PERIOD_H1 alıyoruz.

1_Basit bir formül alıyorum _val=Kapat[i]-Aç[i]

2_Eğer (val>0) ise basit bir koşul belirledim - kontrol _1.02.2015'ten başlamalıdır.

-Eğer koşul karşılanırsa, diyelim ki bir çubukta, o zaman bu çubuktan bu günün sonuna kadar _Yüksek buluyoruz. Örneğin: Kapat[4]-Open[4]>0 , yani. Diyelim ki[i=4] indeksli çubuk 01.02.2015 10:00'a ait, yani 10:00 - bu gün 00:00 - bu günün sonu - _Yüksek buluyoruz. Buna göre, koşul başka bir günde çalıştıysa, benzer bir ilkeye göre hareket ederiz. Ve böylece tüm fiyatlar dizisi boyunca. Hesaplama _1.02.2015 tarihinden başlamalıdır. 14/12/2015 (sondan bir önceki gün), neden sondan bir önceki güne kadar, - çünkü son gün henüz bitmedi ve tüm günün zirvesi bilinmiyor. Son gün biter bitmez ayrıca bir kondisyon kontrolü yapıyoruz. _1.02.2015 tarihli verilerden beri. 12/14/2015 (sondan bir önceki gün) bilinene kadar, o zaman öyle görünmeyecek - geleceğe bakma girişimi :)

- koşul sağlanmazsa, - hiçbir şey yapmayın, diziye boş bir değer yazılır.

Aslında bütün "fikir" bu. Nasıl yapılır, bir döngü boyunca nasıl belirlenir - asla bilemeyeceğim!

 
Vadim_2015 :

Korkarım Doc bana yardım etmeyecek ... bunu yapmıyor :)

Evet, " Kalan günün en yükseği." sorusu biraz kafa karıştırıyor. Sadece konuya girdi, bunun gerçekten bu gün geleceğe bakma girişimi olduğunu düşünebilirsiniz. Bu biraz farklı. Fiyat dizisinin başlangıcından sondan bir önceki güne (dün) kadar kalan geçerli günün _Yüksekliğini saymak istedim, çünkü tüm veriler orada. Ve son (bugün) gün biter bitmez yeniden hesaplanır. Aksi takdirde her şey dediğin gibi olacak _ geleceğe bakma girişimi! Fiyat dizisinin başından başlayıp sonuna (dün) giderseniz, sonraki her işaretlenen çubuktaki Yüksek değişecektir.   Bu yüzden günün geri kalanında Yüksek'i nasıl çıkaracağımı sordum. Bugünün alınmadığını söylemeyi bitirmedim, çünkü henüz tamamlanmadı. Kusura bakmayın hemen anlamadım :). Böyle bir hesaplamayı nasıl organize edeceğimi söyler misiniz? Aslında mümkün mü?

Eğer öyleyse, o zaman tekrar iHighest()'e dönüyoruz, ancak kaç çubuk sayılacağı ve hangisinden başlayacağınız iBarShift() kullanılarak hesaplanmalıdır.
 
AlexeyVik :
Eğer öyleyse, o zaman tekrar iHighest()'e dönüyoruz, ancak kaç çubuk sayılacağı ve hangisinden başlayacağınız iBarShift() kullanılarak hesaplanmalıdır.

Bir döngüde nasıl yapıldığını gösterebilir misin? Nasıl doğru yapacağımı bulamıyorum.