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

 

EA, işlemden sonra 33. çubuktan çıkar:

 static datetime t;

if (условие)
      {
      Opn_B = true ; 
      t=Time[ 0 ];
      minimum = iLow( Symbol (), Period (), 0 );
      }
if (Time[ 33 ]>t) 
          {                                      
          Cls_B= true ;              
          }

Gerçek hayatta ve test cihazında 43 barda çıktı. Beşinci çubukta çıkış parametrelerini ayarlamaya çalıştım, her şey yolunda. Sevgili, sence sorun ne olabilir?

 
Forexman77 :

EA, işlemden sonra 33. çubuktan çıkar:

Gerçek hayatta ve test cihazında 43 barda çıktı. Beşinci çubukta çıkış parametrelerini ayarlamaya çalıştım, her şey yolunda. Sevgili, sence sorun ne olabilir?


Ya da belki (koşul) birkaç kez yürütüldüyse (örneğin 10. çubukta bir kez daha)? ve bu infaz yaşam süresini geciktirdi

 
ALXIMIKS :


Ya da (koşul) birkaç kez (örneğin 10. çubukta bir kez daha) yürütüldüyse? ve bu infaz yaşam süresini geciktirdi

Tek işlem: 15:37 giriş, 16:19 çıkış. Daha doğru olmak için 41 barda çıkın.
 
Forexman77 :
Tek işlem: 15:37 giriş, 16:19 çıkış. Daha doğru olmak için 41 barda çıkın.


Ve iBarShift ile değiştirirseniz, hatanın devam etmesi ilginçtir ??? Belki de tarihteki çubukların ihmalleri (kesinlikle delik yok mu?)?

Koşul yerine getirildikten sonra, açık çubukların bir listesini girin, kaç tanesinin gerçekten açıldığını görün, aksi takdirde zamana atıfta bulunmak bir şekilde çok doğru değil

 
ALXIMIKS :


Ve iBarShift ile değiştirirseniz, hatanın devam etmesi ilginçtir ??? Belki de tarihteki çubukların ihmalleri (kesinlikle delik yok mu?) ?

Koşul yerine getirildikten sonra, açık çubukların listesine girin, kaç tanesinin gerçekten açıldığını görün, aksi takdirde zamana atıfta bulunmak bir şekilde çok doğru değil

Kod böyle mi olmalı?

 static datetime t;
datetime s=Time[ 33 ]>t;

if (условие)
    {
      Opn_B = true ; 
      t=Time[ 0 ];
       int shif= iBarShift( Symbol (), PERIOD_M1 ,t, false );
      minimum = iLow( Symbol (), Period (), 0 );
      }
if (iBarShift( Symbol (), PERIOD_M1 ,s, false )) 
    {                                      
     Cls_B= true ;              
    }

Böyle bir kod, Uzman Danışmanı döngüye sokar.

 

Merhaba, lütfen uyarıyı yalnızca ilk satırda değil, her satırda çubuk başına bir kez geçirmeme yardım edin,

sinyal sayısını zamana göre sınırladım, ancak bir çubuk için nasıl tampon yapılacağını anlamıyorum

 datetime LastAlertTime = 0;
 int start()
  {

   string namesymb= Symbol ();
   string tf= Period ();

       for ( int i = ObjectsTotal ()- 1 ; i >= 0 ; i--)
      {
         string name = ObjectName (i);
         
         if (ObjectType(name) == OBJ_TREND )
         {
             double value = ObjectGetValueByShift(name, 0 );                    
             if (Bid <= value + Point && Bid >= value - Point )          
            {
             if (LastAlertTime < Time[ 0 ]){
            LastAlertTime = Time[ 0 ];
            
               Alert (namesymb, "  M" ,tf, "   " ,name);
             }
                 Comment ( "\n\n Alert running \n " , TimeToStr( TimeLocal (), TIME_DATE|TIME_SECONDS), "\n\n M" ,tf, "   " ,name); 
            } 
         }      
}
 
Forexman77 :

EA, işlemden sonra 33. çubuktan çıkar:

Gerçek hayatta ve test cihazında 43 barda çıktı. Beşinci çubukta çıkış parametrelerini ayarlamaya çalıştım, her şey yolunda. Sevgili, sence sorun ne olabilir?


Ayık bir kafa ile başlayalım.

Bayrak operasyon zamanı Opn_B = true ; sipariş aynı anda açılmayabileceğinden henüz bir şey ifade etmiyor.

OrderOpenTime sipariş açılış saatini kullanabilir veya t değişkenini başarılı bir açılıştan sonraki zamana ayarlayabilirsiniz.

Sonraki: kullandınız

minimum = iLow( Symbol (), Period (), 0 );

1) iLow'a ihtiyacınız var mı yoksa aynı para birimini ve zaman dilimini kullanırsanız sadece Düşük mü daha iyi olur?

2) Sembol () ve Nokta () değerlerinin çoklu kullanım ile değişkenlere girmesi daha iyidir. Her şey performansı etkiler - buna alışın.

Dakika tablosu pahasına - bir dakika içinde tek bir tik yoksa - yeni bir çubuk çizilmez (şaka olabilir)

Ve iBarShift'e gelince

 static datetime t;

if (условие)
      {
      Opn_B = true ; 
      t=Time[ 0 ];
      minimum = iLow( Symbol (), Period (), 0 );
      }
if (iBarShift( Symbol (), 1 ,t, false )> 33 ) 
          {                                      
          Cls_B= true ;              
          }

Şu an için en uygun seçenek şu görünüyor

 if (( TimeCurrent -t)/ 60 )> 33 ) Cls_B= true ;
 
oleksaz :

Merhaba, lütfen uyarıyı yalnızca ilk satırda değil, her satırda çubuk başına bir kez geçirmeme yardım edin,

sinyal sayısını zamana göre sınırladım, ancak bir çubuk için nasıl tampon yapılacağını anlamıyorum

 string namesymb= Symbol ();
string tf= Period ();

Her kene üzerinde değişkenleri yeniden atamaya değer mi?

tf = Period () dizesi 1.000.000 döngüde performansı etkiler mi , yoksa daha doğru mu int tf = Period () ? İşte bilmiyorum.

 if (Bid <= value + Point && Bid >= value - Point)  

Durum doğru mu? Ve hepchik 4 pip ise?

 if (LastAlertTime < Time[ 0 ])
LastAlertTime = Time[ 0 ];
          

Burada başka bir sorunumuz var. Yani, ilk satır için koşul yerine getirilirse, ikinci satır için zaten açıkça yanlış olacak ve uyarı görüntülenmeyecek,

mumun açılış zamanı sadece yenisinin gelmesiyle değişeceğinden, bir sonraki tıklamada bile görüntülenmez.

 
ALXIMIKS :


Şu an için en uygun seçenek şu görünüyor


Üzgünüz, ancak zamanla çubuk sayısını saymaya çalışmak çok yetersiz bir yaklaşım.
 
ALXIMIKS :

Her kene üzerinde değişkenleri yeniden atamaya değer mi?

tf = Period () dizesi 1000000 döngüde performansı etkiler mi , yoksa daha doğru mu int tf = Period () ? İşte bilmiyorum.

Durum doğru mu? Ve hepchik 4 pip ise?

Burada başka bir sorunumuz var. Yani, ilk satır için koşul yerine getirilirse, ikinci satır için zaten açıkça yanlış olacak ve uyarı görüntülenmeyecek,

mumun açılış zamanı sadece yenisinin gelmesiyle değişeceğinden, bir sonraki tıklamada bile görüntülenmez.


 int start()
  {
string scrdate,nametf;

         if ( Period ()== PERIOD_M1 )  nametf= "9_M1" ;
         if ( Period ()== PERIOD_M5 )  nametf= "8_M5" ;
         if ( Period ()== PERIOD_M15 ) nametf= "7_M15" ;
         if ( Period ()== PERIOD_M30 ) nametf= "6_M30" ;
         if ( Period ()== PERIOD_H1 )  nametf= "5_H1" ;
         if ( Period ()== PERIOD_H4 )  nametf= "4_H4" ;
         if ( Period ()== PERIOD_D1 )  nametf= "3_D1" ;
         if ( Period ()== PERIOD_W1 )  nametf= "2_W1" ;
         if ( Period ()== PERIOD_MN1 ) nametf= "1_Monthly" ;
/////////////////  
       for ( int i = ObjectsTotal ()- 1 ; i >= 0 ; i--) //мониторим все объекты
      {
         string name = ObjectName (i); //имя объектов берем из i переменной
         
         scrdate= StringConcatenate ( Symbol (), " " ,TimeToStr( TimeCurrent (), TIME_DATE), "_" ,Hour(), "." ,Minute(), " " ,nametf, " " , ".jpg" ); //,name

         if (ObjectType(name) == OBJ_TREND ) //отбираем тип по имени 
         {
             double value = ObjectGetValueByShift(name, 0 ); //функция для объектов
            
             Comment ( "\n\n Alert running \n " , TimeToStr( TimeLocal (), TIME_DATE|TIME_SECONDS), "\n\n M" , Period (), "   " ,name);           
            
             if(Bid <= value + Point && Bid >= value - Point)
             
            {
             if (LastAlertTime < Time[ 0 ]){
            LastAlertTime = Time[ 0 ];
            
               Alert ( Symbol (), "  M" , Period (), "   " ,name);
               /////////////////////////////////////////////////
               WindowScreenShot(scrdate, 1920 , 1200 , 0 ,- 1 ,- 1 );
               ////////////////////////////////////////////////////////
             }               
            }
         }
}
   return ( 0 );
  }

1. kaldırıldı

2. Sinyal yoksa (olması gerektiği gibi) sinyal yoksa -> fiyat yoksa -> anlaşma yoksa katılıyorum

3. Bunu yukarıda söyledim ama ne yapacağımı bilmiyorum

Cevap için teşekkürler

Neden: