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

 

Bu başlıkta, yeni MQL4'te programlamayı gerçekten anlamak ve öğrenmek isteyenlere ve MQL5'e kolayca geçmek isteyenlere yardım etmeye başlamak istiyorum - diller çok benzer.

Burada görevleri, bunları çözmek için algoritmaları ve bu arada, MT için programlama ile ilgili soruları bir şekilde tartışmak mümkün olacak.

Umarım forumumuzun diğer deneyimli üyeleri sorunların çözümüne gelir ve konu herkesin ilgisini çeker.

 

Merhaba.

Standart göstergede mümkün mü Fraktallar yapı çubuklarının sayısını yapılandırılabilir yap, yani 5'ten farklı mı?

Evet ise, nasıl yapılır.

 
mila.com :

Standart göstergede mümkün mü Fraktallar yapı çubuklarının sayısını yapılandırılabilir yap, yani 5'ten farklı mı?

Evet ise, nasıl yapılır.

standartta (terminal)
 
mila.com :

Merhaba.

Standart göstergede mümkün mü Fraktallar yapı çubuklarının sayısını yapılandırılabilir yap, yani 5'ten farklı mı?

Evet ise, nasıl yapılır.

Andrey'in size daha önce de söylediği gibi, standart olanda bu imkansız, ama kendinizinkini yapmanıza engel olan nedir?
 

Teşekkür ederim. Buna sadece mq 4 https :// www üzerinde ihtiyacımız var. mql 5. com / ru / kod /1381

Şaşırtıcı bir şekilde MT4 editöründe derledim, çalışıyor, sadece işlemciyi yüklüyor, yüklenmemesi için neyi değiştirmeliyim?

//--- indicator buffers
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    2
//--- plot UpFractals
#property indicator_label1   "Up Fractals"
#property indicator_type1   DRAW_ARROW
#property indicator_color1   clrDodgerBlue
#property indicator_style1   STYLE_SOLID
#property indicator_width1   1
//--- plot DnFractals
#property indicator_label2   "Down Fractals"
#property indicator_type2   DRAW_ARROW
#property indicator_color2   clrTomato
#property indicator_style2   STYLE_SOLID
#property indicator_width2   1
//--- input parameters
input int       InpLeftSide = 3 ;           // Кол-во баров слева от фрактала
input int       InpRightSide = 3 ;         // Кол-во баров справа от фрактала
//--- indicator buffers
double          UpFractalsBuffer[];
double          DnFractalsBuffer[];
//--- global variables
int             minRequiredBars;
int             leftSide, rightSide;
int             maxSide;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit () {
//---
   if ( InpLeftSide < 1 ) {
      leftSide = 2 ;
       printf ( "Неккоретно указан параметр \"Кол-во баров слева от фрактала\": %d. Будет использовано значение: %d." ,
         InpLeftSide, leftSide);
   } else {
      leftSide = InpLeftSide;
   }
   if ( InpRightSide < 1 ) {
      rightSide = 2 ;
       printf ( "Неккоретно указан параметр \"Кол-во баров справа от фрактала\": %d. Будет использовано значение: %d." ,
         InpRightSide, rightSide);
   } else {
      rightSide = InpRightSide;
   }
//---
   minRequiredBars = leftSide + rightSide + 1 ;
   maxSide = int ( MathMax (leftSide, rightSide));
//---
   SetIndexBuffer ( 0 , UpFractalsBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 , DnFractalsBuffer, INDICATOR_DATA );
//---
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 );
   PlotIndexSetInteger ( 1 , PLOT_ARROW , 218 );
//---
   PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT , - 10 );  
   PlotIndexSetInteger ( 1 , PLOT_ARROW_SHIFT , 10 );
//---
   for ( int i = 0 ; i < 2 ; i++ ) {
       PlotIndexSetInteger (i, PLOT_DRAW_BEGIN , minRequiredBars);
       PlotIndexSetDouble (i, PLOT_EMPTY_VALUE , 0.0 );
   }
//---
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//---
   IndicatorSetString ( INDICATOR_SHORTNAME , "ffra (" +( string )leftSide+ ", " +( string )rightSide+ ")" );
