Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 224

 
Danışmanda, ilk satırlar
 OnTick ()

bu satırlardan sonra, sonraki kod her mum için bir kez yürütülür. oluşumu sırasında.

Anladığım kadarıyla bu göstergeyi bir danışmandan mı arıyorsunuz?

 
Aleksei Stepanenko :
Danışmanda, ilk satırlar

bu satırlardan sonra, sonraki kod her mum için bir kez yürütülür. oluşumu sırasında.

Anladığım kadarıyla bu göstergeyi bir danışmandan mı arıyorsunuz?

Genel olarak, bu göstergeyi başka bir programa bir sinyal ileten başka bir göstergeye yerleştiriyorum. Yani danışman yok. Yani, onu göstergenin kendisinde bir yere gömmeniz gerekiyor, ama nasıl?
 
Ve hangi program fırsatları açar? O danışmandır. Değil?
 
Aleksei Stepanenko :
Ve hangi program işlemleri açar? O danışmandır. Değil?

Ahh, peki, belki... Ama sonra her şey daha karmaşık hale geliyor, düz... Onu bu koda gömemezsiniz, değil mi? Ve ikinci göstergenin kodunda da kod yok

 OnTick ()
Nasıl oluyor da böyle çalışıyor?
 
Farklı bir şekilde deneyebilirsiniz, iCustom üzerinden bu göstergeyi çağırdığınız yerde bu fonksiyonun sonuna 0 yerine 1 koyun.
 
Bu arada, her neyse, gösterge de çok fazla ok çiziyor, ancak grafiği yeniden yüklediğinizde, yalnızca bir kısmı kalıyor. :( Tarihte gösterge kendini koruyormuş gibi, bakın nasıl iyi ticaret yapıyorum ama gerçek zamanlı olarak her şey tamamen farklı. :(
 
ElenkaVladi :
Bu arada, her neyse, gösterge ayrıca çok fazla ok çiziyor,

Evet? Hmm, sonra bakarım.

 
Aleksei Stepanenko :
Farklı bir şekilde deneyebilirsiniz, iCustom üzerinden bu göstergeyi çağırdığınız yerde bu fonksiyonun sonuna 0 yerine 1 koyun.

Tam burada mı?

 if (IndicatorName != "" ) {
      up = iCustom ( NULL , 0 , IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom ( NULL , 0 , IndicatorName, IndiBufferPut, SignalType);
 if (IndicatorName != "" ) {
      up = iCustom ( NULL , 1 , IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom ( NULL , 1 , IndicatorName, IndiBufferPut, SignalType);

Nasıl yapılır?

 
Aleksei Stepanenko :

Evet? Hmm, sonra bakarım.

Mesaj olabilir mi? Hala dediklerini yapmak zorunda mısın?

https://www.mql5.com/ru/forum/160587/page223#comment_19618305

Her durumda, burada bizimle olduğunuz için çok teşekkür ederiz... :)))

Durumun daha iyi anlaşılması için dosyaları ekliyorum.

Вопросы от начинающих MQL4 MT4 MetaTrader 4
Вопросы от начинающих MQL4 MT4 MetaTrader 4
  • 2020.11.29
  • www.mql5.com
Если у Вас вопросы по MQL4, MT4, MetaTrader 4, пожалуйста пишите в этой теме. Особенно когда вопросы касаются торговых функций...
 
ElenkaVladi :

İşte çalışma kodu:

 //---- indicator settings
#property   indicator_chart_window
#property   indicator_buffers 2
#property   indicator_color1   Blue
#property   indicator_color2   Red
//---- indicator parameters
extern int   period = 4 ; //12
extern int   shift  = 0 ; //сдвиг по бару
//---- indicator buffers
double BufferUp[],BufferDn[];
double Ma[],MaOn[];

datetime LastTime= 0 ;
int i, st= 5 ;

int OnInit ()
   {
   IndicatorBuffers( 2 );
//---- drawing settings
   SetIndexStyle( 0 , DRAW_ARROW , 2 );
   SetIndexArrow( 0 , 233 );
   SetIndexStyle( 1 , DRAW_ARROW , 2 );
   SetIndexArrow( 1 , 234 );

   SetIndexBuffer ( 0 ,BufferUp); //стрелка синяя верх
   SetIndexBuffer ( 1 ,BufferDn); //стрелка красная вниз
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName( "T3MA-ALARM (" +period+ ")" );
   
   ArraySetAsSeries (Ma, true );
   ArraySetAsSeries (MaOn, true );
//---- initialization done
   if ( Digits == 3 || Digits == 5 ) st*= 10 ;
   return ( INIT_SUCCEEDED );
   }
   
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[])
   {
   if (rates_total<= MathMax (period,shift)) return ( 0 );
   int limit=rates_total-prev_calculated;   
   if (prev_calculated> 0 ) limit++;

   if (LastTime!=time[ 1 ])
      {
      LastTime=time[ 1 ];
       ArrayCopy (Ma,Ma,rates_total- ArraySize (Ma), 0 , WHOLE_ARRAY );
       ArrayCopy (MaOn,MaOn,rates_total- ArraySize (MaOn), 0 , WHOLE_ARRAY );
      }

   for (i=limit; i>= 1 ; i--) Ma[i]= iMA ( NULL , 0 ,period, 0 , MODE_EMA , PRICE_CLOSE ,i);
   for (i=limit; i>= 1 ; i--) MaOn[i]=iMAOnArray(Ma,rates_total,period, 0 , MODE_EMA ,i);
      
   for (i=limit; i>= 1 ; i--)
      {
       if (MaOn[i+shift]-MaOn[i+ 1 +shift]< 0 && MaOn[i+ 1 +shift]-MaOn[i+ 2 +shift]> 0 ){BufferDn[i+ 1 ]=high[i+ 1 ]+st* Point ;}
       if (MaOn[i+shift]-MaOn[i+ 1 +shift]> 0 && MaOn[i+ 1 +shift]-MaOn[i+ 2 +shift]< 0 ){BufferUp[i+ 1 ]=low[i+ 1 ]-st* Point ;}
      }
   return (rates_total);
   }
Okun geriye dönük olarak çizildiğini unutmayın BufferDn[i+ 1 ]=... Bu üzücü.
Neden: