iCustom'un ayrıntılı açıklaması

 

Merhaba.

Kodlamada yeniyim ve çok şey öğreniyorum, ancak şu anda kafamı toparlayamadığım bir şeye çarptım. Bir işlem yapmadan önce kendi testlerine ekleyebilmesi için göstergelerimden birinde bir testin sonucunu bir adete çağırmaya çalışıyorum. Ea, basit bir hareketli ortalama çarpıdır. Gösterge, eğilim gösteren veya değişen bir göstergedir. Gösterge kodunu ekledim.

Yardım istiyorum ve eğer mümkünse basitçe açıklanmış , böylece göstergenin içinde nasıl kurulması gerektiği konusunda kafamı kurcalayabilirim, ea'nın onu tanıması için. Göstergeyi sıraladıktan sonra, ea'ya geçeceğim.

Göstergenin, iCustom işlevini eklemek istediğim iki testi var. Bu aşamada, sadece bir testte eklemek istiyorum, hangisi olduğu önemli değil, anlamaya çalışıyorum. Yardım etmek ve basitçe açıklamak isteyen herkes çok faydalı olacaktır - Çevrimiçi olarak açıklayan hiçbir şey bulamıyorum, bu yüzden anlıyorum. Testin sonucu basitçe "doğru" olabilir.

Zaman ayırdığınız için şimdiden teşekkürler.
Mike

 //---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Yellow
#property  indicator_color2  Red
#property  indicator_width1   1

//---- indicator parameters
extern string PairName = "" ;   // Leave blank for the pair of the chart, enter other pair name to compare correlated pairs

extern int StdDev.MA. Period = 12 ;   // D1=20
extern int StdDev.MA.Shift= 0 ;     //
extern int StdDev.MA.Method = 0 ; // 0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int StdDev.MA.Price = 0 ;   // 0 Close price, 1 Open price, 2 High price, 3 Low price, 4 Median price, (high+low)/2, 5 Typical price, (high+low+close)/3, 6 Weighted close price, (high+low+close+close)/4

extern int MA.Fast. Period = 3 ;
extern int MA.Fast.Method = 2 ;   //  0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int MA.Fast.Shift = 0 ;

extern bool CheckOncePerBar = true;

int i, limit, counted_bars;
static string Pair1;

datetime CurrentTimeStamp;

//---- indicator buffers
double      STDBuffer[];
double      stddevma[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
   IndicatorDigits ( Digits + 1 );
     
//---- drawing settings
   SetIndexStyle ( 0 , DRAW_LINE ); // 
   SetIndexStyle ( 1 , DRAW_LINE );

      
//---- indicator buffers mapping
   SetIndexBuffer ( 0 , STDBuffer);
   SetIndexBuffer ( 1 , stddevma);

   
   if (PairName == "" ) Pair1 = Symbol ();
   else Pair1 = PairName;

//---- name for DataWindow and indicator subwindow label
   IndicatorShortName ( "SFX TOR: " +Pair1+ "(" +StdDev.MA. Period + ")" );
   SetIndexLabel ( 0 , "StdDev" );
   SetIndexLabel ( 1 , "StdDev MA" );

//---- initialization done
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {

   counted_bars= IndicatorCounted ();
   
//---- last counted bar will be recounted
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;
   
//---- macd counted in the 1-st buffer
   for ( int i=limit- 1 ; i>= 0 ; i--){
     STDBuffer[i]= iStdDev (Pair1, 0 ,StdDev.MA. Period , StdDev.MA.Shift, StdDev.MA.Method, StdDev.MA.Price, i);
     }
   for (i=limit- 1 ; i>= 0 ; i--){
     stddevma[i] = iMAOnArray (STDBuffer, 0 , MA.Fast. Period , MA.Fast.Shift, MA.Fast.Method, i);
     } 
    
//Execute on bar Open
     if ( CheckOncePerBar == true ){
       if ( CurrentTimeStamp == Time[ 0 ] )
         return ( 0 );
   }
   
   CurrentTimeStamp = Time [ 0 ];
   
//Tests
        
       if ( STDBuffer[ 1 ] > stddevma[ 1 ] ){
       if ( STDBuffer[ 2 ] <= stddevma[ 2 ]){
         PlaySound ( "alert.wav" );
         Alert ( Symbol (), " M" , Period (), " 30MCrossing" );
         SendMail ( "30MCrossing" , "30MCrossing" );
      }   
   }
   else { // if it's not greater then it is either lesser than or equal
       if ( STDBuffer[ 2 ] >= stddevma[ 2 ]){
         PlaySound ( "alert.wav" );
         Alert ( Symbol (), " M" , Period (), " 30MCrossing" );
         SendMail ( "30MCrossing" , "30MCrossing" );  
      }
   }
          
//---- done
   return ( 0 );
  }
 

iCustom, Gösterge arabelleklerinize erişmenizi sağlar. . . bu kadar basit.

Örneğin, 2 Göstergeye dayalı bir stratejisi olan bir EA yazıyorsunuz, Gösterge kodunu EA'ya oluşturabilirsiniz, bu mümkündür, ancak Gösterge arabellekleri EA'larda çalışmadığından biraz dahil olur, kullanmanız gerekir diziler ve bunları "seri olarak" bir şekilde ele alır. . . alternatif, Göstergelerin çalışmasını sağlamak ve arabelleklerine EA'dan erişmektir. . . iCustom bunu kolaylaştırır. Göstergelerde herhangi bir değişiklik yapılmasına gerek yoktur. . . . EA, ihtiyaç duyduğu vardiya değerlerinde ihtiyaç duyduğu arabelleklere basitçe erişir. iCustom çağrısında, Göstergeyi uygun şekilde ayarlamak için gereken harici değişkenleri de iletebilir.

 
RaptorUK :

iCustom, Gösterge arabelleklerinize erişmenizi sağlar. . . bu kadar basit.

Örneğin, 2 Göstergeye dayalı bir stratejisi olan bir EA yazıyorsunuz, Gösterge kodunu EA'ya oluşturabilirsiniz, bu mümkündür, ancak Gösterge arabellekleri EA'larda çalışmadığından biraz dahil olur, kullanmanız gerekir diziler ve bunları "seri olarak" bir şekilde ele alır. . . alternatif, Göstergelerin çalışmasını sağlamak ve arabelleklerine EA'dan erişmektir. . . iCustom bunu kolaylaştırır. Göstergelerde herhangi bir değişiklik yapılmasına gerek yoktur. . . . EA, ihtiyaç duyduğu vardiya değerlerinde ihtiyaç duyduğu arabelleklere basitçe erişir. iCustom çağrısında, Göstergeyi uygun şekilde ayarlamak için gereken harici değişkenleri de iletebilir.


Bu RaptorUK için teşekkürler, ancak asıl zorluk çektiğim şey kodlama. MQL4'te çok yeniyim ve bunu sadece birkaç aydır yapıyorum ve hala öğreniyorum - bu yüzden kodlamanın basit bir açıklamasına ve göstergede nasıl kurulacağına ihtiyacım var.

teşekkürler

Mike

 

RaptorUK :

iCustom çağrısında, Göstergeyi uygun şekilde ayarlamak için gereken harici değişkenleri de iletebilir.

düzeltme...

iCustom'da arayın

MUTLAK

Göstergeyi uygun şekilde ayarlamak için gereken harici değişkenleri de iletin.
 
NewCoder47 :


Bu RaptorUK için teşekkürler, ancak zorluk çektiğim asıl kodlama. MQL4'te çok yeniyim ve bunu sadece birkaç aydır yapıyorum ve hala öğreniyorum - bu nedenle kodlama ve bunu göstergede nasıl kuracağım hakkında basit bir açıklamaya ihtiyacım var.

teşekkürler

Mike

Burada açıkça eksik olan şey, göstergede iCustom kullanmamanızdır. Gösterge bağımsız bir kod parçasıdır. EA'nız artık iCustom komutunu kullanarak göstergede neler olup bittiğine gizlice göz atabilir.

https://docs.mql4.com/indicators/iCustom

https://forum.mql4.com/42002

 
dabbler :

düzeltme...

iCustom'da onu arayın

MUTLAK

Göstergeyi uygun şekilde ayarlamak için gereken harici değişkenleri de iletin.
Dış değerler boş bırakılabilir. iCustom() göstergesi daha sonra varsayılan değerlerini kullanır.
 
dabbler :

düzeltme...

iCustom'da onu arayın

MUTLAK

Göstergeyi uygun şekilde ayarlamak için gereken harici değişkenleri de iletin.

Bununla ilgili farklı açıklamalar okudum. . . iCustom'u hiç kullanmadım, bu yüzden kişisel deneyimime dayanarak konuşamam. . . ancak, varsayılan harici değişkenler gerekli olduğunda bile ifadeniz doğru mu?
 
RaptorUK :
Bununla ilgili farklı açıklamalar okudum. . . iCustom'u hiç kullanmadım, bu yüzden kişisel deneyimime dayanarak konuşamam. . . ancak, varsayılan harici değişkenler gerekli olduğunda bile ifadeniz doğru mu?
Evet. Sorun şu ki, iCustom'un son iki parametresi çok önemlidir, bu nedenle hiçbir şeyi atlayamazsınız.
 
dabbler :
Evet. Sorun şu ki, iCustom'un son iki parametresi çok önemlidir, bu nedenle hiçbir şeyi atlayamazsınız.
Elbette . . . Teşekkürler.
 
ubzen :
Dış değerler boş bırakılabilir. iCustom() göstergesi daha sonra varsayılan değerlerini kullanır.
Hayır, yapamazsın. Sadece denedim. Virgüller arasında boş bir yer bırakarak parametrelerden birini bırakırsanız derlenmez.
 
NewCoder47 :


.... MQL4'te çok yeniyim ve bunu sadece birkaç aydır yapıyorum ve hala öğreniyorum - bu yüzden kodlama ve göstergede nasıl kurulacağına dair basit bir açıklamaya ihtiyacım var....

Göstergeyi BarrowBoy'un Trend_Or_Range göstergesi olarak tanıyorum. Göstergeleri anlamanın anahtarı Dizileri anlamaktır. Mql4 kullanırken 1. günden beri onları kullandığımı anlayana kadar Dizilerden sağlıklı bir korkum vardı. OrderSelect() ve Ma_CrossOver Logics, herhangi bir EA yapmak için anlaşılması gereken ilk şeylerden bazılarıdır.

Raptor ve Dabber'ın işaret ettiği gibi. Onlar sadece Geriye veya İleriye doğru sayılan bir Sayı Dizisidir. Göstergeler, Uzmanlardan çok daha fazla görsel araç kullanmanın katma değerine sahiptir. Bu Özel Gösterge, Standart Sapma ve Hareketli Ortalamalar gibi çok sayıda standart Gösterge kullandığından, bu hesaplamaları EA içinde yapmanızı tavsiye ederim.