//---
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Check if is Up Fractal function                                  |
//+------------------------------------------------------------------+
bool isUpFractal( int bar, int max, const double & High []) {
//---
   for ( int i = 1 ; i <= max; i++ ) {
       if ( i <= leftSide && High [bar] < High [bar-i] ) {
         return ( false );
      }
       if ( i <= rightSide && High [bar] <= High [bar+i] ) {
         return ( false );
      }
   }
//---
   return ( true );  
}
//+------------------------------------------------------------------+
//| Check if is Down Fractal function                                |
//+------------------------------------------------------------------+
bool isDnFractal( int bar, int max, const double & Low []) {
//---
   for ( int i = 1 ; i <= max; i++ ) {
       if ( i <= leftSide && Low [bar] > Low [bar-i] ) {
         return ( false );
      }
       if ( i <= rightSide && Low [bar] >= Low [bar+i] ) {
         return ( false );
      }
   }
//---
   return ( true );  
}
//+------------------------------------------------------------------+
//| 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 startBar, lastBar;
//---
   if ( rates_total < minRequiredBars ) {
       Print ( "Недостаточно данных для расчёта" );
       return ( 0 );
   }
//---
   if (prev_calculated < minRequiredBars) {
      startBar = leftSide;
       ArrayInitialize (UpFractalsBuffer, 0.0 );
       ArrayInitialize (DnFractalsBuffer, 0.0 );
   }        
   else {
      startBar = rates_total - minRequiredBars;
   }
//---
   lastBar = rates_total - rightSide;
   for ( int bar = startBar; bar < lastBar && ! IsStopped (); bar++ ) {
       //---
       if ( isUpFractal(bar, maxSide, high) ) {
         UpFractalsBuffer[bar] = high[bar];
      } else {
         UpFractalsBuffer[bar] = 0.0 ;
      }
       //---
       if ( isDnFractal(bar, maxSide, low) ) {
         DnFractalsBuffer[bar] = low[bar];
      } else {
         DnFractalsBuffer[bar] = 0.0 ;
      }
   }  
//--- return value of prev_calculated for next call
   return (rates_total);
}
//+------------------------------------------------------------------+
 
mila.com :

Teşekkür ederim. Buna sadece mq 4 https :// www üzerinde ihtiyacımız var. mql 5. com / ru / kod /1381

Düzeltmeler minimum düzeydedir:

//+------------------------------------------------------------------+
//|                                              iXBarsFractals.mq4  |
//|               Copyright 2011, Rone. redaction 2016 by artmedia70 |
//|                                            rone.sergey@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, Rone."
#property link        "rone.sergey@gmail.com"
#property version    "1.00"
#property description "Индикатор позволяет отдельно указывать кол-во баров слева и справа от фрактала. Хорошо подходит "
#property description "для определения как локальных, так и глобальных экстремумов."
#property strict
//--- indicator buffers
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    2
//--- plot UpFractals
#property indicator_label1   "Up Fractals"
#property indicator_type1   DRAW_ARROW
#property indicator_color1   clrDodgerBlue
#property indicator_style1   STYLE_SOLID
#property indicator_width1   1
//--- plot DnFractals
#property indicator_label2   "Down Fractals"
#property indicator_type2   DRAW_ARROW
#property indicator_color2   clrTomato
#property indicator_style2   STYLE_SOLID
#property indicator_width2   1
//--- input parameters
input int       InpLeftSide = 3 ;           // Кол-во баров слева от фрактала
input int       InpRightSide = 3 ;         // Кол-во баров справа от фрактала
//--- indicator buffers
double          UpFractalsBuffer[];
double          DnFractalsBuffer[];
//--- global variables
int             minRequiredBars;
int             leftSide,rightSide;
int             maxSide;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   leftSide=(InpLeftSide< 2 ? 2 :InpLeftSide);
   rightSide=(InpRightSide< 2 ? 2 :InpRightSide);
//---
   minRequiredBars=leftSide+rightSide+ 1 ;
   maxSide= int ( fmax (leftSide,rightSide));
//---
   SetIndexBuffer ( 0 ,UpFractalsBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,DnFractalsBuffer, INDICATOR_DATA );
//---
   SetIndexArrow ( 0 , 217 );
   SetIndexArrow ( 1 , 218 );
   //PlotIndexSetInteger(0,PLOT_ARROW,217);
   //PlotIndexSetInteger(1,PLOT_ARROW,218);
//---
   PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT ,- 10 );
   PlotIndexSetInteger ( 1 , PLOT_ARROW_SHIFT , 10 );
//---
   for ( int i= 0 ; i< 2 ; i++) {
       PlotIndexSetInteger (i, PLOT_DRAW_BEGIN ,minRequiredBars);
       PlotIndexSetDouble (i, PLOT_EMPTY_VALUE , 0.0 );
      }
