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

 
Алексей КоКоКо :
lütfen bana mql5 hakkında bilgi verin, örneğin 12 saatlik mum gibi ortalama boyut istatistiklerini toplamak istiyorum, örneğin bugün cuma ve hesaplamalar için perşembe, çarşamba, salı ve pazartesi verilerini almak istiyorum.
TimeToString ve ardından SplitString ve AP'yi dönüştürmek için zaman alıyorum, bir gün veya daha önce aynı zaman mumuna başvurmanın daha hızlı ve daha az hantal bir yolu var mı? Tabii ki, mevcut TF'nin günlük mum sayısını bir adımla koşabilirsiniz, ancak korkarım ki tırnaklarda bir yerde delikler varsa, o zaman bir kayma olacaktır.

Bir döngü olmadan yapamam. Ancak farklı şekillerde bir döngü oluşturabilirsiniz. CopyRates()'e dikkat edin

 int    CopyRates (
   string            symbol_name,       // имя символа
   ENUM_TIMEFRAMES   timeframe,         // период
   datetime          start_time,         // с какой даты
   int               count,             // сколько копируем
   MqlRates          rates_array[]       // массив, куда будут скопированы данные
   );

PERIOD_H1, start_time tarihini 12:00 olarak ayarladık ve 1 saydık. Bir sonraki yinelemede, bu tarihe ekleyin veya ondan çıkarın (döngünün hangi yöne düzenlendiğine bağlı olarak) PeriodSeconds(PERIOD_D1)

 
MAKSIM KASHFYLGAIANOV :
Lütfen bana gösterge parametrelerini iCustom'da nasıl listeleyeceğimi söyleyin.
Dize değişkenleri yerine boş bir dize ayarlayabilirsiniz, ancak numaralandırmalar ... bunların kodda nasıl yazıldığını görmeniz gerekir.
 

Uyarılı stokastik bir gösterge var, hareketli ortalamaların kesiştiği yerde bir sinyal veriyor. Lütfen bana aşırı alım ve aşırı satım bölgesinin üstünde veya altında olduğunda hareketli ortalamaların kesişiminde nasıl sinyal vereceğini söyleyin.

 #property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 LightSeaGreen
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_level1 80
#property indicator_level2 20
#property indicator_maximum 100
#property indicator_minimum 0

//---- input parameters
/*************************************************************************
PERIOD_M1   1
PERIOD_M5   5
PERIOD_M15  15
PERIOD_M30  30 
PERIOD_H1   60
PERIOD_H4   240
PERIOD_D1   1440
PERIOD_W1   10080
PERIOD_MN1  43200
You must use the numeric value of the timeframe that you want to use
when you set the TimeFrame' value with the indicator inputs.
---------------------------------------
MODE_SMA    0 Simple moving average, 
MODE_EMA    1 Exponential moving average, 
MODE_SMMA   2 Smoothed moving average, 
MODE_LWMA   3 Linear weighted moving average. 
You must use the numeric value of the MA Method that you want to use
when you set the 'ma_method' value with the indicator inputs.

**************************************************************************/
extern int TimeFrame= 240 ;
extern int KPeriod= 5 ;
extern int DPeriod= 3 ;
extern int Slowing= 3 ;
extern int MAMethod= 0 ;
extern int PriceField= 0 ; // PriceField:  0=Hi/Low   1=Close/Close

extern string note_TimeFrames = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN" ;
extern string __MA_Method = "SMA0 EMA1 SMMA2 LWMA3" ;
extern string __PriceField = "0=Hi/Low   1=Close/Close" ;
//extern string __Price = "0O,1C 2H3L,4Md 5Tp 6WghC: Md(HL/2)4,Tp(HLC/3)5,Wgh(HLCC/4)6";


double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];

datetime last_t= 0 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexStyle( 1 , DRAW_LINE , STYLE_DOT );
   SetIndexLabel( 0 ,   "MTF_Stochastic(" +KPeriod+ "," +DPeriod+ "," +Slowing+ ")TF" +TimeFrame+ "" );
   SetIndexLabel( 1 , "MTF_Stochastic(" +KPeriod+ "," +DPeriod+ "," +Slowing+ ")TF" +TimeFrame+ "" );
   SetIndexBuffer ( 2 ,ExtMapBuffer3);
   SetIndexStyle( 2 , DRAW_ARROW );
   SetIndexArrow( 2 , 233 );
   SetIndexBuffer ( 3 ,ExtMapBuffer4);
   SetIndexStyle( 3 , DRAW_ARROW );
   SetIndexArrow( 3 , 234 );

//---- name for DataWindow and indicator subwindow label   
   switch (TimeFrame)
   {
       case 1 : string TimeFrameStr= "Period_M1" ; break ;
       case 5 : TimeFrameStr= "Period_M5" ; break ;
       case 15 : TimeFrameStr= "Period_M15" ; break ;
       case 30 : TimeFrameStr= "Period_M30" ; break ;
       case 60 : TimeFrameStr= "Period_H1" ; break ;
       case 240 : TimeFrameStr= "Period_H4" ; break ;
       case 1440 : TimeFrameStr= "Period_D1" ; break ;
       case 10080 : TimeFrameStr= "Period_W1" ; break ;
       case 43200 : TimeFrameStr= "Period_MN1" ; break ;
       default : TimeFrameStr= "Current Timeframe" ;
   } 
   IndicatorShortName( "MTF_Stochastic(" +KPeriod+ "," +DPeriod+ "," +Slowing+ ") " +TimeFrameStr);  
   start();
   return ( 0 );
  }
//----
   
 
//+------------------------------------------------------------------+
//| MTF Stochastic                                                   |
//+------------------------------------------------------------------+
 int deinit()
  {
   for ( int i= Bars ;i>= 0 ;i--){
       ObjectDelete ( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ));
   }
   return ( 0 );
  }

bool up_a= false ;
bool dn_a= false ;
int start()
  {
   datetime TimeArray[];
   ArrayResize (TimeArray, Bars );
   int     i,limit,y= 0 ,counted_bars=IndicatorCounted();
    
// Plot defined timeframe on to current timeframe   
   ArrayCopySeries(TimeArray,MODE_TIME, Symbol (),TimeFrame); 
   
 //  limit=Bars-counted_bars+TimeFrame/Period(); //igorad
limit= Bars - 1 ;
limit= MathMax (limit,TimeFrame/ Period ());
//limit=MathMin(limit,BarsToCount);
   for (i= 0 ,y= 0 ;i<limit;i++)
   {
   if (Time[i]<TimeArray[y]) y++; 
   
 /***********************************************************   
   Add your main indicator loop below.  You can reference an existing
      indicator with its iName  or iCustom.
   Rule 1:  Add extern inputs above for all neccesary values   
   Rule 2:  Use 'TimeFrame' for the indicator timeframe
   Rule 3:  Use 'y' for the indicator's shift value
 **********************************************************/   
   ExtMapBuffer3[i]= EMPTY_VALUE ;  
   ExtMapBuffer4[i]= EMPTY_VALUE ;
   ExtMapBuffer1[i]= EMPTY_VALUE ;  
   ExtMapBuffer2[i]= EMPTY_VALUE ;

   ExtMapBuffer1[i]= iStochastic ( NULL ,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField, 0 ,y);
   ExtMapBuffer2[i]= iStochastic ( NULL ,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField, 1 ,y);
   ObjectDelete ( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ));   

   if ( NormalizeDouble (ExtMapBuffer1[i], Digits )> NormalizeDouble (ExtMapBuffer2[i], Digits ) && NormalizeDouble (ExtMapBuffer1[i+ 1 ], Digits )<= NormalizeDouble (ExtMapBuffer2[i+ 1 ], Digits )  && NormalizeDouble (ExtMapBuffer1[i+ 1 ], Digits )!= NormalizeDouble (ExtMapBuffer1[i], Digits ) ){
      ExtMapBuffer3[i]=ExtMapBuffer1[i];
       ObjectDelete ( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ));
       ObjectCreate ( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ), 22 , 0 ,Time[i],Low[i]- 5 * Point );
      ObjectSet( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ), 6 ,Blue);
      ObjectSet( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ), 14 , 233 );      
   }
   if ( NormalizeDouble (ExtMapBuffer1[i], Digits )< NormalizeDouble (ExtMapBuffer2[i], Digits ) && NormalizeDouble (ExtMapBuffer1[i+ 1 ], Digits )>= NormalizeDouble (ExtMapBuffer2[i+ 1 ], Digits )  && NormalizeDouble (ExtMapBuffer1[i+ 1 ], Digits )!= NormalizeDouble (ExtMapBuffer1[i], Digits )){
      ExtMapBuffer4[i]=ExtMapBuffer1[i];
       ObjectDelete ( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ));
       ObjectCreate ( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ), 22 , 0 ,Time[i],High[i]+ 5 * Point );
      ObjectSet( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ), 6 ,Red);
      ObjectSet( "st" + Symbol ()+ Period ()+DoubleToStr(KPeriod+DPeriod+Slowing, 0 )+DoubleToStr(i, 0 ), 14 , 234 );      
   }
   }  
     
//
   //----  Refresh buffers ++++++++++++++ 
   if (TimeFrame < Period ()) TimeFrame = Period ();
   if (TimeFrame> Period ()) {
     int PerINT=TimeFrame/ Period ()+ 1 ;
     datetime TimeArr[]; ArrayResize (TimeArr,PerINT);
     ArrayCopySeries(TimeArr,MODE_TIME, Symbol (), Period ()); 
     for (i= 0 ;i<PerINT+ 1 ;i++) { if (TimeArr[i]>=TimeArray[ 0 ]) {
 /********************************************************     
    Refresh buffers:         buffer[i] = buffer[0];
 ************************************************************/   

   ExtMapBuffer1[i]=ExtMapBuffer1[ 0 ];
   ExtMapBuffer2[i]=ExtMapBuffer2[ 0 ];

   } } }
//+++++++++++++++++++++++++++++++++++++++++++++++++++++   Raff 

   if (ExtMapBuffer3[ 0 ]!= EMPTY_VALUE && !up_a){
      up_a= true ;
      dn_a= false ;    
       Alert ( "MTF Stochastic Long cross Signal on " + Symbol ());
   }
   if (ExtMapBuffer4[ 0 ]!= EMPTY_VALUE && !dn_a){
      dn_a= true ;
      up_a= false ;    
       Alert ( "MTF Stochastic Short cross Signal on " + Symbol ());
   }

   return ( 0 );
  }
 

Hepinize iyi günler.
Lütfen bana aşağıdaki koşulun hangi matematiksel işlevi hatırlamıyorum yardımı ile nasıl doğru kodlayacağımı söyleyin.

if (Teklif - Düşük[1]>=0,0030 && Teklif - Düşük[1]<0,0035) { action;}
Yukarıdaki durumda && işareti olmadan yapabilen bir matematik fonksiyonu olduğunu biliyorum ve program fiyatın 4 puan aralığında eşleşip eşleşmediğini kontrol edecek. Ama bu matematiksel fonksiyonun adını ve nasıl uygulanacağını hatırlamıyorum.
Yardım için teşekkürler.

 
Görünüşe göre soru, MQL4'ün temellerinden geliyor. Bazı X, Y, Z değişkenlerinin global kapsamda bildirildiğini varsayalım.Programın devamında, X'in değerini almak için F1() işlevi çağrılır. Ve bu fonksiyon sadece X'i döndürse de, Y ve Z değişkenleri de çalışması sırasında hesaplanır, yani. daha sonra değişmeyecek bazı değerler atanır. Kodun daha da aşağısında, Y ve Z yine bazı F2() işlevinde kullanılır. Bu değişkenleri hesaplamak için sadece X'in değil, Y ve Z'nin de dönüşünü sağlayan F1() işlevini tekrar kullanmam gerekir mi? Yoksa global alanda zaten Y ve Z'nin üzerine mi yazıldı ve değiştirilmiş bir biçimde F2() işlevine otomatik olarak ikame edilecek mi?
 
Oleksandr Nozemtsev :

Bir fonksiyonda global bir değişkeni değiştirirseniz, o değişecektir. Ancak bu, programlamanın tehlikeli bir yoludur, çünkü kodda büyüdükçe, programın farklı işlevlerinde açık olmayan atamalar ortaya çıkacaktır.

Programın ana işlevi var , global değişkenlerin atamasını yaptığınız yer orası. Ve bunun gibi diğer işlevlerde:

 int X, Y, Z;

void OnTick ()
   {
   X=Sum(Y,Z);
   }

int Sum( int y, int z)
   {
   return (y+z);
   }

Veya bunun gibi:

 int X, Y, Z;

void OnTick ()
   {
   Replace(X,Y,Z);
   }

void Replace( int & x, int & y, int & z)
   {
   int a=x;
   x=y;
   y=z;
   z=a;
   }
 
ANDREY :

Aşağıdaki koşulu hangi matematiksel işlevi kullanarak doğru şekilde kodlayacağımı hatırlamıyorum

Durumu ayarlamanın en iyi yolunu bilmiyorum

 
ANDREY :

Hepinize iyi günler.
Lütfen bana aşağıdaki koşulun hangi matematiksel işlevi hatırlamıyorum yardımı ile nasıl doğru kodlayacağımı söyleyin.

if (Teklif - Düşük[1]>=0,0030 && Teklif - Düşük[1]<0,0035) { action;}
Yukarıdaki durumda && işareti olmadan yapabilen bir matematik fonksiyonu olduğunu biliyorum ve program fiyatın 4 puan aralığında eşleşip eşleşmediğini kontrol edecek. Ama bu matematiksel fonksiyonun adını ve nasıl uygulanacağını hatırlamıyorum.
Yardım için teşekkürler.

 if (Bid - Low[ 1 ] >= 0.0030 ))
  {
   if (Bid - Low[ 1 ] < 0.0035 )
     {
      действие;
     }
  }
olmadan ve
 
Александр :
olmadan ve

Bahşiş için çok teşekkür ederim.

 
Lütfen bana programın (mql 4'te, dakikalarda, tüm işaretlerde) bir sayıyı açıkça okuduğunu ve aynı sayının bir fonksiyonda farklı şekillerde hesaplandığını söyleyin.
İşte kod
 double Pr,Lt1;
int Tick,H;
void OnTick ()
{
Tick++;
if (Tick> 15240 &&Tick< 15821 )
{
Pr= iLow ( NULL , PERIOD_H4 , 0 )+ 0.0030 ;
Print ( "--------- 0 ---------=     " , DoubleToString (Pr, 5 ) );
if ((H!=Hour()&&Bid - iLow ( NULL , PERIOD_H1 , 1 )>= 0.0030 && Lt1!=Pr )||Bid== 1.60854 )
{
OrderSend ( Symbol (),OP_SELL, 2 ,Bid, 3 ,Ask+ 300 * Point ,Ask- 100 * Point , "300" , 0 );
Lt1=Bid;
H=Hour();
}
}
}

Print() Pr'yi 1.60854 olarak gösterse de program Pr'yi 1.60854 olarak okumaz. Sonuç olarak, program yapmaması gereken ikinci bir düzen açar.


Ve Pr değişkeni yerine 1.60854 sayısı ayarlanırsa, program onu okur ve ikinci sırayı açmaz.

 double Pr,Lt1;
int Tick,H;
void OnTick ()
{
Tick++;
if (Tick> 15240 &&Tick< 15821 )
{
Pr= iLow ( NULL , PERIOD_H4 , 0 )+ 0.0030 ;
Print ( "--------- 0 ---------=     " , DoubleToString (Pr, 5 ) );
if ((H!=Hour()&&Bid - iLow ( NULL , PERIOD_H1 , 1 )>= 0.0030 && Lt1!= 1.60854 )||Bid== 1.60854 )
{
OrderSend ( Symbol (),OP_SELL, 2 ,Bid, 3 ,Ask+ 300 * Point ,Ask- 100 * Point , "300" , 0 );
Lt1=Bid;
H=Hour();
}
}
}

SORU Programın Pr okuması ve ikinci sırayı açmaması için kodda ne gibi değişiklikler yapılmalıdır.
yardım için teşekkürler