Gösterge Sorusu - sayfa 7

 
Kapsam ve son ayar değeri ile ilgili. Tüm bu değişkenler, en azından içinde bulundukları İşlevin kapsamına sahiptir, eğer genel olarak bildirilirlerse, İşlevin dışında bir kapsamları vardır. Bir değişkenin değeri bir döngü içinde 3 kez değişirse, ayarlandığı 2. değeri döngü dışından alamazsınız çünkü döngü dışındaki kod yürütüldüğünde değişken 3. değerine ayarlanır.
 
Böyle bir şey kullanırsam

Ve diyelim ki val1'i shift 3 ile ilan ettim
ve sonra tabii ki döngü vardiya i

Val1'e döngü dışında atıfta bulunursam, val1 global veya val1 looped hakkında mı konuşacağım?

Sanırım val3 ve val4 gibi if ifadelerim için ayrı bir global fraktal eklemeli miyim diye merak ediyorum.

Burada sıkışıp kalıyorum ama ABCD şeması en azından biraz ilerleme kaydediyor gibi görünüyor.

Her neyse, kod herhangi bir fikir mi?

 //+------------------------------------------------------------------+
//|                                                  Agent86_5min.mq4 |
//|                                                    Unfinished POS |
//|                      my attempt at an ABCD scheme and fib retrace | 
//+------------------------------------------------------------------+
#property copyright "Unfinished POS by Agent86"


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

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()
  {
   
        
   int i= 0 ;                
   val1= iFractals ( NULL , 0 , MODE_UPPER, 3 );
   val2= iFractals ( NULL , 0 , MODE_LOWER, 3 ); 
  


for (i= 0 ; val1== 0 || val2== 0 ; i++)
     {
     if ( iFractals ( NULL , 0 , MODE_UPPER,i) > 0 && val1 == 0 ) 
     val1 = iFractals ( NULL , 0 , MODE_UPPER, i);
     if ( iFractals ( NULL , 0 , MODE_LOWER, i) > 0 && val2 == 0 )
     val2 = iFractals ( NULL , 0 , MODE_LOWER, i);
     double A = val2;
     if (A != 0 ) 
     Print (A, " A loop down" );
     double a = val1;
     if (a != 0 )
     Print (a, " a loop up" );
      
     //Print (" Last UPPER Fractal at ", val1, " Last LOWER Fractal at ", val2);
         
     }   
                            
       if (val1 > 0 )
         {
         //Print (val1, " val1");
         //Print(TimeToStr(Time[3],TIME_DATE|TIME_MINUTES), " = val1 time");      
         //datetime b = Time[3];
         ////Print (A, " A if");
         double Z=(val1-A)/ 2 ; //my attempt at a .50 retrace in pips but can be any fib level
         double C=A+Z; //using the calc above to get the retrace value at .50
         //Print (C, " C");
         if (Bid<=C && Bid > A) //C will be somewhere in between here
         Print (Low[ 0 ], " Low [0] " , C, " = C" );
         // some other signal here to trade at retrace
         }        
         
         

       if (val2 < 0 )
         {
         //Print (val2, " val2");
         //Print(TimeToStr(Time[3],TIME_DATE|TIME_MINUTES), " = val2 time");
         //datetime c = Time[3];
         //Print(a, " a");
         double z=(a-val2)/ 2 ; //my attempt at a .50 retrace in pips but can be any fib level
         double c=a+z; //using the calc above to get the retrace value at .50
         //Print (c, " c");
         if (Bid<=c && c < a) //c will be somewhere in between here
         Print (Low[ 0 ], " Low [0] " , c, " = c" );
         //some other signal here to trade at retrace
         }
         
                   
                
   return ( 0 );
  }    

//+------------------------------------------------------------------+


Yani A önceki en düşük değer olacak ve val1 mevcut kayma 3 olmalı ve a ve val2 ile aynı olmalıdır.

