statik dizi? - sayfa 2

 
Tamam, en azından neredeyse doğru yoldaydım ama EMPTY_VALUE ve nasıl kullanılacağını bilmediğim için direnç ve destek değeri aynı kalana kadar değerdeki değişikliği tespit etmek için geri döngü yapmayı düşünüyordum. önceki göstergeler.

Her neyse, teşekkürler, bununla ilgili biraz daha okumam gerekecek, yaklaşıyorum ama hala biraz sisli. :)

Bir şeyleri öğrenmem çok uzun sürüyor gibi görünüyor. Daha iyi tasarım fikirleri elde etmek için diğer insanların kodlarını daha fazla okumam ve onları anlamaya çalışmam gerektiğini düşünüyorum.

Cevap için teşekkürler.
 
RaptorUK :
Fraktalların fiyat değerlerini tutan 2 arabellek (dizi) vardır. . . val1 ve val2. Önceki fraktal değerleri bulmak istiyorsanız, bir kaydırma değerini artırarak döngüye girin ve EMPTY_VALUE olmayanları bulana kadar arabellek değerlerini kontrol edin ( https://docs.mql4.com/customind/SetIndexEmptyValue )
Tamam, burada sesli düşünüyorum:

Böylece v1[i] ve v2[i]'yi 1++ koduyla geri döndürebilirim,

val1>0'ı anlamıyorum, High[0] dışında her zaman 0'dan büyük değil mi?

Ve neden val1 tüm High[i] 'lerin AHHH'lerini değil de yalnızca yüksek fraktalları işaretliyor, sanırım görüyorum çünkü if ifadesi ona yalnızca High[i]'leri yapmasını söylüyor

Peki tamam biraz daha düşünmeme izin ver.

val1 fraktallar, ancak v1[i] sadece fraktal yüksek tamam, sanırım bu kısmı çözdüm.

O zaman v1[i] 1++ bir şekilde (o kısmı halletmem gerekecek) EMPTY_VALUE'dan önceki noktaya döndürebilirim ve bu önceki Yüksek[i] fraktal olurdu.

yaklaşıyor muyum?
 
Agent86 :
Tamam, burada sesli düşünüyorum:

val1 fraktallar, ancak v1[i] sadece fraktal yüksek tamam, sanırım bu kısmı çözdüm.

O zaman v1[i] 1++ bir şekilde (o kısmı halletmem gerekecek) EMPTY_VALUE'dan önceki noktaya döndürebilirim ve bu önceki Yüksek[i] fraktal olurdu.

yaklaşıyor muyum?
Doğru . . . :-)
 
RaptorUK :
Doğru . . . :-)
Vay! endişelendim

teşekkürler
 
Bir yanlışım var, EMPTY_VALUE yerine 0 koyabilirim ve sürekli olarak 0 yazdırıyor, bu doğru değil belki bu doğru ama istediğim etki değil.

Her neyse:

 //+------------------------------------------------------------------+
//|                                                  Agent86_5min.mq4 |
//|                                                    Unfinished POS |
//|                                    
//+------------------------------------------------------------------+
#property copyright "Unfinished POS by Agent86"


//---- input parameters
extern double     TakeProfit= 20.0 ;
extern double     Lots= 0.1 ;
extern double     StopLoss= 15.0 ;
extern int MagicNumber= 123486 ;

double v1[];
double v2[];
double val1;
double val2;

//++++ These are adjusted for 5 digit brokers.

int      pips2points;     // slippage  3 pips    3=points    30=points
double   pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int      Digits .pips;     // DoubleToStr(dbl/pips2dbl, Digits.pips)

     // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if ( Digits == 5 || Digits == 3 )
   {     // Adjust for five (5) digit brokers.
      pips2dbl    = Point * 10 ; pips2points = 10 ;   Digits .pips = 1 ;
   } 
   else 
    {    
      pips2dbl    = Point ;    pips2points =   1 ;   Digits .pips = 0 ; 
    }
     // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
     
   
    
//---- 

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return ( 0 );
  }
   
    
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
  
   double    faster = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 1 ), //MODE_MAIN
            slower = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 1 ); //MODE_SIGNAL
            
   int i= Bars ;         
   
   while (i>= 0 )
     {
      val1= iFractals ( NULL , 0 , MODE_UPPER,i);
       if (val1 > 0 ) v1[i]=High[i];
       else           v1[i]=v1[i+ 1 ];

      val2= iFractals ( NULL , 0 , MODE_LOWER,i);
       if (val2 > 0 ) v2[i]=Low[i];
       else           v2[i]=v2[i+ 1 ];
      
      i--;
     }
   
     for (val1=High[i]; v1[i] == EMPTY_VALUE ;i++)
      {
       Print (v1[i]);
      } 
  
//----
            
                       
            

           

//---- 

 
                    
        

                
   return ( 0 );
  }    

//+------------------------------------------------------------------+
for döngüsünün beni sadece bir sinyal geri alacağını ve benim için sinyal seviyesini yazdıracağını düşündüm. ama hiçbir şey almıyorum ya da 0

Birkaç gün sonra bunu düşündükten ve birçok şey denedikten sonra, yine de 3. bir tampon ekleyerek gösterge versiyonunda bu değişiklikleri yapmaya çalıştım ve grafiklerde fiyat ile sinyal vermeye çalıştım ama bu da işe yaramadı.


Pekala, bekle, bunu EA'nın kısa versiyonunu geri alıyorum, EMPTY_VALUE arabelleğine sahip değilim, bu yüzden muhtemelen bir şekilde çalışmayacak ve bu yüzden fikir, EA'yı test etmekti, böylece sonuçları görmek için yazdırma fonksiyonlarını görebildim, ama Beklemem gereken gösterge versiyonu, bu yüzden ortaya çıktığı gibi tekrar göndermem gerekiyor.

Her neyse, burada gösterge versiyonu var, ama bundan emin değilim çünkü while ifadesinin içinde döngüye girmeyi denemeli miyim yoksa yeni bir döngü oluşturup val1 = ....'yi yeniden yaratmalı mıyım tam olarak emin değilim.

 //+------------------------------------------------------------------+
//|                Support and Resistance                            |
//|                Copyright © 2004/5     Barry Stander              |
//|                http://www.4Africa.net/4meta/                     |
//+------------------------------------------------------------------+

#property copyright "Support and Resistance             Barry_Stander_4@yahoo.com"
#property link       "http://www.4Africa.net/4meta/"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 White

//---- buffers
double v1[];
double v2[];
double v3[];
double val1;
double val2;
double val3;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers ( 2 );

   SetIndexArrow ( 0 , 159 );
   SetIndexStyle ( 0 , DRAW_ARROW , STYLE_DOT , 1 , Red );
   SetIndexBuffer ( 0 , v1);
   SetIndexLabel ( 0 , "Resistance" );
   SetIndexEmptyValue ( 0 , 0.0 );

   SetIndexArrow ( 1 , 159 );
   SetIndexStyle ( 1 , DRAW_ARROW , STYLE_DOT , 1 , Blue );
   SetIndexBuffer ( 1 , v2);
   SetIndexLabel ( 1 , "Support" );
   SetIndexEmptyValue ( 1 , 0.0 );
   
   SetIndexArrow ( 2 , 225 );
   SetIndexStyle ( 2 , DRAW_ARROW , STYLE_DOT , 1 , White );
   SetIndexBuffer ( 2 , v3);
   SetIndexLabel ( 2 , "High A" );
   SetIndexEmptyValue ( 2 , 0.0 ); 
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   
   
   int i= Bars ;
//----
   while (i>= 0 )
     {
      val1= iFractals ( NULL , 0 , MODE_UPPER,i);
       if (val1 > 0 ) v1[i]=High[i];
       else           v1[i]=v1[i+ 1 ];

      val2= iFractals ( NULL , 0 , MODE_LOWER,i);
       if (val2 > 0 ) v2[i]=Low[i];
       else           v2[i]=v2[i+ 1 ];
      
      i--;      
       
      }
      
     
     for (val1=High[i]; v1[i] == 0 ;i++)  // or v1[i] == EMPTY_VALUE
      {
       Print (v1[i]);
      }
       
     
     
     
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
peki, şimdilik oluşturulacak 3. tamponu/sinyali almaya çalışmaktan vazgeçtim ve sadece önceki sinyalin sonucunu yazdırıp yazdıramayacağımı görmek istiyorum

EMPTY_VALUE kodu girme şeklim göstergeyi başlatıyor, ancak bu hiçbir şey yazdırmıyor
 

Bunun for döngüsünün nasıl çalıştığını açıklayabilir misiniz?

for (val1=Yüksek[i]; v1[i] == 0 ;i++)

 
RaptorUK :

Bunun for döngüsünün nasıl çalıştığını açıklayabilir misiniz?

for (val1=Yüksek[i]; v1[i] == 0 ;i++)

Sanırım while deyimi ve v1[i] en yüksek değerleri sakladığından ve i -- en yüksek Çubuklardan geriye doğru saydığından, o zaman v1[i] == EMPTY_VALUE iken tekrar geri sayacağımı düşünüyordum.

Bu, i++'ı bir önceki en yüksek seviyeye 1 seviye artıracak olsa da, aslında sanırım bunu bir sonraki EMPTY_VALUE'ye kadar geçecekti.

Bu yüzden bunu tam tersi şekilde yapmam gerekiyor v1[i] = High[i]; ben++

O zaman bu beni önceki Yüksek'e götürmemeli mi, ama onu nasıl düzgün bir şekilde başlatacağımdan emin değilim.

Üzerinde çalışmaya devam edeceğim.
 
Bunu if olarak değiştiriyorum (sadece bu noktada herhangi bir şeyin yazdırıldığını görmek istiyorum, böylece en azından göstergenin ne yaptığını görebiliyorum.

Tüm elde ettiğim 0'lar, yani = Print (v1[i]); olduğunda aslında HİÇBİR değer yok.
Hangisi garip çünkü bu noktada göstergeyi nasıl çalıştırabilirim?

Eh, devam edeceğim.
 
Agent86 :
Bunu if olarak değiştiriyorum (sadece bu noktada herhangi bir şeyin yazdırıldığını görmek istiyorum, böylece en azından göstergenin ne yaptığını görebiliyorum.

Tüm elde ettiğim 0'lar, yani = Print (v1[i]); olduğunda aslında HİÇBİR değer yok.
Hangisi garip çünkü bu noktada göstergeyi nasıl çalıştırabilirim?

Eh, devam edeceğim.


Belki de sadece v1[0] için değerler görüyorsunuz? i'yi aynı anda yazdırın. .

 Print ( "v1[" , i, "]= " , v1[i]);
 
2011.09 . 17 11 : 56 : 15      2011.01 . 03 09 : 24   Agent86_5min EURUSD,M5: v1[- 1 ]= 0
Hmm, ilginç
Hepsini göndermedim ama tüm satırlarda aynı yazıyor = 0

Hala v1[0] için gerçek bir değer görmem gerektiğini düşündüm?

gösterge if(>0) olması gerektiğinde nasıl her zaman 0 olabilir?

Belki de bilmediğim başka bir alana giriyor olabilirim.

Yazdırabileceğimi düşündüm, böylece tüm girişimlerimin neyi ve neden başarısız olduğunu anlamaya çalışabilirim; ve böylece bir şekilde bir sonraki fraktala ulaşmak için i++'ı artırabilirim ve sonra bir şekilde bu bilgiyi bir şey için nasıl kullanacağımı bulabilirim.


Yüksek[i] veya v1[i] yazdırabilirim ve her zaman 0

Yazdırma Yüksek[0] veya Yüksek[1] ayrıca 0

Ne yazdığını ve her zaman 0'a götüren i-- döngüsü nedeniyle sıkışmış gibi görünen i değerinin yazdırıldığını anlasam da, yine de en azından düşündüğüm gibi, yine de i için bir değer yazdırmalı.

Ve neden [-1] yazdırdığını anlıyorum çünkü i=Bars. Bunu anlıyorum ama =0 ?