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

 
İNSANLAR HOŞ GELDİNİZ! YARDIM LÜTFEN Bir muhbir var, DÜZELTMEmiz gerekiyor... Swap, komisyon hariç net karı sayacak ne yapabilirim? yine de yazının rengini değiştirmem gerekiyor... Şimdiden çok teşekkür ederim
Dosyalar:
 
ANDREY :

Hepinize iyi günler!
mql4'teki for() döngü operatörü hakkında soru. Bu operatörün başlığında, bazı değişkenlerin değerinde sıralı bir azalma veya artış gerçekleştirilir.

for(int A=14; A>=0;A--) veya for(int A=0; A<14;A++) veya for(int A=0; A<14;A=+2)   Bu durumda, A değişkeninin artış veya azalış boyutunun verilen örnek 1 veya 2'de her zaman aynı olduğu varsayılır.

SORU. A değişkeni ise zaman aralığının değeri (1(dakika), 5,15,30,60,240,1440) ise, bu değişkeni artırma veya azaltma boyutunun aynı olamayacağı açıktır. Bu durumda için başlık nasıl düzenlenir , böylece A değişkeni 1'den başlar ve daha sonra her yinelemede gerekli dakika sayısı kadar eşit olmayan bir şekilde artar.

A değişkenli örnek özel bir durumdur. Döngü başlığındaki değişkendeki değişikliğin, ihtiyacım olan aralıklarla eşit olmayan bir şekilde yapılması gerekiyorsa, döngü genel olarak nasıl tasarlanır.
Yoksa bu durumlar için başka bir operatör kullanılıyor mu? Ama bana öyle geliyor ki diğer operatörler for ile karşılaştırıldığında çok hantal.Lütfen sorunumu for operatörünün ve tam olarak başlığının yardımıyla çözmeme yardım edin. Çünkü for deyiminin gövdesi içindeki sorunumu çözmek için tabi ki if deyimlerini kullanabilirsiniz, ancak bu çok hantal bir yapı olacak ve operatör   for 7 doğru değeri filtrelemek için 1440 yineleme yapmak zorunda kalacak.
Teşekkür ederim.

Bir hata var. for(int A=0; A<14;A += 2) olmalıdır

Akla gelen en basit şey, periyotları bir diziye doldurmaktır.

 ENUM_TIMEFRAMES per[] = { PERIOD_M1 , PERIOD_M5 , PERIOD_M15 , PERIOD_M30 , PERIOD_H1 , PERIOD_H4 , PERIOD_D1 , PERIOD_W1 };
/********************Script program start function*******************/
void OnStart ()
 {
   for ( int i = 0 ; i < ArraySize (per); i++)
   {
     Print ( EnumToString (per[i]));
   }
 } /******************************************************************/

/*****************************End program****************************/


 
Alexey Viktorov :

Akla gelen en basit şey, periyotları bir diziye doldurmaktır.

Teşekkür ederim benim için de faydalı olacak

 
Alexey Viktorov :

Bir hata var. for(int A=0; A<14;A += 2) olmalıdır

Akla gelen en basit şey, periyotları bir diziye doldurmaktır.


Bahşiş için çok teşekkürler. Her şey düşündüğümden çok daha kolay çıktı.
Tek bir an anlamadım. Dizi adı başına. Ve ENUM_TIMEFRAMES bir değişken tipi tanımlayıcısı mı? mql4 Referansında tam olarak böyle bir tanımlayıcı bulamadım. sadece var

Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
 
ANDREY :

Bahşiş için çok teşekkürler. Her şey düşündüğümden çok daha kolay çıktı.
Tek bir an anlamadım. Dizi adı başına. Ve ENUM_TIMEFRAMES bir değişken tipi tanımlayıcısı mı? mql4 Referansında tam olarak böyle bir tanımlayıcı bulamadım. sadece var

burada

Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
 
MakarFX :

burada

Bana mql 5 ile ilgili bilgi gönderdiğinizi doğru mu anladım? Yoksa bu bilgiler şunlar için de geçerli mi?   mql 4?

 
ANDREY :

Mql 5 ile ilgili bilgileri bana attığınızı doğru anladım. Yoksa bu bilgiler şunlar için de geçerli mi?   mql 4?

düzelttim
 
MakarFX :
düzelttim

Teşekkür ederim.

 
ANDREY :

Teşekkür ederim.

Küçük bir öneri: ENUM_TIMEFRAMES'e hemen alışın ve sayısal gösterimi dakika sayısı olarak unutun.

İlk PERIOD_W1 10080'den daha bilgilendirici, bunun bir hafta olduğu daha açık.

İkincisi, mql5'te süre dakika sayısına karşılık gelmez ve mql5'e geçişte ekstra bir sorun olmaz ve bu kaçınılmazdır.

Pekala, eğer periyottaki dakika sayısına gerçekten ihtiyacınız varsa, o zaman size yardımcı olacaktır.

 int    PeriodSeconds ( 
   ENUM_TIMEFRAMES   period= PERIOD_CURRENT        // период графика 
   );
 Print ( PeriodSeconds ( PERIOD_W1 )/ 60 ); // = 10080
 
Çocuklar. uyarıyı göstergeye tutturmaya yardımcı olun.
 #property copyright "Subu"
#property link        "http://www.google.com"
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_chart_window

double UpArrow[];
double DownArrow[];
extern int ShiftArrow = - 2 ;
extern bool FilterBullBearCandle = false ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle( 0 , DRAW_ARROW , EMPTY, 2 );
   SetIndexArrow( 0 , 233 );
   SetIndexBuffer ( 0 , UpArrow);
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexShift( 0 ,ShiftArrow);
   SetIndexStyle( 1 , DRAW_ARROW , EMPTY, 2 );
   SetIndexArrow( 1 , 234 );
   SetIndexBuffer ( 1 , DownArrow);
   SetIndexEmptyValue( 1 , 0.0 );
   SetIndexShift( 1 ,ShiftArrow);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int     counted_bars=IndicatorCounted();
   int limit, i, counter;
   if (counted_bars< 0 ) return (- 1 );
//---- last counted bar will be recounted
   if (counted_bars> 0 ) counted_bars--;

   limit= Bars -counted_bars;
//----
     for (i = 0 ; i <= limit; i++) {
      DownArrow[i] = 0 ;
      UpArrow[i] = 0 ;
   if (High[i+ 2 ]>High[i+ 1 ] && Low[i+ 2 ]>Low[i+ 1 ] && High[i+ 2 ]>High[i+ 3 ] && Low[i+ 2 ]>Low[i+ 3 ])
       if ( Open[i+ 1 ]>Close[i+ 1 ] && Close[i+ 2 ] > Close[i+ 1 ])
         if (FilterBullBearCandle)
            {
               if ( Open[i+ 2 ]>Close[i+ 2 ])
                  DownArrow[i] = High[i+ 2 ] + 0.0003 ; //Low[i+2] + (High[i+2]-Low[i+2]);
             }
         else
             DownArrow[i] = High[i+ 2 ] + 0.0003 ; //Low[i+2] + (High[i+2]-Low[i+2]);
   if (High[i+ 2 ]<High[i+ 1 ] && Low[i+ 2 ]<Low[i+ 1 ] && High[i+ 2 ]<High[i+ 3 ] && Low[i+ 2 ]<Low[i+ 3 ])
       if ( Open[i+ 1 ]<Close[i+ 1 ] && Close[i+ 2 ] < Close[i+ 1 ])
           if (FilterBullBearCandle)
            {
               if ( Open[i+ 2 ]<Close[i+ 2 ] ) 
                  UpArrow[i] = Low[i+ 2 ] - 0.0003 ; //High[i+2] - (High[i+2]-Low[i+2]);
                  
            }
         else
            UpArrow[i] = Low[i+ 2 ] - 0.0003 ; //High[i+2] - (High[i+2]-Low[i+2]);
            
      }
//----
   return ( 0 );
  }