Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1065

 
yiduwi :

Sayesinde. ama bana okun neden birinci çubuğa değil de ikinci çubuğa yerleştirildiğini söyleme.

yani birinci çubuğa değil ikinci çubuğa bir ok koydunuz - kendini çizmiyor mu? )))

muhtemelen buraya fazladan bir tane eklediniz BufferDN[i+1]=high[i+1];

 
Igor Makanu :

yani birinci çubuğa değil ikinci çubuğa bir ok koydunuz - kendini çizmiyor mu? )))

muhtemelen buraya fazladan bir tane eklediniz BufferDN[i+1]=high[i+1];

Vay, bir birim olmadan, genel olarak, ok üçüncü çubuğa yerleştirilir, Kod küçük, nerede batırdım?

 #property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    2
//--- plot UP
#property indicator_label1    "UP"
#property indicator_type1    DRAW_ARROW
#property indicator_color1    clrLawnGreen
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- plot DN
#property indicator_label2    "DN"
#property indicator_type2    DRAW_ARROW
#property indicator_color2    clrDeepPink
#property indicator_style2    STYLE_SOLID
#property indicator_width2    1

//--- indicator buffers
double          BufferUP[];
double          BufferDN[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,BufferUP);
   SetIndexBuffer ( 1 ,BufferDN);
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 233 );
   PlotIndexSetInteger ( 1 , PLOT_ARROW , 234 );

//---

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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< 3 ) return ( 0 );
   int limit=rates_total-prev_calculated;
   if (limit> 1 )
     {
      limit=rates_total- 3 ;
       ArrayInitialize (BufferUP, EMPTY_VALUE );
       ArrayInitialize (BufferDN, EMPTY_VALUE );
     }
   for ( int i=limit; i>= 0 ; i--)
     {
       if ( fabs (high[i+ 1 ]-high[i+ 2 ]) <= 0.0 * _Point )
        {
         BufferDN[i]=high[i];
        }
     }
//--- return value of prev_calculated for next call

   return (rates_total);
  }
İlk çubuk üzerine yerleştirilir, eğer öyleyse
BufferDN[i+ 2 ]=high[i+ 2 ];
Anlamıyorum.
 
Igor Makanu :

Bir çözüm buldum ama bence bir şeyi hesaba katmadım

Mantıken her şey doğru.

 
yiduwi :

Vay, bir birim olmadan, genel olarak, ok üçüncü çubuğa yerleştirilir, Kod küçük, nerede batırdım?

İlk çubuk üzerine yerleştirilir, eğer öyleyse anlamıyorum.

muhtemelen öyle, ama gerçekten MT5 altında yazmıyorum, hata yapabilirim

 //+------------------------------------------------------------------+
//|                                                          tst.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    2
//--- plot UP
#property indicator_label1    "UP"
#property indicator_type1    DRAW_ARROW
#property indicator_color1    clrLawnGreen
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- plot DN
#property indicator_label2    "DN"
#property indicator_type2    DRAW_ARROW
#property indicator_color2    clrDeepPink
#property indicator_style2    STYLE_SOLID
#property indicator_width2    1

input int Pips= 5 ;
//--- indicator buffers
double          BufferUP[];
double          BufferDN[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,BufferUP);
   SetIndexBuffer ( 1 ,BufferDN);
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 233 );
   PlotIndexSetInteger ( 1 , PLOT_ARROW , 234 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 limit=rates_total-prev_calculated;
   if (limit> 1 || prev_calculated== 0 )
     {
      limit=rates_total- 2 ;
       ArrayInitialize (BufferUP, EMPTY_VALUE );
       ArrayInitialize (BufferDN, EMPTY_VALUE );
     }
   for ( int i=limit; i>= 0 ; i--)
     {
       if ( fabs (high[i+ 1 ]-high[i])<= _Point *( double )Pips) BufferDN[i]=high[i];
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu :

muhtemelen öyle, ama gerçekten MT5 altında yazmıyorum, hata yapabilirim

Ayrıca, beni ikinci çubuğa koyuyor)

 
Igor Makanu :

teşekkürler, bu hatalardan biri ama yine de 159.002 saniyeden 44 saat 10 dakika 2 saniyeyi nasıl elde edeceğimi çözemedim (çevrimiçi hesap makinesi)))


Bir çözüm buldum ama bence bir şeyi hesaba katmadım

2019.06.18 11:46:22.691 tssts EURUSD,H1: h = 44 , m = 10 , s = 2

bana göre daha kolay

 int timeinsec = 159002 ;
 int sec = timeinsec% 60 ;
 int min = ((timeinsec-sec)% 3600 )/ 60 ;
 int hou = (timeinsec-sec-min)/ 3600 ;
 
yiduwi :

Ayrıca, beni ikinci çubuğa koyuyor)

oku yalnızca koşulun karşılandığı yere koymalıyım, ancak bu arada, MT5 için sarkma koşulu tamamlamanın daha iyi olduğunu hatırladım:

 if ( fabs (high[i+ 1 ]-high[i])<= _Point *( double )Pips) BufferDN[i]=high[i]; else BufferDN[i]= EMPTY_VALUE ;
Alexey Viktorov :

bana göre daha kolay

iyi! teşekkür etmek! Evet, tam olarak istediğim buydu!

 
Print'e çok sayıda çağrının olduğu bir kod var. Hepsini hızlı bir şekilde devre dışı bırakmak / Geri etkinleştirmek için Yazdırma kodundan çıkarmadan bir şekilde mümkün mü? Şimdiye kadar gördüğüm tek seçenek:
 bool L= true ;
if (L) Print ( "123" );

Yani, tüm "Print(" öğelerini "if(L)Print(" ile değiştirin, belki başka seçenekler de vardır?

 
pivomoe :
Print'e çok sayıda çağrının olduğu bir kod var. Hepsini hızlı bir şekilde devre dışı bırakmak / Geri etkinleştirmek için Yazdırma kodundan çıkarmadan bir şekilde mümkün mü? Şimdiye kadar gördüğüm tek seçenek:

Yani, tüm "Print(" öğelerini "if(L)Print(" ile değiştirin, belki başka seçenekler de vardır?

Giriş parametrelerinde "Yazdır" bayrağını görüntüleyin. Kodunuz gibi çalışacak, giriş parametrelerinde yalnızca bayrağın kendisi (bool değişkeni) olacaktır.

 

Merhaba !

MT5 test cihazındaki tüm semboller için optimizasyon çalışmayı reddediyor...

Aydınlatın lütfen, onu nasıl ikna edersiniz?

TEŞEKKÜR ETMEK.