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

 
-Aleks- :

anlamaya çalışıyorum. Onlar. sizce doğru seçenek SVA_03 değil mi?

Evet belki. Ama _02 kesinlikle yanlıştır.
 
Dmitry Fedoseev :
Evet belki. Ama _02 kesinlikle yanlıştır.

Hmmm... Kendimde bir hata buldum, şimdi neredeyse hiç fark yok, işte orijinali

//+------------------------------------------------------------------+
//|                                                       SVA_04.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link        "http://www.metaquotes.net/"
#property strict

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow

//---- input parameters
extern int RSIPeriod= 14 ;
extern int Levl= 50 ;
extern int TF= 0 ;
//---- buffers
double MABuffer[];
double PosBuffer[];
double NegBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
   IndicatorBuffers ( 1 );
   SetIndexBuffer ( 0 ,MABuffer);
   SetIndexBuffer ( 1 ,PosBuffer);
   SetIndexBuffer ( 2 ,NegBuffer);
//---- indicator line
   SetIndexStyle ( 0 , DRAW_LINE );
//----
//---- name for DataWindow and indicator subwindow label
//   short_name="RSI("+IntegerToString(RSIPeriod)+")";
   short_name= "RSI(" +RSIPeriod+ ")" ;
   IndicatorShortName (short_name);
   SetIndexLabel ( 0 ,short_name);
   SetIndexLabel ( 1 , "U" );
   SetIndexLabel ( 2 , "D" );
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int     i,counted_bars= IndicatorCounted ();
   double rel,negative,positive,sma,x,y,Pos,Neg;
//----
   if ( Bars <=RSIPeriod) return ( 0 );
   if (TF!= 0 )
     {
       string name= WindowExpertName ();
       for (i= 0 ; i< Bars -counted_bars+ 1 ; i++)
        {
         int barIndex= iBarShift ( NULL ,TF, Time [i], false );
         MABuffer[i]= iCustom ( Symbol (),TF,name,RSIPeriod,Levl, 0 , 0 ,barIndex);
        }
       return ( 0 );
     }

   i= Bars -RSIPeriod- 1 ;
   if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
       double sumn= 0.0 ,sump= 0.0 ;
       if (i== Bars -RSIPeriod- 1 )
        {
         int k= Bars - 2 ;
         //---- initial accumulation
         while (k>=i)
           {
            rel= Close [k]- Close [k+ 1 ];
             if (rel> 0 ) sump+=rel;
             else       sumn-=rel;
            k--;
           }
         positive=sump/RSIPeriod;
         negative=sumn/RSIPeriod;
        }
       else
        {
         //---- smoothed moving average
         rel= Close [i]- Close [i+ 1 ];
         if (rel> 0 ) sump=rel;
         else       sumn=-rel;
         positive=(PosBuffer[i+ 1 ]*(RSIPeriod- 1 )+sump)/RSIPeriod;
         negative=(NegBuffer[i+ 1 ]*(RSIPeriod- 1 )+sumn)/RSIPeriod;
        }
      PosBuffer[i]=positive;
      NegBuffer[i]=negative;
      i--;
     }
   i= Bars -RSIPeriod- 1 ;
   if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {

      x=PosBuffer[i+ 1 ];
      y=NegBuffer[i+ 1 ];
       if (x> 0 )sma= Close [i+ 1 ]+x;
       else sma= Close [i+ 1 ]-y;
      MABuffer[i]=sma;
      i--;
     }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

İşte düzeltmeli SVA_03 varyantı

//+------------------------------------------------------------------+
//|                                                       SVA_03.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link        "http://www.metaquotes.net/"
#property strict

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow

//---- input parameters
extern int RSIPeriod= 14 ;
extern int Levl= 50 ;
extern int TF= 0 ;
//---- buffers
double MABuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
   IndicatorBuffers ( 1 );
   SetIndexBuffer ( 0 ,MABuffer);

//---- indicator line
   SetIndexStyle ( 0 , DRAW_LINE );
//----
//---- name for DataWindow and indicator subwindow label
//   short_name="RSI("+IntegerToString(RSIPeriod)+")";
   short_name= "RSI(" +RSIPeriod+ ")" ;
   IndicatorShortName (short_name);
   SetIndexLabel ( 0 ,short_name);

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int     i,counted_bars= IndicatorCounted ();
   double rel,negative,positive,sma,x,y,Pos,Neg;
//----
   if ( Bars <=RSIPeriod) return ( 0 );
   if (TF!= 0 )
     {
       string name= WindowExpertName ();
       for (i= 0 ; i< Bars -counted_bars+ 1 ; i++)
        {
         int barIndex= iBarShift ( NULL ,TF, Time [i], false );
         MABuffer[i]= iCustom ( Symbol (),TF,name,RSIPeriod,Levl, 0 , 0 ,barIndex);
        }
       return ( 0 );
     }

   i= Bars -RSIPeriod- 1 ;
   if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
       double sumn= 0.0 ,sump= 0.0 ;
       if (i== Bars -RSIPeriod- 1 )
        {
         int k= Bars - 2 ;
         //---- initial accumulation
         while (k>=i)
           {
            rel= Close [k]- Close [k+ 1 ];
             if (rel> 0 ) sump+=rel;
             else       sumn-=rel;
            k--;
           }
         positive=sump/RSIPeriod;
         negative=sumn/RSIPeriod;
        }
       else
        {
         //---- smoothed moving average
         rel= Close [i]- Close [i+ 1 ];
         if (rel> 0 ) sump=rel;
         else       sumn=-rel;
         positive=(Pos*(RSIPeriod- 1 )+sump)/RSIPeriod;
         negative=(Neg*(RSIPeriod- 1 )+sumn)/RSIPeriod;
        }

      x=Pos;
      y=Neg;
      Pos=positive;
      Neg=negative;
       if (x> 0 )sma= Close [i+ 1 ]+x;
       else sma= Close [i+ 1 ]-y;
      MABuffer[i]=sma;

      i--;
     }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

orada değiştirildi

      x=positive;;
      y=negative;

üzerinde

      x=Pos;
      y=Neg;
Tarih birleşiyor, ancak sıfır çubuğunda sorunlar var - bir tutarsızlık var, onları nasıl durdurabilirim?
Dosyalar:
SVA_03.mq4  3 kb
SVA_04.mq4  4 kb
 
Yanlışlıkla yanlış dosyayı yükledim - yukarıda değiştirdim ...
 
-Aleks- :
История сходится, но проблемы на нулевом баре - имеется расхождение, как их купировать?
Tabii ki, sorunun sıfır çubuğundaki yeniden hesaplamadan kaynaklandığını anlıyorum, ancak bunu nasıl çözeceğimi bulamıyorum?
 

Tünaydın!

Yardım! Bekleyen bir siparişi açacak bir koda ihtiyacınız var. Ve sipariş açıldıktan 20 dakika sonra kapatılmazsa SL 50 puana dönüşecektir. Teşekkür ederim!

 

Tünaydın

Lütfen bana çok basit (muhtemelen) bir soruyla yardım edin. Standart bir işlev vardır:

int    ArraySize ( const void & array[]);

"const void &" ne anlama geliyor ve nasıl kullanılır? Benzer bir işlevi yazmaya yönelik basit bir girişim bile derleme hatasıyla sonuçlanır:

int test( const void & array[]) {
     return ArraySize (array);
}

Derleme hatası: 'const' - 'void' türünün yasa dışı kullanımı

Kodunuzu yazarken "const void &" kullanmanın doğru yolu nedir ? Ve hiç mümkün mü?

 
mql4-2016 :

Tünaydın

Lütfen çok basit (muhtemelen) bir soruyla yardım edin. Standart bir işlev vardır:

int    ArraySize ( const void & array[]);

"const void &" ne anlama geliyor ve nasıl kullanılır? Benzer bir işlevi yazmaya yönelik basit bir girişim bile derleme hatasıyla sonuçlanır:

int test( const void & array[]) {
     return ArraySize (array);
}

Derleme hatası: 'const' - 'void' türünün yasa dışı kullanımı

Kodunuzu yazarken "const void &" kullanmanın doğru yolu nedir ? Ve hiç mümkün mü?

Dizinin depolamasını istediğiniz veri türüyle void'i değiştirin. Standart işlev bir şablon olarak çerçevelenmiştir.

Aslında, bu sistem işlevi aşırı yüklenmiştir ve böyle bir aşırı yüklemenin tüm uygulaması MQL4 programlarının geliştiricisinden gizlenmiştir:

int DiziSize (
    boşluk &    sıralamak[]        // kontrol edilen dizi
);

Yani, aslında, MQL4 dilinin derleyicisi, bu işleve yapılan her çağrı için gerekli uygulamayı, örneğin tamsayı türündeki diziler için, bunun gibi bir şeyle değiştirir:

int DiziSize (
    int &    sıralamak[]        // int türünden öğeler içeren dizi
);

Ve tarihsel veri biçiminde tırnak işaretleri ile çalışmak için MqlRates türünden bir dizi için, ArraySize() işlevi aşağıdaki gibi temsil edilebilir:

int DiziSize (
    MqlOranlar &    sıralamak[]   // MqlRates türü değerleriyle dolu dizi
);

 
Kot :

Tünaydın!

Yardım! Bekleyen bir siparişi açacak bir koda ihtiyacınız var. Ve emir açıldıktan 20 dakika sonra kapatılmazsa SL 50 puana dönüşecektir. Teşekkür ederim!

Size nasıl yardım edebilirim? senin için yaz? Bu serbest meslek lütfen.
 
Artyom Trishkin :

void'i dizinin depolaması gereken veri türüyle değiştirin. Standart işlev bir şablon olarak çerçevelenmiştir.

Aslında, bu sistem işlevi aşırı yüklenmiştir ve böyle bir aşırı yüklemenin tüm uygulaması MQL4 programlarının geliştiricisinden gizlenmiştir.

MQL4/MQL5'te "const void &" yapısının aslında referans kitabı için sembolik bir gösterim olduğunu ve pratikte fonksiyonlarınızda bu şekilde yazmanın imkansız olduğunu doğru anladım mı?

Şimdiden teşekkürler

 
mql4-2016 :

MQL4/MQL5'te "const void &" yapısının aslında referans kitabı için sembolik bir gösterim olduğunu ve pratikte fonksiyonlarınızda bu şekilde yazmanın imkansız olduğunu doğru anladım mı?

Şimdiden teşekkürler

Yasaktır.
Neden: