MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 371

 

Tüm forum üyelerine selamlar.

Lütfen, hangi grafiğe ayarlanmış olursa olsun, göstergenin belirli bir sembolle çalışmasını sağlamama yardım edin.

Karakteri değiştirmek için harici bir parametrenin kullanıldığını biliyorum

 input string    Symb   = "GBPJPY" ;
ama sonra ne yapacağımı bilmiyorum

göstergeyi ekliyorum

Dosyalar:
Fisher.mq4  3 kb
 

Lütfen bana yeni bir çubuk görünümüyle arabelleği nasıl sıfırlayacağımı söyleyin, ancak önceki veriler silinmez, ancak grafikte görüntülenir. Nedense arabelleği sıfırlayamıyorum ve yeni bir barın gelmesiyle eski birikmiş veriler yenileriyle kaplanıyor. Kodda neyi yanlış yapıyorum? Açıklamalar için teşekkürler.

 void OnInit ()
{
   IndicatorDigits ( 0 );
   SetIndexBuffer ( 0 ,Buf_1);
   SetIndexBuffer ( 1 ,Buf_2);
   Bid1= Bid ;
  
   
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр= Time [ 0 ];   // Время текущего бара
   if (Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[ 0 ]= 0 ;         // и обнулить последний элемент буфера
      Buf_2[ 0 ]= 0 ;
   }
   
      
   if ( Bid > Bid1) 
   {
   V1 = iVolume ( NULL , 0 , 0 );
   V2 = V1 + V2;
   Buf_1[ 0 ]= V2;
   }                             
   else 
   {
   V3 = iVolume ( NULL , 0 , 0 );
   V4 = V3 + V4;
   Buf_2[ 0 ]= (V4*- 1 );
   }
   Bid1= Bid ;
   
   
   return (rates_total);
}
 
Alekseu Fedotov :

Bunun gibi bir şey


Kodla ilgili bir soru vardı, mevcut kapatılmamış saatlik mumun bir Kapanma süresi olduğu ortaya çıkıyor ve mum kapanana kadar gösterge, göstergenin bulunduğu dönemin fiyatlarının kapanışını çiziyor, ​Saatlik mum kapanmadığı için ekranda kırmızı ile çizilmemesi gereken bu derleme anıdır ve daha sonra derlemeden sonra her kapalı mum çekilir tabiki başka bir şekilde çözebilirsiniz saatlik segmentleri bularak, ama daha basit olmasını istedim, böyle yazardım
 for (i=limit; i> 0 ; i--)
{
yesterday_weekday = TimeHour ( iTime ( Symbol (), 0 ,i+ 1 ))- TimeHour ( iTime ( Symbol (), 0 ,i));
if (yesterday_weekday!= 0 )

Sorunun başka bir çözümü var mı? Teşekkür ederim.

 
MakarFX : Lütfen, hangi grafiğe ayarlanmış olursa olsun, göstergenin belirli bir sembolle çalışmasını sağlamama yardım edin.

Bu parametreyi Higest, Lowest çağrılarına yazmak gerekir - bunlar eskidir, iHigest, iLowest daha iyidir ve övülen kötü şöhretli Fisher hemen beraberliği kabul etti (V. Vysotsky)

 
PokrovMT5 :
Kodla ilgili bir soru vardı, mevcut kapatılmamış saatlik mumun bir Kapanma süresi olduğu ortaya çıkıyor ve mum kapanana kadar gösterge, göstergenin bulunduğu dönemin fiyatlarının kapanışını çiziyor, ​Saatlik mum kapanmadığı için ekranda kırmızı ile çizilmemesi gereken bu derleme anıdır ve daha sonra derlemeden sonra her kapalı mum çekilir tabiki başka bir şekilde çözebilirsiniz saatlik segmentleri bularak, ama daha basit olmasını istedim, böyle yazardım

Sorunun başka bir çözümü var mı? Teşekkür ederim.

Seni doğru anladıysam, grafikte saatlik Kapanışı işaretlemek ister misin?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

 
STARIJ :

Bu parametreyi Higest, Lowest çağrılarına yazmak gerekir - bunlar eskidir, iHigest, iLowest daha iyidir ve övülen kötü şöhretli Fisher hemen beraberliği kabul etti (V. Vysotsky)

#property  copyright "Copyright © 2005, Yura Prokofiev"
#property  link      "Yura.prokofiev@gmail.com"

#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Lime
#property  indicator_color3  Red
 
input string   Symb     ="GBPJPY";
extern int     period   =10;

double         ExtBuffer0[];
double         ExtBuffer1[];
double         ExtBuffer2[];


int init()
  {
   
   
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Red);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Lime);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);

   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);

   IndicatorShortName("Fisher");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);

   return(0);
  }


int start()
  {
   //int     period=10;
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current,old;
   double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
   double price;
   double MinL=0;
   double MaxH=0;  
   

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;


   for(int i=0; i<limit; i++)
    {  MaxH = High[iHighest(Symb,0,MODE_HIGH,period,i)];
       MinL = Low[iLowest(Symb,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;     
      Value=MathMin(MathMax(Value,-0.999),0.999); 
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
      
    }


   bool up=true;
   for(i=limit-2; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
           
      if (((current<0)&&(prev>0))||(current<0))   up= false;    
      if (((current>0)&&(prev<0))||(current>0))   up= true;
      
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
        
       else
         {
          ExtBuffer1[i]=current;
          ExtBuffer2[i]=0.0;
         }
     }

   return(0);
  }
yaptım ama sorunu çözmüyor
price = ( High [i]+ Low [i])/ 2 ;
Yüksek ve Düşük, geçerli karakteri kullanır.
 
Maxim Kuznetsov :

Seni doğru anladıysam, grafikte saatlik Kapanışı işaretlemek ister misin?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

Maksim, iyi günler! Seçenek için teşekkürler, benimki neredeyse aynı, o da çalışıyor, ama Alekseu Fedotov bana farklı bir tane teklif etti, bunun hakkında yazdım ve nasıl düzeltileceği konusunda bir fikir olduğunu yazdım?



 for (i=limit; i>= 0 ; i--)
     {
      T = iTime ( NULL , 0 ,i); 
      shift= iBarShift ( NULL , 60 ,T); 
      C= iClose ( NULL , 60 ,shift);
      CC[i]=C;
     }
 

Lütfen bana yeni bir çubuk görünümüyle arabelleği nasıl sıfırlayacağımı söyleyin, ancak önceki veriler silinmez, ancak grafikte görüntülenir. Nedense arabelleği sıfırlayamıyorum ve yeni bir barın gelmesiyle eski birikmiş veriler yenileriyle kaplanıyor. Kodda neyi yanlış yapıyorum? Açıklamalar için teşekkürler.

 datetime Вр= Time [ 0 ];   // Время текущего бара
   if (Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[ 0 ]= 0 ;         // и обнулить последний элемент буфера
      Buf_2[ 0 ]= 0 ;
   }
   
      
   if ( Bid > Bid1) 
   {
   V1 = iVolume ( NULL , 0 , 0 );
   V2 = V1 + V2;
   Buf_1[ 0 ]= V2;
   }                             
   else 
   {
   V3 = iVolume ( NULL , 0 , 0 );
   V4 = V3 + V4;
   Buf_2[ 0 ]= (V4*- 1 );
   }
   Bid1= Bid ;
   
   
   return (rates_total);
 

Bana kimse yardım edemez mi?

 

Herşey gönlünce olsun! İstenen grafik penceresine nasıl geçilir?

Farklı çiftlerin birçok penceresi açıktır, her birinin bir danışmanı vardır, bir ticaret sinyali görünür, ancak para birimleri işarete kadardır ve sinyalin geldiği tabloyu tam olarak hızlı bir şekilde etkinleştirmeniz gerekir.

Symbol() komutunu biliyorum, ancak verilen para birimi çiftiyle pencereyi nasıl etkinleştireceğimi bilmiyorum. Görevle kim yüzleşebilir?