MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

 

이 스레드에서 저는 새로운 MQL4에서 프로그래밍을 정말로 이해하고 배우고 싶어하고 MQL5로 쉽게 전환하고자 하는 사람들을 돕기 시작하고 싶습니다. 언어는 매우 유사합니다.

여기에서 작업, 이를 해결하기 위한 알고리즘, 그리고 어떤 방식으로든 MT용 프로그래밍과 관련된 모든 질문에 대해 논의할 수 있습니다.

포럼의 다른 경험 많은 회원이 문제 해결에 참여하고 스레드가 모든 사람의 관심을 끌 수 있기를 바랍니다.

 

안녕하세요.

표준 지표 프랙탈 에서 가능합니까? 구성 막대의 수를 5와 다르게 구성할 수 있습니까?

그렇다면 방법.

 
mila.com :

표준 지표 프랙탈 에서 가능합니까? 구성 막대의 수를 5와 다르게 구성할 수 있습니까?

그렇다면 방법.

표준(터미널)에서
 
mila.com :

안녕하세요.

표준 지표 프랙탈 에서 가능합니까? 구성 막대의 수를 5와 다르게 구성할 수 있습니까?

그렇다면 방법.

Andrey가 이미 말했듯이 표준에서는 불가능하지만 직접 만들 수 없는 이유는 무엇입니까?
 
 
Andrey F. Zelinsky :
코드베이스에는 https://www.mql5.com/en/search#!keyword=fractals&module=mql5_module_codebase 가 있습니다.

고맙습니다. 이것은 mq 4 https :// www 에서만 필요합니다. mql 5. com / ru / 코드 /1381

놀랍게도 MT4 편집기에서 컴파일했는데 작동하고 프로세서만 로드합니다. 로드되지 않도록 무엇을 변경해야 합니까?

//--- 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 :

고맙습니다. 이것은 mq 4 https :// www 에서만 필요합니다. mql 5. com / ru / 코드 /1381

수정 사항은 최소화됩니다.

//+------------------------------------------------------------------+
//|                                              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);
  }
//+------------------------------------------------------------------+

사실 좀 다르게 했으면 좋았을텐데 습관의 힘...

다음과 같이 가능합니다.

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

그러면 표시하는 매우 재미있는 도형이 될 것입니다 ...

 
Artyom Trishkin :

수정 사항이 최소화됩니다.


사실 좀 다르게 했으면 좋았을텐데 습관의 힘...

다음과 같이 가능합니다.

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

그러면 표시하는 매우 재미있는 도형이 될 것입니다 ...

고마워, 이것이다

PLOT_ARROW_SHIFT

MT4 도움말도 없습니다. 무엇으로 대체할 수 있나요?

 
mila.com :

고마워, 이것이다

PLOT_ARROW_SHIFT

MT4 도움말도 없습니다. 무엇으로 대체할 수 있나요?

" DRAW_ARROW 스타일 에 대한 수직 화살표 오프셋"입니다.

평범한 것은 없습니다.

설정에서 하드 또는 ATR 값으로 오프셋을 간단히 설정할 수 있습니다.

그리고 다음과 같이 행하십시오.

//---
   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);
      }
//---
여기에 주석 처리된 내용을 삭제하고 입력한 내용을 입력합니다.


 
Artyom Trishkin :

" DRAW_ARROW 스타일 에 대한 수직 화살표 오프셋"입니다.

여기에 주석 처리된 내용을 삭제하고 입력한 내용을 입력합니다.


여전히 로드됩니다.

  다른 표시기에서 전화를 걸어도 단말기가 잠시 멈춥니다.

다른 무엇을 할 수 있습니까?

 
mila.com :

여전히 로드됩니다.

  다른 표시기에서 전화를 걸어도 단말기가 잠시 멈춥니다.

다른 무엇을 할 수 있습니까?

다른 표시기에서 전화하지 마세요 :)

또는 당신이 그것을하는 방법을 보여줍니다.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953