A ve a'nın doğru değerlere atıfta bulunduğundan emin olmak için biraz daha test etmem gerekiyor çünkü boş değerleri yazdırmaması için !=0 ifadelerini ekledim.
İlk bakışta iyi görünüyor, ancak bunu tekrar doğrulamam gerekiyor

Her neyse, bunu yeniden ifade etmek için:
if(ifade)mdeki val1 doğru koşula mı işaret ediyor yoksa 3. vardiyaya atıfta bulunmak için tamamen farklı bir iFractal'a ihtiyacım var mı?
Doğru çalışıp çalışmadığını gerçekten anlayamıyorum, çalışıyor gibi görünüyor ama bir şeyler doğru değil ve bırakamıyorum.

Tavsiye lütfen

teşekkürler

Bu artık bir gösterge konusu olmasa da, bunu yeni bir konuya taşımalı mıyım?

 
Agent86 :
Böyle bir şey kullanırsam

Ve diyelim ki val1'i shift 3 ile ilan ettim
ve sonra tabii ki döngü vardiya i

Val1'i döngünün dışında yönlendirirsem, val1 global veya val1 looped hakkında mı konuşacağım?

Sanırım val3 ve val4 gibi if ifadelerim için ayrı bir global fraktal eklemeli miyim diye merak ediyorum.

val1 & val2 global kapsamda bildirilir, i start() içinde yerel olarak bildirilir.

val1 ve val2 döngünün içinde veya dışında kendilerine atanan son değere sahiptir. . . bu döngüden önce olur ve daha sonra değerler döngü içinde değiştirilebilir. . . Döngüden çıkıldığında değerler oldukları gibidir ve bir dahaki sefer start() çağrılana kadar bu şekilde kalırlar, sonra sıfırlanırlar ve muhtemelen döngüde değiştirilirler. . . vesaire vesaire.

 
RaptorUK :

val1 & val2 global kapsamda bildirilir, i start() içinde yerel olarak bildirilir.

val1 ve val2 döngünün içinde veya dışında kendilerine atanan son değere sahiptir. . . bu döngüden önce olur ve daha sonra değerler döngü içinde değiştirilebilir. . . Döngüden çıkıldığında değerler oldukları gibidir ve bir dahaki sefer start() çağrılana kadar bu şekilde kalırlar, sonra sıfırlanırlar ve muhtemelen döngüde değiştirilirler. . . vesaire vesaire.

Hmmm, yani kararlar kararlar.

Döngüdeyken değerlerin peşinden gitmeyi deneyebilir ve sadece val1 ve val2 =iFractal,,,3'ü yeniden bildirebilirim. Bir şeyleri sıfırlamak için, ancak yalnızca A=val2 ve a=val1 beyan ettikten sonra, bu hakka sahipsem umarım önceki fraktalım olan bunlar için bir değerim olur.

Veya val 1 ve val2'yi döngü dışında yeniden ilan edebilirim, ancak A veya a'nın değerini kaybetmek istemiyorum, bu yüzden sadece uygun zamanlarda çalışmam gerektiğini düşünüyorum.

Ben de bu konuda hep birlikte yanlış gidiyor olabilirim ama önemli değil. Bir yerden başlamalıyım, o yüzden şimdilik bunu seçtim ve daha fazla deneyim kazandıkça ayarlayabilirim.

Yardım için teşekkürler
 
Yani bunlar alakasız mı?

val1= iFractals ( NULL , 0 , MODE_UPPER, 3 );
val2= iFractals ( NULL , 0 , MODE_LOWER, 3 );

 

Gerçek iFractal'ı ticaret için kullanmak ve yalnızca (A) ve (a)'yı önceki fraktalımı referans almak için kullanmak ve kullanmak için bunları muhtemelen val3 ve val4 olarak değiştirmem gerektiğini tahmin ediyorum.


üzerinde çalışmaya devam edeceğim

teşekkürler

 
Tamam

Birkaç gün düşündükten ve mantık üzerinde çalışmaya çalıştıktan sonra, mükemmel olmasa da şimdi daha iyi çalışan bir kodum olduğunu düşünüyorum ama ilerliyor

 //+------------------------------------------------------------------+
//|                                                  Agent86_5min.mq4 |
//|                                              Unfinished POS slate |
//|                                          See progress notes below |
//+------------------------------------------------------------------+
#property copyright "Unfinished POS slate by Agent86"


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

double val1;
double val2;
bool traded = false;

//++++ 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()
  {
   
        
   int i= 0 ;
   int ticket,total,result;
   total = OrdersTotal ();                 
   val1= iFractals ( NULL , 0 , MODE_UPPER, 3 );
   val2= iFractals ( NULL , 0 , MODE_LOWER, 3 ); 


     
     if (val1 > 0 && traded == false)
      { 
       // in the absence of an && indicator above I get continous print statements
       // with indicator added && indicator above, then it prints A and B once as it should ???
       // I need to work this out so it won't print all the time aka trade all the time
       // A and B first values seems to initialize the whole block
       // just a reminder that they time stamps coordinate after this FYI
       // now work on C retrace and possibly signals
       // add options for user to select some candle patterns
       // add options to select indicators
       // add bells and whistles to make things fun
       // alerts,sounds,maybe poppup video animation or something
      
       double B = val1;
       Print (B, " B high" );
         if (val2== 0 )
            {
             for (i= 0 ; val2== 0 ; i++)
               {
               val2= iFractals ( NULL , 0 , MODE_LOWER, i);
               double A = val2;
                   if (A!= 0 )
                     {
                     Print (A, " A low" );
                     }
               }
             }  
      traded=true;
      }
     
     if (val2 > 0 && traded == true)
      {
      B = val2;
       Print (B, " B low" );
         if (val1== 0 )
            {
             for (i= 0 ; val1== 0 ; i++)
               {
               val1= iFractals ( NULL , 0 , MODE_UPPER, i);
               A = val1;
                   if (A!= 0 )
                     {
                     Print (A, " A high" );
                     }
               }
             }  
      traded=false;
      }
     
                    
                
   return ( 0 );
  }    

//+------------------------------------------------------------------+


      

Bu yüzden A ve B değerlerim var ve ilk if(ifadeler && göstergeler) içine bir gösterge ifadesi yerleştirilirken, değerler bir kez yazdırılır, örneğin MACD daha hızlı> daha yavaş veya bu tür bazı gösterge ifadeleri.

Bu yüzden sadece A ve B'yi istediğim gibi alıyorum

Gösterge seçenekleri if(ifadelerimden) alındığında neden birden çok kez yazdırıldığından emin değilim

Her neyse , gelecekte referans olması için sadece fraktallar vb. için değil, diğer göstergelerde de kullanılabilen bu ABCD tipi şema ile biraz daha yaklaşıyorum.

Tavsiye lütfen

teşekkürler

 

Bu size yardımcı olabilir. ABCD'nizi çözmek için kullanabilmeniz için son fraktallara ve vardiyaya erişmenin bir göstergesidir.

 iCustom ( Symbol (), 0 , "Fractal Store" , 0 , "" , 0 , 0 )

Bu üst fraktalları verecektir. Alt fraktallar için "" öğesini "L" olarak değiştirin.

 iCustom ( Symbol (), 0 , "Fractal Store" , 1 , "" , 0 , 0 )

En son olandan önce fraktal verecektir.

Dosyalar:
 
heelflip43 :

Bu size yardımcı olabilir. ABCD'nizi çözmek için kullanabilmeniz için son fraktallara ve vardiyaya erişmenin bir göstergesidir.

Bu üst fraktalları verecektir. Alt fraktallar için "" öğesini "L" olarak değiştirin.

En son olandan önce fraktal verecektir.

Evet, görüyorum

Bu konudaki en son kodumdan önce, bazı yardımlarla bazı çeşitli (for) ifadeler üzerinde çalıştım ve bu aynı zamanda arabellekte istediklerimi çizebildiğimin bir göstergesiydi, ancak bu beni, çıkarmaya çalışmakla ilgili başka bir soruna getirdi. değerleri ve yalnızca bu değerlerin kullanılması veya referans alınması için bir kez yazdırılması.

Bu çeşitli for ifadeleri benim için sorunlara neden olduğundan ve bunlar gönderdiğiniz koda benzer.
Sürekli olarak her seferinde doğru olan değeri sürekli yazdırmadan değerleri elde edemedim.
Bunların bir kısmını çözdüm ama hala bir koşul doğru olduğunda nasıl durdurulacağını gerçekten öğrenemedim.

Kodunuzda yardımcı olabilecek bir şeyin statik tarih saat bloğu olduğunu görüyorum ve bunu daha önce yalnızca yeni bir çubuk ve yeni bir çubuk zamanı geldiğinde duruma atıfta bulunmak için kullandım.
Bu kısım, çalıştığım şeyle ilgili yardımcı olabilir. Ve şu anki kodum mevcut fraktal ve önceki fraktal üretse de şu anda çalışıyor

Çoğunlukla sahip olduğum tek sorun, bir kez koşul doğru olduğunda, ifadeyi sürekli olarak yazdırıyor, bu da tamam olabilir, ancak bu, o noktaya geldiğimde muhtemelen sürekli bir ticaret gerçekleştireceği anlamına geliyor.

Belki de iCustom göstergelerini nasıl kullanacağım konusunda daha fazla deneyime ihtiyacım var ve bu birçok sorunumu çözebilir, ancak henüz öğrenmemde o kadar uzakta değilim.

Bu kodu ve EMPTY_VALUE kısımlarını biraz daha gözden geçireceğim. Artık kullanımda olduğunu gördüğüme göre bundan da öğrenebilirim. Daha önce önerildi ama nasıl kullanılacağını hiç anlamadım.

üzerinde çalışmaya devam edeceğim
Yardım için teşekkürler
 
Son olarak şunu fark ettim ki şunu eklediğimde if(val1 > 0 && daha hızlı > daha yavaş && traded == false)'a MACD diyelim

Sonra çalışır ve yalnızca tam olarak istediğimi verir; bu, A düşük, B yüksek, sonra ve/veya B düşük ve A yüksek yazdırılır

Ancak, her iki if ifadesinde de daha hızlı > daha yavaş ve daha hızlı < daha yavaş çıkarırsam, ASLA A'yı yüksek yazdırmadığını ve ayrıca kafam karışan diğerlerini sürekli olarak yazdırdığını fark ettim.


Üzerinde çalışmaya devam edeceğim, EA'da başka hiçbir gösterge ifadesi olmadan ifadeyi bir kez yazdırmam gerektiğine eminim, bu nedenle göstergelerin kodun ABCD bölümlerine müdahale etmeyeceğini biliyorum.

Çizim tahtasına geri dön


 

Bence senin sorunun val1 ve val2'yi sıfırlamamış olmanda. Bu nedenle, en yüksek ve en düşük değeri bulduktan sonra, onları sıfırlamanız gerekir:

 double B = val1;
       Print (B, " B high" );
         if (val2== 0 )
            {
             for (i= 0 ; val2== 0 ; i++)
               {
               //Print("i "+i);
               val2= iFractals ( NULL , 0 , MODE_LOWER, i);
               double A = val2;
                   if (A!= 0 )
                     {
                     Print (A, " A low" );
                     }
               }
             }  
      traded=true;
      }
     
   val1= iFractals ( NULL , 0 , MODE_UPPER, 3 );
   val2= iFractals ( NULL , 0 , MODE_LOWER, 3 ); 

     if (val2 > 0 && traded == true)
      {
      B = val2;
       Print (B, " B low" );
         if (val1== 0 )
            {
             for (i= 0 ; val1== 0 ; i++)
               {
               val1= iFractals ( NULL , 0 , MODE_UPPER, i);
               A = val1;
                   if (A!= 0 )
                     {
                     Print (A, " A high" );
                     }
               }
             }  
      traded=false;
      }
Umarım bu yardımcı olur.
Neden: