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

 
RomanRott :

Türkiye'me / danışmanıma, açıldığında diğer bazı göstergeleri hemen bağlayacak bir kod yazmak istiyorum.
Ne ve nasıl eklenir?

Bana öyle geliyor ki, bu test cihazı için gerekli. Bu, programlama olmadan yarım vuruşta çözülür. Gerekli tüm göstergeleri içeren bir şablon oluşturursunuz ve ona "Test Edici" adını veya Uzman Danışmanın adını verirsiniz. ve ardından, test cihazında EA başlatıldığında, önceden yüklenmiş göstergelere sahip bir grafik açılacaktır .

 
RomanRott :

Türkiye'me / danışmanıma, açıldığında diğer bazı göstergeleri hemen bağlayacak bir kod yazmak istiyorum.
Ne ve nasıl eklenir?

Birçok seçenek var. Örneğin 1) ChartApplyTemplate - Belirtilen şablonu grafiğe uygular (gösterge şablonda belirtilir). 2) Açılacak göstergenin kodunu göstergeye ekleyin. 3) göstergeyi Expert Advisor'da grafik nesneler olarak görüntüleyin. 4) ...
 

Tünaydın! Lütfen söyle bana, Vinini_HMA göstergesini danışmana entegre etmek gerekiyor, kaynak ve iCustom aracılığıyla bağlanmayı ve veri almayı başardım, ancak testler çok yavaşladı. Lütfen EA'nın kendisinde hesaplanan gösterge değerlerini nasıl yapabileceğinizi önerin, son 3 mum için sadece bir parametreye ihtiyacınız var.

İşte gösterge kodu:

 #property indicator_chart_window 
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green 
#property indicator_color3 Red 
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- input parameters 
extern int period= 15 ; 
extern int method= 3 ; // MODE_SMA 
extern int price= 0 ; // PRICE_CLOSE 
extern int sdvig= 0 ;
//---- buffers 

double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];

double vect[]; 

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() { 
   IndicatorBuffers ( 4 ); 
   SetIndexBuffer ( 0 , ExtMapBuffer); 
   SetIndexBuffer ( 1 , Uptrend); 
   SetIndexBuffer ( 2 , Dntrend); 
   SetIndexBuffer ( 3 , vect); 
   
   SetIndexStyle ( 0 , DRAW_LINE );
   SetIndexStyle ( 1 , DRAW_LINE );
   SetIndexStyle ( 2 , DRAW_LINE );

   SetIndexDrawBegin ( 0 , 1 *period);
   SetIndexDrawBegin ( 1 , 2 *period);
   SetIndexDrawBegin ( 2 , 3 *period);

   IndicatorShortName ( "Signal Line(" +period+ ")" ); 
   SetIndexLabel ( 1 , "UP" );
   SetIndexLabel ( 2 , "DN" );
   return ( 0 ); 
} 

//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() { return ( 0 ); } 

//+------------------------------------------------------------------+ 
//| ?????????? ??????? | 
//+------------------------------------------------------------------+ 
double WMA( int x, int p) { return ( iMA ( NULL , 0 , p, 0 , method, price, x+sdvig)); } 

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 
int start() { 
   int counted_bars = IndicatorCounted (); 

   if (counted_bars < 0 ) return (- 1 ); 
   if (counted_bars > 0 ) counted_bars--;
   
   int p = MathSqrt (period); 

   int i, limit0,limit1,limit2;
   
   limit2= Bars - counted_bars;
   limit1=limit2;
   limit0=limit1;

   if (counted_bars== 0 ){
      limit1-=(period);
      limit2-=( 2 *period);
   }

   for (i = limit0; i >= 0 ; i--)    vect[i]          = 2 *WMA(i, period/ 2 ) - WMA(i, period); 
   for (i = limit1; i >= 0 ; i--)    ExtMapBuffer[i]  = iMAOnArray (vect, 0 , p, 0 , method, i); 
   for (i = limit2; i >= 0 ; i--) { 
      Uptrend[i] = EMPTY_VALUE ; if (ExtMapBuffer[i]> ExtMapBuffer[i+ 1 ]) Uptrend[i] = ExtMapBuffer[i]; `  AZ4
      Dntrend[i] = EMPTY_VALUE ; if (ExtMapBuffer[i]< ExtMapBuffer[i+ 1 ]) Dntrend[i] = ExtMapBuffer[i]; 
   }
   return ( 0 ); 
} 

ExtMapBuffer[i] tamponunda bulunan son 3 değeri hesaplamak gerekir. Ben acemiyim, kesinlikle yargılama. Bu kod parçalarını danışmana eklemeye çalıştım ama değerler yanlış hesaplanmış

 extern int period1= 14 ;
extern int method1= 3 ;
extern int price1= 0 ;
extern int sdvig1= 0 ;

-----------------------------------------------------
.
int p = MathSqrt (period1);      
        
         int z = 3 ;
         double vect[];
         ArrayResize (vect,z);
        
for ( int i = 2 ; i >= 0 ; i--) vect[i] = 2 *WMA(i, period1/ 2 ) - WMA(i, period1);
                
         int y = 3 ;;
         double HMA[];
         ArrayResize (HMA,y);
        
for (i = 2 ; i >= 0 ; i--) HMA[i]  = iMAOnArray (vect, 0 , p, 0 , method, i);

-------------------------------------------------------

double WMA( int x, int p) { return ( iMA ( NULL , 0 , p, 0 , method1, price1, x+sdvig1)); }

Çok gerekli! Teşekkür ederim! Şimdiden teşekkürler! Ve uzun yazı için özür dilerim.

Dosyalar:
123.png  22 kb
 

Sonuç olarak vect[0], vect[1], vect[2] olmak üzere 3 değer elde ediyorum. Ama HMA değerlerine ihtiyacım var. HMA[0] hesaplandı ancak doğru değil. HMA[1] ve HMA[2] sıfırdır.

 
ilfat85 :

Sonuç olarak vect[0], vect[1], vect[2] olmak üzere 3 değer elde ediyorum. Ama HMA değerlerine ihtiyacım var. HMA[0] hesaplandı ancak doğru değil. HMA[1] ve HMA[2] sıfırdır.

Bu sayfa zaten tartışılmış gibi görünüyor ... Yazarla iletişim kurmayı denediniz mi?
 
ilfat85 :

Tünaydın! Lütfen söyleyin, Vinini_HMA göstergesini Expert Advisor'a entegre etmek gerekiyor, kaynak ve iCustom aracılığıyla bağlanmayı ve veri almayı başardım, ancak testler çok yavaşladı. Lütfen EA'nın kendisinde hesaplanan gösterge değerlerini nasıl yapabileceğinizi önerin, son 3 mum için sadece bir parametreye ihtiyacınız var.

İşte gösterge kodu:

ExtMapBuffer[i] tamponunda bulunan son 3 değeri hesaplamak gerekir. Ben acemiyim, kesinlikle yargılama. Bu kod parçalarını danışmana eklemeye çalıştım ama değerler yanlış hesaplanmış

Çok gerekli! Teşekkür ederim! Şimdiden teşekkürler! Ve uzun yazı için özür dilerim.

Test cihazı için bir kaynağa bağlanmayın - yavaşlar (bu belirli gösterge için geçerli değildir, ancak genel olarak herkes için geçerlidir - test cihazında yavaşlattıkları kaynaklardan).

Dosyanın klasöründeki konumundan (bir kaynaktan değil) iCustom() aracılığıyla basitçe bağlanın

 
STARIJ :
Bu sayfa zaten tartışılmış gibi görünüyor ... Yazarla iletişim kurmayı denediniz mi?

Vitya burada çok nadiren görünür.

 
STARIJ :
Bu sayfa zaten tartışılmış gibi görünüyor ... Yazarla iletişim kurmayı denediniz mi?

Göstergeden değerleri aldıkları yerde biraz farklı bir soru var ama ben değerlerin direkt EA içinde hesaplanmasını istedim. Formüller basit görünüyor ama bir yerde hata yapıyorum. Hayır, yazarla iletişim kurmadım. Tavsiyen için teşekkürler, ona yazmaya çalışacağım.

 
Artyom Trishkin :

Test cihazı için bir kaynağa bağlanmayın - yavaşlar (bu belirli gösterge için geçerli değildir, ancak genel olarak herkes için geçerlidir - test cihazında yavaşlattıkları kaynaklardan).

Dosyanın klasöründeki konumundan (bir kaynaktan değil) iCustom() aracılığıyla basitçe bağlanın


Teşekkür ederim! Bunu bilmiyordum, deneyeceğim.

 

Merhaba. Mumların boyutuna göre bir histogram oluşturuyorum. İlk mumun boyutunun son on mumun en büyüğü olduğunu bilmeye yardımcı olun. Histogramın çubuğunun bir şekilde genişlik veya renkle işaretlenmesi gerekir. Muhtemelen daha fazla arabellek eklemeniz gerekiyor.

 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[])
  {
   int i,limit = Bars - 1 ;
//--- counting from 0 to rates_total
   

//--- the main loop of calculations
   for (i = limit; i >= 0 ; i--)
     {
       if (hl) ExtATRBuffer[i] = ( iHigh ( Symbol (), Period (),i) - iLow ( Symbol (), Period (),i)); 
                        
       else     ExtATRBuffer[i] = MathAbs ( iOpen ( Symbol (), Period (),i) - iClose ( Symbol (), Period (),i));
      
       if (ExtATRBuffer[i] < x) ExtATRBuffer[i] = 0 ;
    
     //
      
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
P