//---
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//---
   IndicatorSetString ( INDICATOR_SHORTNAME , "XBarsFractals(" +( string )leftSide+ ", " +( string )rightSide+ ")" );
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Check if is Up Fractal function                                  |
//+------------------------------------------------------------------+
bool isUpFractal( int bar, int max, const double &high[])
  {
//---
   for ( int i= 1 ; i<=max; i++) {
       if (i<=leftSide && high[bar]<high[bar-i])     return ( false );
       if (i<=rightSide && high[bar]<=high[bar+i])   return ( false );
      }
//---
   return ( true );
  }
//+------------------------------------------------------------------+
//| Check if is Down Fractal function                                |
//+------------------------------------------------------------------+
bool isDnFractal( int bar, int max, const double &low[])
  {
//---
   for ( int i= 1 ; i<=max; i++) {
       if (i<=leftSide && low[bar]>low[bar-i])     return ( false );
       if (i<=rightSide && low[bar]>=low[bar+i])   return ( false );
      }
//---
   return ( true );
  }
//+------------------------------------------------------------------+
//| 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 startBar,lastBar;
//---
   if (rates_total<minRequiredBars) return ( 0 );
//---
   if (prev_calculated<minRequiredBars) {
      startBar=leftSide;
       ArrayInitialize (UpFractalsBuffer, 0.0 );
       ArrayInitialize (DnFractalsBuffer, 0.0 );
      }
   else startBar=rates_total-minRequiredBars;
//---
   lastBar=rates_total-rightSide;
   for ( int bar=startBar; bar<lastBar && ! IsStopped (); bar++) {
       //---
       if (isUpFractal(bar,maxSide,high))   UpFractalsBuffer[bar]=high[bar];
       else                                 UpFractalsBuffer[bar]= 0.0 ;
       //---
       if (isDnFractal(bar,maxSide,low))    DnFractalsBuffer[bar]=low[bar];
       else                                 DnFractalsBuffer[bar]= 0.0 ;
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

Doğru, biraz daha farklı yapardım, ama bu bir alışkanlık gücü ...

Hatta şöyle olabilir:

   leftSide=(InpLeftSide< 1 ? 1 :InpLeftSide);
   rightSide=(InpRightSide< 1 ? 1 :InpRightSide);

O zaman görüntülemek için oldukça komik fraktallar olacak ...

 
Artyom Trishkin :

Düzeltmeler minimum düzeydedir:


Doğru, biraz daha farklı yapardım, ama bu bir alışkanlık gücü ...

Hatta şöyle olabilir:

   leftSide=(InpLeftSide< 1 ? 1 :InpLeftSide);
   rightSide=(InpRightSide< 1 ? 1 :InpRightSide);

O zaman görüntülemek için oldukça komik fraktallar olacak ...

Teşekkürler, bu

PLOT_ARROW_SHIFT

Ayrıca MT4 yardımı da yok, onun yerine ne koyabilirim?

 
mila.com :

Teşekkürler, bu

PLOT_ARROW_SHIFT

Ayrıca MT4 yardımı da yok, onun yerine ne koyabilirim?

Bu, " DRAW_ARROW Stili için Dikey Ok Ofseti"

Sıradışı bir şey yok.

Ofseti ayarlarda sabit olarak veya ATR değerine göre kolayca ayarlayabilirsiniz.

Ve bu satırları şöyle yapın:

//---
   for ( int i= 0 ; i< 2 ; i++) {
       SetIndexDrawBegin (i,minRequiredBars);
       SetIndexEmptyValue (i, 0 );
       //PlotIndexSetInteger(i,PLOT_DRAW_BEGIN,minRequiredBars);
       //PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0.0);
      }
//---
Burada yorum yapılanları silin ve girilenleri girin.


 
Artyom Trishkin :

Bu, " DRAW_ARROW Stili için Dikey Ok Ofseti"

Burada yorum yapılanları silin ve girilenleri girin.


Hala yükleniyor.

  Başka bir göstergeden arıyorum, terminal bir an için bile donuyor.

Başka ne yapılabilir?

 
mila.com :

Hala yükleniyor.

  Başka bir göstergeden arıyorum, terminal bir an için bile donuyor.

Başka ne yapılabilir?

Başka bir göstergeden aramayın :)

Ya da nasıl yaptığını göster.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953
Neden: