  MQL5:     MetaTrader5
 


        MetaTrader 5     MQL5.





  MQL5:     MetaTrader5



 



   



 ,2020

 ,  ,2020



ISBN978-5-4474-9967-9

     Ridero







     tmashnin@gmail.com.

,      MQL5  https://www.mql5.com/ru/docs.

     ,    .        .

   :

,  MetaQuotes Language 5,    

Ƞ   ,  , ,   .

     ,     ,     .

    ,           .

        .       MQL5,    ,    .

    MQL5     - ,     MQL5-     ࠖ     .          ,  - .      .




  


        ,  ,     ,  ,  ,    , .

       MetaTrader 5     .

    ,   ,     ,       ,      ,   ,    ,     .

         OnInit (), OnDeinit (), OnCalculate () OnChartEvent().

  OnInit () ,  ,       ,    ,   ,    ,      .  ,  OnInit ()           .

  OnDeinit () ,  ,      ,      .

  OnCalculate ()     ,      ,   OnInit ()     ,       .  ,  OnCalculate ()        .

  OnChartEvent ()   ,    ,        ,     .

   ,        ,      OnInit (), OnDeinit (), OnCalculate () OnChartEvent().




 


 :

  (#property). Ӡ mql5-      #property,            .        . ,   ,  .     mq5-. #property  

   ,  ,   , :

#property copyright 2009, MetaQuotes Software Corp.

    :

#property link http://www.mql5.com

    ,       description, :

#property description Average Directional Movement Index

   :

#property version 1.00

,  ,     .

      蠖        .

:

#property indicator_chart_window

    .

:

#property indicator_separate_window

    .

    ࠖ      , :

#property indicator_buffers6

       ࠖ      .

      ,  .

,  ADX:

#property indicator_plots3

    ()   +DI,   DI  ADX.

  頖    ,    .

,  ADX:

#property indicator_type1 DRAW_LINE

#property indicator_type2 DRAW_LINE

#property indicator_type3 DRAW_LINE

 ,    ADX  .

        ,   indicator_type.

       indicator_colorN.

,  ADX:

#property indicator_color1 LightSeaGreen

#property indicator_color2 YellowGreen

#property indicator_color3 Wheat

       ,   indicator_color.

    Web-     .

     .

           ,       ,      .

  ,    ,   ,     .

     OnInit ()    SetIndexBuffer.

,  ADX:

SetIndexBuffer (0,ExtADXBuffer);

SetIndexBuffer (1,ExtPDIBuffer);

SetIndexBuffer (2,ExtNDIBuffer);

  ,    .

 ,    ,     .

     .

     ,     .

  ?

 ,   ,   ,     ,   .

,  ADX:

SetIndexBuffer (3,ExtPDBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (4,ExtNDBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (5,ExtTmpBuffer, INDICATOR_CALCULATIONS);

      INDICATOR_CALCULATIONS.

  :

    .

 ,   SetIndexBuffer,  , ..    ,       SetIndexBuffer,     ,       .

   ADX.

  MetaTrader 5 Tools ()  MetaQuotes Language Editor ( MetaQuotes Language).

  MQL5,  Navigator (),  Indicators-> Examples     ADX.

  OnInit ()  :

//  indicator buffers

SetIndexBuffer (0,ExtADXBuffer);

SetIndexBuffer (1,ExtPDIBuffer);

SetIndexBuffer (2,ExtNDIBuffer);

SetIndexBuffer (3,ExtPDBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (4,ExtNDBuffer, INDICATOR_CALCULATIONS);

// SetIndexBuffer (5,ExtTmpBuffer, INDICATOR_CALCULATIONS);

  ExtTmpBuffer    .

       MetaTrader5.

  :








  ,              .

      ,     - .

      , ..     ,           OnCalculate    OnCalculate  ,   open [], high [], low [], close[].

   open [], high [], low [], close [] ,     rates_total.

,    OnCalculate   ArrayResize,    :

ArrayResize (ExtTmpBuffer, rates_total);

      .

 ,   OnCalculate        , ..  rates_total ,       ,    OnCalculate,                .

    ,          .

  ,          SetIndexBuffer      .

           CopyBuffer,         .

    ,       INDICATOR_CALCULATIONS .

        ,  CopyBuffer      1,          -,       . Ƞ    ArrayResize     .

   ,           ?

-,   ,         , :

#property indicator_type1 DRAW_COLOR_LINE

      COLOR.

   #property indicator_buffers         .

 SetIndexBuffer       , :

SetIndexBuffer (4,ExtColorsBuffer, INDICATOR_COLOR_INDEX);

  #property indicator_color,   ,   , :

#property indicator_color1 Green,Red

, ,   ,    ,   ,   #property indicator_color.

  ,  0.01.0.

    ,    ,       ,    .

  #property indicator_color,       :

//      

PlotIndexSetInteger (0,PLOT_COLOR_INDEXES,2);

//    

PlotIndexSetInteger (0,PLOT_LINE_COLOR,0,Blue); //  ࠖ 

PlotIndexSetInteger (0,PLOT_LINE_COLOR,1,Orange); //  ࠖ 

     ,      0.

  :

#property indicator_color1 Blue, Orange

   .

      indicator_widthN,  N   , :

#property indicator_width11

      ࠖ  , , , -,    indicator_styleN,  N   , :

#property indicator_style1 STYLE_SOLID

, ,  indicator_labelN     DataWindow   , :

#property indicator_label1 ADX

#property indicator_label2 "+DI

#property indicator_label3 "-DI

    .

      ,        , :

#property indicator_level10.0

#property indicator_levelcolorRed

#property indicator_levelstyle STYLE_SOLID

#property indicator_levelwidth2

  MQL5,  Navigator (),  Indicators-> Examples    ADX.

      :

#property copyright 2009, MetaQuotes Software Corp.

#property link "http://www.mql5.com"

#property description Average Directional Movement Index

#property indicator_separate_window

#property indicator_buffers6

#property indicator_plots3

#property indicator_type1 DRAW_LINE

#property indicator_color1 LightSeaGreen

#property indicator_style1 STYLE_SOLID

#property indicator_width11

#property indicator_type2 DRAW_LINE

#property indicator_color2 YellowGreen

#property indicator_style2 STYLE_DOT

#property indicator_width21

#property indicator_type3 DRAW_LINE

#property indicator_color3 Wheat

#property indicator_style3 STYLE_DOT

#property indicator_width31

#property indicator_label1 ADX

#property indicator_label2 "+DI

#property indicator_label3 "-DI

  MetaTrader 5    , -,    ,   Common    copyright, link description:








 Colors    indicator_label, indicator_color, indicator_width, indicator_style:








      .

ʠ ,         ,   ,        .

      Navigator   ,   copyright.








   :

#property indicator_label1 ADX

 ,    OnInit ()   :

string short_name=ADX (+string (ExtADXPeriod) +);

IndicatorSetString (INDICATOR_SHORTNAME, short_name);

  :








 :

PlotIndexSetString (0,PLOT_LABEL, short_name);

    Data Window:








 :

#property indicator_label2 "+DI

#property indicator_label3 "-DI

,   ,       Data Window.

   ADX     ,    :

#property indicator_buffers6

#property indicator_plots3

   ,        :

SetIndexBuffer (0,ExtADXBuffer);

SetIndexBuffer (1,ExtPDIBuffer);

SetIndexBuffer (2,ExtNDIBuffer);

SetIndexBuffer (3,ExtPDBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (4,ExtNDBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (5,ExtTmpBuffer, INDICATOR_CALCULATIONS);

  OnCalculate ,   ExtPDBuffer, ExtNDBuffer, ExtTmpBuffer     ,        ExtADXBuffer, ExtPDIBuffer, ExtNDIBuffer,      .

   ,       ,        .

   ADX ,:

   ,  +DI  堖 DI    ADX .

 ,  +DI  堖 DI,  ADX  ,    ,       .

   ,  +DI  堖 DI   ADX .

 ,  +DI  堖 DI,  ADX  ,    ,       .

,    ADX  ,    ADX  ,       .

      indicator_type1:

#property indicator_type1 DRAW_COLOR_LINE

     indicator_buffers:

#property indicator_buffers7

    :

double ExtColorsBuffer[];

  OnInit ()     :

SetIndexBuffer (0,ExtADXBuffer);

SetIndexBuffer (1,ExtColorsBuffer, INDICATOR_COLOR_INDEX);

SetIndexBuffer (2,ExtPDIBuffer);

SetIndexBuffer (3,ExtNDIBuffer);

SetIndexBuffer (4,ExtPDBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (5,ExtNDBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (6,ExtTmpBuffer, INDICATOR_CALCULATIONS);

           . , ,   ExtColorsBuffer   6,     .

  indicator_color1  :

#property indicator_color1 LightSeaGreen, clrBlue, clrLightBlue, clrRed, clrLightPink

  :

#property indicator_width12

  OnCalculate      for :

ExtColorsBuffer [i]=0;

if (ExtPDIBuffer [i]> ExtNDIBuffer [i] &&ExtADXBuffer [i]> ExtADXBuffer [i-1]){

ExtColorsBuffer [i]=1;

}

if (ExtPDIBuffer [i]> ExtNDIBuffer [i] &&ExtADXBuffer [i] <ExtADXBuffer [i-1]){

ExtColorsBuffer [i]=2;

}

if (ExtPDIBuffer [i] <ExtNDIBuffer [i] &&ExtADXBuffer [i]> ExtADXBuffer [i-1]){

ExtColorsBuffer [i]=3;

}

if (ExtPDIBuffer [i] <ExtNDIBuffer [i] &&ExtADXBuffer [i] <ExtADXBuffer [i-1]){

ExtColorsBuffer [i]=4;

}

        :








  MQL5     ExamplesRSI.

     ,     .

       :

#property indicator_level130

#property indicator_level270

    ,    .

   :

#property indicator_levelcolorRed

#property indicator_levelstyle STYLE_SOLID

#property indicator_levelwidth1

     :









   


     ,         Inputs  .

,   MACD:








      ,      .

         ,        .

      Input   input,     .  , Input      .

,   MACD:

// - input parameters

input int InpFastEMA=12; // Fast EMA period

input int InpSlowEMA=26; // Slow EMA period

input int InpSignalSMA=9; // Signal SMA period

input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Applied price

   ,         ,  .

  ,     :








    .

  , ,  ,    ,      .

  ,        , ,     .

  MACD    ENUM_APPLIED_PRICE,     .

    :

#property script_show_inputs

// - day ofweek

enum dayOfWeek

{

S=0, // Sunday

M=1, // Monday

T=2, // Tuesday

W=3, // Wednesday

Th=4, // Thursday

Fr=5, // Friday,

St=6, // Saturday

};

// - input parameters

input dayOfWeek swapday=W;

    #property script_show_inputs   ,     .

  Input      ,          .

       ,    :








,          ,    :








 Input  MQL5-   ,  ,   Extern .

Ѡ    ,    , ,   ,  , ,    , ,      , .

   ,    ,    new,       delete   .

 ,  ,    ,     ,  .

     ,         ,       ,    .

 ,  Input     ,  蠖        .

       const          .

    static,     .

    ,    ,      .

 ,  ,  ,   ,    .

 ,      static.

  ,    , ,    , . Ƞ     ,      .

          ,    .

Extern      .      extern.

 Extern         MACD.

 MACD    MovingAverages:

#include <MovingAverages.mqh>

  Include.

  MovingAverages  MACD   Extern-:

extern inta=0;

       ,    .

  MovingAverages  MACD     :

static inta=0;

      :








  #include     #define,       , :

#define PI3.14




 


 :

HANDLE  ,    .   Windows  .

  handle           ,    .

 ,    ,         .

      int ,  ,     ,   ,   MACD:

// - indicator buffers

double ExtMacdBuffer[];

double ExtSignalBuffer[];

double ExtFastMaBuffer[];

double ExtSlowMaBuffer[];

// -MA handles

int ExtFastMaHandle;

int ExtSlowMaHandle;

  ⠖        1226.

  ,     ,    ,     ,  .

              .

   ,             .

     :

int iMA(

string symbol, //  

ENUM_TIMEFRAMES period, // 

intma_period, //  

intma_shift, //   

ENUM_MA_METHODma_method, //  

ENUM_APPLIED_PRICE applied_price //    handle

);

Ƞ MACD         iMA  OnInit():

// - getMA handles

ExtFastMaHandle=iMA (NULL,0,InpFastEMA,0,MODE_EMA, InpAppliedPrice);

ExtSlowMaHandle=iMA (NULL,0,InpSlowEMA,0,MODE_EMA, InpAppliedPrice);

   :

// - input parameters

input int InpFastEMA=12; // Fast EMA period

input int InpSlowEMA=26; // Slow EMA period

input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Applied price

,     ,  .

  Indicators/Examples  MQL5       Custom Moving Average.mq5.

      iCustom:

int iCustom(

string symbol, //  

ENUM_TIMEFRAMES period, // 

string name // /_ 

//    

);

  OnInit ()  MACD :

// ExtFastMaHandle=iMA (NULL,0,InpFastEMA,0,MODE_EMA, InpAppliedPrice);

// ExtSlowMaHandle=iMA (NULL,0,InpSlowEMA,0,MODE_EMA, InpAppliedPrice);

ExtFastMaHandle=iCustom (NULL,0,Examples\\Custom Moving Average, InpFastEMA,0,MODE_EMA, InpAppliedPrice);

ExtSlowMaHandle=iCustom (NULL,0,Examples\\Custom Moving Average, InpSlowEMA,0,MODE_EMA, InpAppliedPrice);

    ,     :








      ,    IndicatorCreate:

int IndicatorCreate(

string symbol, //  

ENUM_TIMEFRAMES period, // 

ENUM_INDICATOR indicator_type, //    ENUM_INDICATOR

int parameters_cnt=0, //  

const MqlParam& parameters_array [] =NULL, //  

);

  OnInit ()  MACD :

MqlParam params[];

ArrayResize (params,5);

params [0].type =TYPE_STRING;

params[0].string_value=Examples\\Custom Moving Average;

// - setma_period

params [1].type =TYPE_INT;

params[1].integer_value=InpFastEMA;

// - setma_shift

params [2].type =TYPE_INT;

params[2].integer_value=0;

// - setma_method

params [3].type =TYPE_INT;

params[3].integer_value=MODE_EMA;

// - set applied_price

params [4].type =TYPE_INT;

params[4].integer_value=InpAppliedPrice;

// - initializationdone

ExtFastMaHandle=IndicatorCreate (NULL, NULL, IND_CUSTOM,4,params);

params[1].integer_value=InpSlowEMA;

ExtSlowMaHandle=IndicatorCreate (NULL, NULL, IND_CUSTOM,4,params);

     ,     .

   ,      ,       IndicatorRelease:

bool IndicatorRelease(

int indicator_handle // handle 

);

       .

,    .     ?

   OnCalculate   CopyBuffer:

int CopyBuffer(

int indicator_handle, // handle 

int buffer_num, //   

int start_pos, //  

int count, //  

double buffer [] // ,    

);

   CopyBuffer ()        .

,   ,       .

     ,      ,       ,    .

  MACD   .   ExtFastMaBuffer [] ExtSlowMaBuffer []   :

SetIndexBuffer (2,ExtFastMaBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (3,ExtSlowMaBuffer, INDICATOR_CALCULATIONS);

Ƞ      Moving Average   :

if (CopyBuffer (ExtFastMaHandle,0,0,to_copy, ExtFastMaBuffer)<=0)

{

Print (Getting fast EMA is failed! Error, GetLastError());

return(0);

}

if (CopyBuffer (ExtSlowMaHandle,0,0,to_copy, ExtSlowMaBuffer)<=0)

{

Print (Getting slow SMA is failed! Error, GetLastError());

return(0);

}

    ExtFastMaBuffer [] ExtSlowMaBuffer []  ,     :








  ,      to_copy    ,  to_copy=1    ExtFastMaBuffer [] ExtSlowMaBuffer [],      1.

     ArrayResize  ,    CopyBuffer       1.

     -,    . Ƞ  -    ,  , ,      .




 OnInit (), OnDeinit (), OnCalculate()


  ,  OnInit (), OnDeinit (), OnCalculate ()       .




 OnInit()


 OnInit ()          .

       ,   ,     ,     .

      .

   ,        SetIndexBuffer:

bool SetIndexBuffer(

int index, //  

double buffer [], // 

ENUM_INDEXBUFFER_TYPE data_type //   

);

 data_type   INDICATOR_DATA (   , ,  ), INDICATOR_COLOR_INDEX ( ), INDICATOR_CALCULATIONS (   ).

   SetIndexBuffer  ,       ,    .

    INDICATOR_COLOR_INDEX     INDICATOR_DATA,     INDICATOR_COLOR_INDEX       INDICATOR_DATA.

    INDICATOR_COLOR_INDEX,   ,   #property indicator_colorN    .

   INDICATOR_COLOR_INDEX      INDICATOR_DATA.

            , ..    0     .      ArraySetAsSeries:

bool ArraySetAsSeries(

const void& array [], //  

bool flag // true    

);

   ArraySetAsSeries     ,  ,  ,      .

 ArraySetAsSeries      ࠖ      .

  OnInit ()       ,      ,  .

        ,       .

,   ADX  :

// - check for input parameters

if (InpPeriodADX> =100|| InpPeriodADX<=0)

{

ExtADXPeriod=14;

printf (Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations., InpPeriodADX, ExtADXPeriod);

}

else ExtADXPeriod=InpPeriodADX;

 ExtADXPeriod  , InpPeriodADX  .

   ,    ( )     .

      .

  OnInit ()       .

   :

input string symbol=" "; // 

  :

string name=symbol;

  OnInit ()  :

// -    

StringTrimRight (name);

StringTrimLeft (name);

// -      name 

if (StringLen (name)==0)

{

// -   ,   

name=_Symbol;

}

       IndicatorSetDouble, IndicatorSetInteger, IndicatorSetString, PlotIndexSetDouble, PlotIndexSetInteger, PlotIndexSetString.

 IndicatorSetDouble         indicator_minimum, indicator_maximum indicator_levelN, :

IndicatorSetDouble (INDICATOR_LEVELVALUE, 0,50)

 :

property indicator_level150

 IndicatorSetInteger         indicator_height, indicator_levelcolor, indicator_levelwidth, indicator_levelstyle.

       ,   IndicatorSetInteger. ,   RSI    .

 :

//#property indicator_level130

//#property indicator_level270

//#property indicator_levelcolorRed

//#property indicator_levelstyle STYLE_SOLID

//#property indicator_levelwidth1

 :

IndicatorSetInteger (INDICATOR_LEVELS,2);

IndicatorSetDouble (INDICATOR_LEVELVALUE,0,30);

IndicatorSetDouble (INDICATOR_LEVELVALUE,1,70);

IndicatorSetInteger (INDICATOR_LEVELCOLOR,0,0xff0);

IndicatorSetInteger (INDICATOR_LEVELCOLOR,1,0xff0);

IndicatorSetInteger (INDICATOR_LEVELSTYLE,0,STYLE_SOLID);

IndicatorSetInteger (INDICATOR_LEVELSTYLE,1,STYLE_SOLID);

IndicatorSetInteger (INDICATOR_LEVELWIDTH,0,1);

IndicatorSetInteger (INDICATOR_LEVELWIDTH,1,1);

 IndicatorSetInteger     , :

IndicatorSetInteger (INDICATOR_DIGITS,2);

          .

  IndicatorSetString     .

Ѡ  IndicatorSetString     ,    MACD:

IndicatorSetString (INDICATOR_SHORTNAME,MACD (+string (InpFastEMA) +,+string (InpSlowEMA) +,+string (InpSignalSMA) +));

      :








 ,  IndicatorSetString     ,   RSI:

IndicatorSetString (INDICATOR_LEVELTEXT, 0,Oversold);

IndicatorSetString (INDICATOR_LEVELTEXT, 1,Overbought)








Ѡ  PlotIndexSetDouble ,          .

          ,   .  ,     ,      PLOT_EMPTY_VALUE. ,      ,          :

PlotIndexSetDouble (_, PLOT_EMPTY_VALUE,0);

 PlotIndexSetInteger   , ,     ,      DRAW_ARROW,      DRAW_ARROW,       DataWindow,   ,      DataWindow,       ,   ,   ,  ,  ,   .

        Custom Moving Average.

  indicator_type1  Custom Moving Average:

#property indicator_type1 DRAW_ARROW

  OnInit ()    PlotIndexSetInteger,       DRAW_ARROW:

PlotIndexSetInteger (0,PLOT_ARROW,2);








PlotIndexSetInteger (0,PLOT_ARROW,3);








PlotIndexSetInteger (0,PLOT_ARROW,4);








PlotIndexSetInteger (0,PLOT_ARROW,5);








PlotIndexSetInteger (0,PLOT_ARROW,6);








PlotIndexSetInteger (0,PLOT_ARROW,7);








PlotIndexSetInteger (0,PLOT_ARROW,8);








PlotIndexSetInteger (0,PLOT_ARROW,11);








PlotIndexSetInteger (0,PLOT_ARROW,12);








PlotIndexSetInteger (0,PLOT_ARROW,14);








PlotIndexSetInteger (0,PLOT_ARROW,15);








Ƞ .  ,       .

  OnInit ()    PlotIndexSetInteger,       DRAW_ARROW:

PlotIndexSetInteger (0,PLOT_ARROW_SHIFT,0);








PlotIndexSetInteger (0,PLOT_ARROW_SHIFT,100)








     .

  Custom Moving Average         DataWindow    PlotIndexSetInteger:

PlotIndexSetInteger (0,PLOT_DRAW_BEGIN, InpMAPeriod);

 InpMAPeriod   .

  PLOT_DRAW_TYPE  PlotIndexSetInteger       indicator_typeN, :

PlotIndexSetInteger (0, PLOT_DRAW_TYPE, DRAW_ARROW);

,     indicator_typeN    PlotIndexSetInteger  PLOT_DRAW_TYPE    ,   PlotIndexSetInteger.

       DataWindow         PlotIndexSetInteger  PLOT_SHOW_DATA:

PlotIndexSetInteger (0, PLOT_SHOW_DATA, false);

  Custom Moving Average             PlotIndexSetInteger:

PlotIndexSetInteger (0,PLOT_SHIFT, InpMAShift);

 InpMAShift=0:








 InpMAShift=10:








      .

  PLOT_LINE_STYLE  PlotIndexSetInteger       indicator_styleN,   , :

PlotIndexSetInteger (0, PLOT_LINE_STYLE, STYLE_DASHDOT);








  PLOT_LINE_WIDTH  PlotIndexSetInteger       indicator_widthN,   , :

PlotIndexSetInteger (0, PLOT_LINE_WIDTH,2);

     indicator_colorN    PlotIndexSetInteger  PLOT_COLOR_INDEXES PLOT_LINE_COLOR, :

#property indicator_color1 clrGreen, clrRed



PlotIndexSetInteger (0,PLOT_COLOR_INDEXES,2);

PlotIndexSetInteger (0,PLOT_LINE_COLOR,0,clrGreen);

PlotIndexSetInteger (0,PLOT_LINE_COLOR,1,clrRed);

 PlotIndexSetString       indicator_labelN. ,   MACD     :

#property indicator_label1 MACD

#property indicator_label2 Signal



PlotIndexSetString (0, PLOT_LABEL, MACD);

PlotIndexSetString (1, PLOT_LABEL, Signal);

             OnCalculate,    ,          ࠖ       .             OnInit().




 OnDeinit()


 :

 Deinit      :

       ,   mql5-;

     ;

  mql5-.

   OnDeinit ()   ,    ,    .

            .

    ,        ,   ,  , ,  .    .

          .

     Comment,   ,  ,    :

void Comment(

argument, //  

//  

);

     :

Comment ();

   ObjectDelete,       :

bool ObjectDelete(

long chart_id, // chart identifier

string name // objectname

);

     .




 OnCalculate()


 OnCalculate ()        ,    .

  OnCalculate ()   ࠖ  ,         :

int OnCalculate (const int rates_total, //   price[]

const int prev_calculated, //    

const int begin, //    

const double& price [] //   

);

 ,      :

int OnCalculate (const int rates_total, //   

const int prev_calculated, //    

const datetime& time [], //Time

const double& open [], //Open

const double& high [], //High

const double& low [], //Low

const double& close [], // Close

const long& tick_volume [], // Tick Volume

const long& volume [], // Real Volume

const int& spread [] // Spread

);

       OnCalculate ()      .

,       OnCalculate (),  ,        price []    .

    MACD  Custom Moving Average,       OnCalculate().

   MACD  ,   MA   MACD:








    Custom Moving Average   MACD,        Custom Moving Average:








  ,     price [],   First Indicators Data Previous Indicators Data.

  First Indicators Data ,    price []    ExtMacdBuffer   MACD,  Previous Indicators Data ,    price []    ExtLineBuffer  MA.

  OnCalculate  Custom Moving Average :

Print (begin, begin);

   First Indicators Data  :








  Previous Indicators Data  :








  , begin=0,     ExtMacdBuffer  MACD  PlotIndexSetInteger  PLOT_DRAW_BEGIN .  , begin=12,     ExtLineBuffer MA   PlotIndexSetInteger:

PlotIndexSetInteger (0,PLOT_DRAW_BEGIN, InpMAPeriod-1+begin);

  ,    ExtLineBuffer MA ,  InpMAPeriod-1,    begin  OnCalculate  Custom Moving Average    InpMAPeriod-1.

    OnCalculate().

 ,   OnCalculate ()   ,        OnCalculate (),         ,        OnCalculate (),     ,      .

   OnCalculate ()   ,         .

     rates_total   .

 ,     rates_total    ,   ADX:

// - checking for bars count

if (rates_total <ExtADXPeriod)

return(0);

       ,        :

// -     

int calculated=BarsCalculated (handle);

if (calculated<=0)

{

PrintFormat (BarsCalculated ()  %d,   %d, calculated, GetLastError());

return(0);

}

      ,   ,       OnCalculate().

  ,   ,   ,   :

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 values_to_copy;

// -     

int calculated=BarsCalculated (handle);

if (calculated<=0)

{

PrintFormat (BarsCalculated ()  %d,   %d, calculated, GetLastError());

return(0);

}

// -            

// -           ( -  )

if (prev_calculated==0|| calculated!=bars_calculated || rates_total> prev_calculated+1)

{

// -   ,     symbol/period,   

// -     ,    

if (calculated> rates_total) values_to_copy=rates_total;

else values_to_copy=calculated;

}

else

{

// -          OnCalculate())

// -     

values_to_copy= (rates_total-prev_calculated)+1;

}



// -    

bars_calculated=calculated;

// -   prev_calculated   

return (rates_total);

}

  values_to_copy      OnCalculate().

 prev_calculated      OnCalculate ()   .

 ,    prev_calculated=0,       prev_calculated= rates_total.

 prev_calculated   ,      rates_total.

 bars_calculated       ,     .

 ,   :

prev_calculated==0        .

calculated!=bars_calculated       .

rates_total> prev_calculated+1         (, -  ).

     :

     OnCalculate ()     (        ),     prev_calculated      .

  ,    prev_calculated==0    .

,      ,    頖           ,     ,   .

     ,    :

values_to_copy= (rates_total-prev_calculated)+1;

,    ,  ,  ,  prev_calculated     0,  rates_total.

, values_to_copy=1.

 ,    ,          .

     ,      OnCalculate().

  MACD    :

// - we can copy not alldata

int to_copy;

if (prev_calculated> rates_total || prev_calculated <0) to_copy=rates_total;

else

{

to_copy=rates_total-prev_calculated;

if (prev_calculated> 0) to_copy++;

}

,  ,    :

to_copy=rates_total-prev_calculated;

if (prev_calculated> 0) to_copy++;



..    to_copy=rates_total,  to_copy=1.

   ,      OnCalculate (),       .

      ,          .

      ADX:

// -    ADXBuffer     0

if (CopyBuffer (ind_handle,0,0,amount, adx_values)<0)

{

// -   ,   

PrintFormat (    iADX,   %d, GetLastError());

// -   젖  ,     

return (false);

}



// -    DI_plusBuffer     1

if (CopyBuffer (ind_handle,1,0,amount, DIplus_values)<0)

{

// -   ,   

PrintFormat (    iADX,   %d, GetLastError());

// -   젖  ,     

return (false);

}



// -    DI_plusBuffer     2

if (CopyBuffer (ind_handle,2,0,amount, DIminus_values)<0)

{

// -   ,   

PrintFormat (    iADX,   %d, GetLastError());

// -   젖  ,     

return (false);

}

 ind_handle    ADX,      ,   ,    ,   .   ,     ,        .      ,      OnCalculate (),      ,   ,   .

  ,      CopyBuffer    .

    SetIndexBuffer  . ,  ADX:

SetIndexBuffer (0,ExtADXBuffer);

SetIndexBuffer (1,ExtPDIBuffer);

SetIndexBuffer (2,ExtNDIBuffer);

       ADX, 1     +DI, 2    蠗DI.

 ,      CopyBuffer    ,     .

     ,   , :

for (int i=start; i<rates_total &&!IsStopped ();i++)

{



}

 start   ,     .

  prev_calculated=0,  start ,  , 0,   prev_calculated= rates_total,  start=prev_calculated-1.

      ArraySetAsSeries       ,   :

for (int i=start; i> =0;i ){



}

 start=rates_total-1,  prev_calculated=0, start=0,  prev_calculated= rates_total.




  


     ,      Impulse keeper ( )     .

     :

    34  High.

    34 Low.

    125  Close.

ParabolicSAR.













       .

 :     EMA34 High EMA34 Low,    EMA125 ParabolicSAR.

 :     EMA34 Low EMA34 High,    EMA125 ParabolicSAR.

,    ,          .

 MQL5   File  New.    MQL Wizard  Custom Indicator   .    Impulse keeper,       ,  .

        OnInit OnCalculate.

     .

   8.

2ࠖ  ,   . 2ࠖ  ,   . Ƞ4       EMA34 Low, EMA34 High, EMA125 ParabolicSAR:

#property indicator_buffers8

   頖 2,          :

#property indicator_plots2

      :

#property indicator_color1 clrGreen, clrBlack

#property indicator_type1 DRAW_COLOR_ARROW

#property indicator_color2 clrRed, clrBlack

#property indicator_type2 DRAW_COLOR_ARROW

       :

double IKBuyBuffer[];

double ColorIKBuyBuffer[];

double IKSellBuffer[];

double ColorIKSellBuffer[];

double EMA34HBuffer[];

double EMA34LBuffer[];

double EMA125Buffer[];

double PSARBuffer[];



int EMA34HHandle;

int EMA34LHandle;

int EMA125Handle;

int PSARHandle;

  OnInit ()       蠖  ,   :

int OnInit()

{

PlotIndexSetInteger (0,PLOT_ARROW,233);

PlotIndexSetDouble (0,PLOT_EMPTY_VALUE,0);

PlotIndexSetInteger (0,PLOT_ARROW_SHIFT, -10);

      蠖  ,   :

PlotIndexSetInteger (1,PLOT_ARROW,234);

PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,0);

PlotIndexSetInteger (1,PLOT_ARROW_SHIFT,10);

   :

SetIndexBuffer (0,IKBuyBuffer, INDICATOR_DATA);

SetIndexBuffer (1,ColorIKBuyBuffer, INDICATOR_COLOR_INDEX);



SetIndexBuffer (2,IKSellBuffer, INDICATOR_DATA);

SetIndexBuffer (3,ColorIKSellBuffer, INDICATOR_COLOR_INDEX);



SetIndexBuffer (4,EMA34HBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (5,EMA34LBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (6,EMA125Buffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (7,PSARBuffer, INDICATOR_CALCULATIONS);

   :

EMA34HHandle=iMA (NULL,0,34,0,MODE_EMA, PRICE_HIGH);

EMA34LHandle=iMA (NULL,0,34,0,MODE_EMA, PRICE_LOW);

EMA125Handle=iMA (NULL,0,125,0,MODE_EMA, PRICE_CLOSE);

PSARHandle=iSAR (NULL,0,0.02, 0.2);

  OnCalculate ()         ,           :

int values_to_copy;

int start;

int calculated=BarsCalculated (EMA34HHandle);

if (calculated<=0)

{

return(0);

}

if (prev_calculated==0|| calculated!=bars_calculated)

{

start=1;

if (calculated> rates_total) values_to_copy=rates_total;

else values_to_copy=calculated;

}

else

{

start=rates_total-1;

values_to_copy=1;

}

 bars_calculated    int bars_calculated=0;  .

         :

if (!FillArrayFromMABuffer (EMA34HBuffer,0,EMA34HHandle, values_to_copy)) return (0); if (!FillArrayFromMABuffer (EMA34LBuffer,0,EMA34LHandle, values_to_copy)) return (0); if (!FillArrayFromMABuffer (EMA125Buffer,0,EMA125Handle, values_to_copy)) return(0);

if (!FillArrayFromPSARBuffer (PSARBuffer, PSARHandle, values_to_copy)) return(0);

 FillArrayFromMABuffer FillArrayFromPSARBuffer  ,    OnCalculate():

//+                +

bool FillArrayFromPSARBuffer(

double &sar_buffer [], //    ParabolicSAR

int ind_handle, //  iSAR

int amount //   

)

{

ResetLastError();

if (CopyBuffer (ind_handle,0,0,amount, sar_buffer)<0)

{

return (false);

}

return (true);

}

//+                +

bool FillArrayFromMABuffer(

double &values [], //    Moving Average

int shift, // 

int ind_handle, //  iMA

int amount //   

)

{

ResetLastError();

if (CopyBuffer (ind_handle,0, -shift, amount, values)<0)

{

return (false);

}

return (true);

}

  OnCalculate ()     :

for (int i=start; i<rates_total &&!IsStopped ();i++)

{

IKBuyBuffer [i-1]=0;

ColorIKBuyBuffer [i-1]=1;



IKSellBuffer [i-1]=0;

ColorIKSellBuffer [i-1]=1;



if (close [i-1]> open [i-1] &&close [i-1]> EMA34HBuffer [i-1] &&close [i-1]> EMA34LBuffer [i-1] &&low [i-1]> EMA125Buffer [i-1] &&low [i-1]> PSARBuffer [i-1] &&EMA125Buffer [i-1] <EMA34LBuffer [i-1] &&EMA125Buffer [i-1] <EMA34HBuffer [i-1]){

IKBuyBuffer [i-1] =high [i-1];

ColorIKBuyBuffer [i-1]=0;

}



if (close [i-1] <open [i-1] &&close [i-1] <EMA34HBuffer [i-1] &&close [i-1] <EMA34LBuffer [i-1] &&high [i-1] <EMA125Buffer [i-1] &&high [i-1] <PSARBuffer [i-1] &&EMA125Buffer [i-1]> EMA34LBuffer [i-1] &&EMA125Buffer [i-1]> EMA34HBuffer [i-1]){

IKSellBuffer [i-1] =low [i-1];

ColorIKSellBuffer [i-1]=0;

}

}

bars_calculated=calculated;

// - return value ofprev_calculated for nextcall

return (rates_total);

}

     ,      close    .

    :













 , ,  ,      ,        :













  ,   -   EMA125.

       ,   :

EMA125Handle=iMA (NULL, PERIOD_D1,125,0,MODE_EMA, PRICE_CLOSE);

  , , ,    :













    ,    .

    ,   ,     .

             .          :

#property indicator_chart_window

#property indicator_buffers4

double EMA34HBuffer[];

double EMA34LBuffer[];

double EMA125Buffer[];

double PSARBuffer[];

int EMA34HHandle;

int EMA34LHandle;

int EMA125Handle;

int PSARHandle;

int bars_calculated=0;

  OnInit ()            :

int OnInit()

{

// - indicator buffers mapping

SetIndexBuffer (0,EMA34HBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (1,EMA34LBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (2,EMA125Buffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (3,PSARBuffer, INDICATOR_CALCULATIONS);



EMA34HHandle=iMA (NULL,0,34,0,MODE_EMA, PRICE_HIGH);

EMA34LHandle=iMA (NULL,0,34,0,MODE_EMA, PRICE_LOW);

EMA125Handle=iMA (NULL,0,125,0,MODE_EMA, PRICE_CLOSE);

PSARHandle=iSAR (NULL,0,0.02, 0.2);

//

return (INIT_SUCCEEDED);

}

  OnCalculate ()     :

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 values_to_copy;

int start;

int calculated=BarsCalculated (EMA34HHandle);

if (calculated<=0)

{

return(0);

}

if (prev_calculated==0|| calculated!=bars_calculated)

{

start=1;

if (calculated> rates_total) values_to_copy=rates_total;

else values_to_copy=calculated;

}

else

{

start=rates_total-1;

values_to_copy=1;

} if (!FillArrayFromMABuffer (EMA34HBuffer,0,EMA34HHandle, values_to_copy)) return (0); if (!FillArrayFromMABuffer (EMA34LBuffer,0,EMA34LHandle, values_to_copy)) return (0); if (!FillArrayFromMABuffer (EMA125Buffer,0,EMA125Handle, values_to_copy)) return(0);

if (!FillArrayFromPSARBuffer (PSARBuffer, PSARHandle, values_to_copy)) return(0);



for (int i=start; i<rates_total &&!IsStopped ();i++)

{

if (close [i-1]> open [i-1] &&close [i-1]> EMA34HBuffer [i-1] &&close [i-1]> EMA34LBuffer [i-1] &&low [i-1]> EMA125Buffer [i-1] &&low [i-1]> PSARBuffer [i-1] &&EMA125Buffer [i-1] <EMA34LBuffer [i-1] &&EMA125Buffer [i-1] <EMA34HBuffer [i-1]){

if (!ObjectCreate (0,Buy+i, OBJ_ARROW,0,time [i-1],high [i-1]))

{

return (false);

}

ObjectSetInteger (0,Buy+i, OBJPROP_COLOR, clrGreen);

ObjectSetInteger (0,Buy+i, OBJPROP_ARROWCODE,233);

ObjectSetInteger (0,Buy+i, OBJPROP_WIDTH,2);

ObjectSetInteger (0,Buy+i, OBJPROP_ANCHOR, ANCHOR_UPPER);

ObjectSetInteger (0,Buy+i, OBJPROP_HIDDEN, true);

ObjectSetString (0,Buy+i, OBJPROP_TOOLTIP,+close [i-1]);

}

if (close [i-1] <open [i-1] &&close [i-1] <EMA34HBuffer [i-1] &&close [i-1] <EMA34LBuffer [i-1] &&high [i-1] <EMA125Buffer [i-1] &&high [i-1] <PSARBuffer [i-1] &&EMA125Buffer [i-1]> EMA34LBuffer [i-1] &&EMA125Buffer [i-1]> EMA34HBuffer [i-1]){

if (!ObjectCreate (0,Sell+i, OBJ_ARROW,0,time [i-1],low [i-1]))

{

return (false);

}

ObjectSetInteger (0,Sell+i, OBJPROP_COLOR, clrRed);

ObjectSetInteger (0,Sell+i, OBJPROP_ARROWCODE,234);

ObjectSetInteger (0,Sell+i, OBJPROP_WIDTH,2);

ObjectSetInteger (0,Sell+i, OBJPROP_ANCHOR, ANCHOR_LOWER);

ObjectSetInteger (0,Sell+i, OBJPROP_HIDDEN, true);

ObjectSetString (0,Sell+i, OBJPROP_TOOLTIP,+close [i-1]);

}

}

bars_calculated=calculated;

// - return value ofprev_calculated for nextcall

return (rates_total);

}

  ObjectCreate   ,       .

 ObjectSetInteger  OBJPROP_COLOR   .

 ObjectSetInteger  OBJPROP_ARROWCODE      .

 ObjectSetInteger  OBJPROP_WIDTH   .

 ObjectSetInteger  OBJPROP_ANCHOR       .

 ObjectSetInteger  OBJPROP_HIDDEN true        .

 ObjectSetString  OBJPROP_TOOLTIP        .

  OnDeinit ()     :

void OnDeinit (const int reason){

ObjectsDeleteAll (0, -1,-1);

}

        .




 


    ,        ,       ObjectCreate:

bool ObjectCreate(

long chart_id, //  

string name, //  

ENUM_OBJECT type, //  

int sub_window, // 

datetime time1, //    

double price1, //    



datetime timeN=0, //  N-  

double priceN=0, //  N-  



datetime time30=0, //  30-  

double price30=0//  30- 

);

  sub_window        0    ,   .

,      ,   , ,  ADX,   :

for (int i=start; i<rates_total &&!IsStopped ();i++)

{

if (close [i-1]> open [i-1] &&close [i-1]> EMA34HBuffer [i-1] &&close [i-1]> EMA34LBuffer [i-1] &&low [i-1]> EMA125Buffer [i-1] &&low [i-1]> PSARBuffer [i-1] &&EMA125Buffer [i-1] <EMA34LBuffer [i-1] &&EMA125Buffer [i-1] <EMA34HBuffer [i-1]){

if (!ObjectCreate (0,Buy+i, OBJ_ARROW,0,time [i-1],high [i-1]))

{

return (false);

}

if (!ObjectCreate (0,Buy1+i, OBJ_ARROW,1,time [i-1],high [i-1]))

{

return (false);

}

ObjectSetInteger (0,Buy+i, OBJPROP_COLOR, clrGreen);

ObjectSetInteger (0,Buy+i, OBJPROP_ARROWCODE,233);

ObjectSetInteger (0,Buy+i, OBJPROP_WIDTH,2);

ObjectSetInteger (0,Buy+i, OBJPROP_ANCHOR, ANCHOR_UPPER);

ObjectSetInteger (0,Buy+i, OBJPROP_HIDDEN, true);

ObjectSetString (0,Buy+i, OBJPROP_TOOLTIP, close [i-1]);



ObjectSetInteger (0,Buy1+i, OBJPROP_COLOR, clrGreen);

ObjectSetInteger (0,Buy1+i, OBJPROP_ARROWCODE,233);

ObjectSetInteger (0,Buy1+i, OBJPROP_WIDTH,2);

ObjectSetInteger (0,Buy1+i, OBJPROP_ANCHOR, ANCHOR_UPPER);

ObjectSetInteger (0,Buy1+i, OBJPROP_HIDDEN, true);

ObjectSetString (0,Buy1+i, OBJPROP_TOOLTIP, close [i-1]);

}

if (close [i-1] <open [i-1] &&close [i-1] <EMA34HBuffer [i-1] &&close [i-1] <EMA34LBuffer [i-1] &&high [i-1] <EMA125Buffer [i-1] &&high [i-1] <PSARBuffer [i-1] &&EMA125Buffer [i-1]> EMA34LBuffer [i-1] &&EMA125Buffer [i-1]> EMA34HBuffer [i-1]){

if (!ObjectCreate (0,Sell+i, OBJ_ARROW,0,time [i-1],low [i-1]))

{

return (false);

}

if (!ObjectCreate (0,Sell1+i, OBJ_ARROW,1,time [i-1],low [i-1]))

{

return (false);

}

ObjectSetInteger (0,Sell+i, OBJPROP_COLOR, clrRed);

ObjectSetInteger (0,Sell+i, OBJPROP_ARROWCODE,234);

ObjectSetInteger (0,Sell+i, OBJPROP_WIDTH,2);

ObjectSetInteger (0,Sell+i, OBJPROP_ANCHOR, ANCHOR_LOWER);

ObjectSetInteger (0,Sell+i, OBJPROP_HIDDEN, true);

ObjectSetString (0,Sell+i, OBJPROP_TOOLTIP, close [i-1]);



ObjectSetInteger (0,Sell1+i, OBJPROP_COLOR, clrRed);

ObjectSetInteger (0,Sell1+i, OBJPROP_ARROWCODE,234);

ObjectSetInteger (0,Sell1+i, OBJPROP_WIDTH,2);

ObjectSetInteger (0,Sell1+i, OBJPROP_ANCHOR, ANCHOR_LOWER)

ObjectSetInteger (0,Sell1+i, OBJPROP_HIDDEN, true);

ObjectSetString (0,Sell1+i, OBJPROP_TOOLTIP, close [i-1]);

}

}








      .

     ENUM_OBJECT,    .

   ,       OnDeinit (),   ObjectDelete:

bool ObjectDelete(

long chart_id, // chart identifier

string name // objectname

);

   ObjectsDeleteAll:

int ObjectsDeleteAll(

long chart_id, // chart identifier

int sub_window=-1, // window index

int type=-1// objecttype

);

   ObjectCreate, ObjectDelete ObjectsDeleteAll, MQL5       : ObjectName, ObjectFind, ObjectGetTimeByValue, ObjectGetValueByTime, ObjectMove, ObjectsTotal, ObjectGetDouble, ObjectGetInteger, ObjectGetString, ObjectSetDouble, ObjectSetInteger, ObjectSetString, TextSetFont, TextOut, TextGetSize.

 ObjectName, ObjectFind, ObjectGetTimeByValue, ObjectGetValueByTime, ObjectsTotal, ObjectGetDouble, ObjectGetInteger, ObjectGetString, TextGetSize    .

 ObjectSetDouble, ObjectSetInteger, ObjectSetString, TextSetFont     .

 ObjectMove   .

 TextOut        OBJ_BITMAP_LABEL  OBJ_BITMAP.

           ChartRedraw:

void ChartRedraw(

long chart_id=0//  

);

 ObjectCreate       ,       ,     .

Ѡ  ObjectSetDouble     ,  OBJPROP_PRICE   price  ObjectCreate, OBJPROP_LEVELVALUE     ,     , OBJPROP_SCALE     ,     , OBJPROP_ANGLE   , ..   ,     , ,  , OBJPROP_DEVIATION       .

  OBJPROP_PRICE:

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[])

{

//

ArraySetAsSeries (time, true);

ArraySetAsSeries (high, true);

ArraySetAsSeries (low, true);

ArraySetAsSeries (close, true);

ObjectDelete (0,Price);

if (!ObjectCreate (0,Price, OBJ_HLINE,0,time [1],close [1]))

{

return (false);

}

ObjectSetInteger (0,Price, OBJPROP_COLOR, clrGreen);

ObjectSetInteger (0,Price, OBJPROP_WIDTH,1);

ObjectSetString (0,Price, OBJPROP_TOOLTIP, close [1]);

if (open [1]> close[1])

ObjectSetDouble (0,Price, OBJPROP_PRICE, low [1]);

if (open [1] <close[1])

ObjectSetDouble (0,Price, OBJPROP_PRICE, high [1]);

// - return value ofprev_calculated for nextcall

return (rates_total);

}

//+                +

void OnDeinit (const int reason){

ObjectsDeleteAll (0, -1,-1);

}

     ,       ,  ,      .

  OBJPROP_ANGLE:

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[])

{

//

ArraySetAsSeries (time, true);

ArraySetAsSeries (high, true);

ArraySetAsSeries (low, true);

ArraySetAsSeries (close, true);

ObjectDelete (0,Line);

ObjectDelete (0,Price);

if (!ObjectCreate (0,Line, OBJ_VLINE,0,time [1],close [1]))

{

return (false);

}

ObjectSetInteger (0,Line, OBJPROP_COLOR, clrBlue);

ObjectSetInteger (0,Line, OBJPROP_WIDTH,1);

ObjectSetString (0,Line, OBJPROP_TOOLTIP, close [1]);



if (!ObjectCreate (0,Price, OBJ_TEXT,0,time [3],high [1]))

{

return (false);

}

ObjectSetString (0,Price, OBJPROP_TEXT, close [1]);

ObjectSetInteger (0,Price, OBJPROP_COLOR, clrBlack);

ObjectSetDouble (0,Price, OBJPROP_ANGLE,90);

ObjectSetString (0,Price, OBJPROP_TOOLTIP, close [1]);



// - return value ofprev_calculated for nextcall

return (rates_total);

}

//+                +

void OnDeinit (const int reason){

ObjectsDeleteAll (0, -1,-1);

}

         .

Ѡ  ObjectSetInteger     ,  , ,  .

Ѡ  ObjectSetString    ,            ,     ,  , , ,  , ,      ,    ,  , ,  BMP-     蠫,    .

 TextSetFont     ,  ,     ,  .

   ,  TextOut    . ,     ,   :

uint ExtImg [10000];

//+                +

//| Custom indicator initialization function|

//+                +

int OnInit()

{

ObjectCreate (0,Image, OBJ_BITMAP_LABEL,0,0,0);

ObjectSetString (0,Image, OBJPROP_BMPFILE,:: IMG);

ArrayFill (ExtImg,0,10000,0xffffff);

TextOut (Text, 10,10,TA_LEFT|TA_TOP, ExtImg,100,100,0x000000,COLOR_FORMAT_XRGB_NOALPHA);

ResourceCreate (:: IMG, ExtImg,100,100,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);

ChartRedraw();

//

return (INIT_SUCCEEDED);

}

 ExtImg   ,   100100 .

 ObjectCreate    ,  ObjectSetString       ::IMG.   ::   :

            "::.

 ArrayFill      .

 TextOut     Text.

 ResourceCreate     ::IMG.

      Text.

     :

#resource "\\Images\\image.bmp

uint ExtImg [10000];

//+                +

//| Custom indicator initialization function|

//+                +

int OnInit()

{

ObjectCreate (0,Image, OBJ_BITMAP_LABEL,0,0,0);

ObjectSetString (0,Image, OBJPROP_BMPFILE,:: IMG);

uint width=100;

uint height=100;

ResourceReadImage("::Images\\image.bmp, ExtImg, width, height);

TextOut (Text, 10,10,TA_LEFT|TA_TOP, ExtImg,100,100,0xffffff, COLOR_FORMAT_XRGB_NOALPHA);

ResourceCreate (:: IMG, ExtImg,100,100,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);

ChartRedraw();

//

return (INIT_SUCCEEDED);

}

  ResourceReadImage     Images  Navigator  MQL5  ::IMG,    ,  TextOut     Text.

     :

#resource "\\Images\\image.bmp

uint ExtImg [10000];

//+                +

//| Custom indicator initialization function|

//+                +

int OnInit()

{

//

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[])

{

//

ArraySetAsSeries (time, true);

ArraySetAsSeries (high, true);

ArraySetAsSeries (low, true);

ArraySetAsSeries (close, true);

ObjectDelete (0,Image);

ObjectCreate (0,Image, OBJ_BITMAP,0,time [1],close [1]);

ObjectSetString (0,Image, OBJPROP_BMPFILE,:: IMG);

uint width=100;

uint height=100;

ResourceReadImage("::Images\\image.bmp, ExtImg, width, height);

TextOut (Text, 10,10,TA_LEFT|TA_TOP, ExtImg,100,100,0xffffff, COLOR_FORMAT_XRGB_NOALPHA);

ResourceCreate (:: IMG, ExtImg,100,100,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);

ChartRedraw();

// - return value ofprev_calculated for nextcall

return (rates_total);

}

//+                +

void OnDeinit (const int reason){

ObjectsDeleteAll (0, -1,-1);

}

     ,   ,        ,   .

     OBJ_CHART.

         :

#property indicator_chart_window



input string InpSymbol=EURUSD; // 

input ENUM_TIMEFRAMES InpPeriod=PERIOD_CURRENT; // 

  OnInit ()    :

int OnInit()

{

if (!ObjectCreate (0,Chart, OBJ_CHART,0,0,0))

{

return (false);

}

    ࠖ    .

    ,  ,   ,   ,   ,     ,   ,   ,   :

ObjectSetInteger (0,Chart, OBJPROP_XDISTANCE,10);

ObjectSetInteger (0,Chart, OBJPROP_YDISTANCE,20);

ObjectSetInteger (0,Chart, OBJPROP_XSIZE,300);

ObjectSetInteger (0,Chart, OBJPROP_YSIZE,200);

ObjectSetString (0,Chart, OBJPROP_SYMBOL, InpSymbol);

ObjectSetInteger (0,Chart, OBJPROP_PERIOD, InpPeriod);

ObjectSetInteger (0,Chart, OBJPROP_DATE_SCALE, true);

ObjectSetInteger (0,Chart, OBJPROP_WIDTH,1);

ObjectSetInteger (0,Chart, OBJPROP_PRICE_SCALE, true);

ObjectSetInteger (0,Chart, OBJPROP_SELECTABLE, true);

ObjectSetInteger (0,Chart, OBJPROP_SELECTED, true);

ObjectSetInteger (0,Chart, OBJPROP_COLOR, clrBlue);

Ѡ   OBJPROP_CHART_ID  ObjectGetInteger   ,          (https://www.mql5.com/ru/docs/chart_operations)   (https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property):

long chartId=ObjectGetInteger (0,Chart, OBJPROP_CHART_ID);

   ,     ,    ,       .

           :

ChartApplyTemplate(chartId,"my.tpl);

ChartRedraw (chartId);

//

return (INIT_SUCCEEDED);

}

   ,          ,   ,  .




 PlaySound


 PlaySound   . ,         :

bool PlaySound(

string filename //  WAV-

);

        Impulse keeper       .

 - WAV-      Sounds .

   Impulse keeper:

#property indicator_chart_window

#property indicator_buffers4



double EMA34HBuffer[];

double EMA34LBuffer[];

double EMA125Buffer[];

double PSARBuffer[];



int EMA34HHandle;

int EMA34LHandle;

int EMA125Handle;

int PSARHandle;



int bars_calculated=0;

int countBuy=0

int countSell=0;

//+                +

//| Custom indicator initialization function|

//+                +

int OnInit()

{

// - indicator buffers mapping

SetIndexBuffer (0,EMA34HBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (1,EMA34LBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (2,EMA125Buffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (3,PSARBuffer, INDICATOR_CALCULATIONS);



EMA34HHandle=iMA (NULL,0,34,0,MODE_EMA, PRICE_HIGH);

EMA34LHandle=iMA (NULL,0,34,0,MODE_EMA, PRICE_LOW);

EMA125Handle=iMA (NULL,0,125,0,MODE_EMA, PRICE_CLOSE);

PSARHandle=iSAR (NULL,0,0.02, 0.2);



//

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 values_to_copy;

int start;



int calculated=BarsCalculated (EMA34HHandle);

if (calculated<=0)

{

return(0);

}



if (prev_calculated==0|| calculated!=bars_calculated)

{

start=1;

if (calculated> rates_total) values_to_copy=rates_total;

else values_to_copy=calculated;

}

else

{

start=rates_total-1;

values_to_copy=1;

}

if (!FillArrayFromMABuffer (EMA34HBuffer,0,EMA34HHandle, values_to_copy)) return (0); if (!FillArrayFromMABuffer (EMA34LBuffer,0,EMA34LHandle, values_to_copy)) return (0); if (!FillArrayFromMABuffer (EMA125Buffer,0,EMA125Handle, values_to_copy)) return(0);

if (!FillArrayFromPSARBuffer (PSARBuffer, PSARHandle, values_to_copy)) return(0);



for (int i=start; i<rates_total &&!IsStopped ();i++)

{



if (close [i-1]> open [i-1] &&close [i-1]> EMA34HBuffer [i-1] &&close [i-1]> EMA34LBuffer [i-1] &&low [i-1]> EMA125Buffer [i-1] &&low [i-1]> PSARBuffer [i-1] &&EMA125Buffer [i-1] <EMA34LBuffer [i-1] &&EMA125Buffer [i-1] <EMA34HBuffer [i-1]){

if (!ObjectCreate (0,Buy+i, OBJ_ARROW,0,time [i-1],high [i-1]))

{

return (false);

}

ObjectSetInteger (0,Buy+i, OBJPROP_COLOR, clrGreen);

ObjectSetInteger (0,Buy+i, OBJPROP_ARROWCODE,233);

ObjectSetInteger (0,Buy+i, OBJPROP_WIDTH,2);

ObjectSetInteger (0,Buy+i, OBJPROP_ANCHOR, ANCHOR_UPPER);

ObjectSetInteger (0,Buy+i, OBJPROP_HIDDEN, true);

ObjectSetString (0,Buy+i, OBJPROP_TOOLTIP, close [i-1]);

}



if (start!=1){

if (close [i-1]> open [i-1] &&close [i-1]> EMA34HBuffer [i-1] &&close [i-1]> EMA34LBuffer [i-1] &&low [i-1]> EMA125Buffer [i-1] &&low [i-1]> PSARBuffer [i-1] &&EMA125Buffer [i-1] <EMA34LBuffer [i-1] &&EMA125Buffer [i-1] <EMA34HBuffer [i-1]){

countBuy++;

if (countBuy==1) PlaySound (chime. wav)

} else{

countBuy=0;

}



if (close [i-1] <open [i-1] &&close [i-1] <EMA34HBuffer [i-1] &&close [i-1] <EMA34LBuffer [i-1] &&high [i-1] <EMA125Buffer [i-1] &&high [i-1] <PSARBuffer [i-1] &&EMA125Buffer [i-1]> EMA34LBuffer [i-1] &&EMA125Buffer [i-1]> EMA34HBuffer [i-1]){

countSell++;

if (countSell==1) PlaySound (chime. wav);

} else{

countSell=0;

}

}



if (close [i-1] <open [i-1] &&close [i-1] <EMA34HBuffer [i-1] &&close [i-1] <EMA34LBuffer [i-1] &&high [i-1] <EMA125Buffer [i-1] &&high [i-1] <PSARBuffer [i-1] &&EMA125Buffer [i-1]> EMA34LBuffer [i-1] &&EMA125Buffer [i-1]> EMA34HBuffer [i-1]){

if (!ObjectCreate (0,Sell+i, OBJ_ARROW,0,time [i-1],low [i-1]))

{

return (false);

}

ObjectSetInteger (0,Sell+i, OBJPROP_COLOR, clrRed);

ObjectSetInteger (0,Sell+i, OBJPROP_ARROWCODE,234);

ObjectSetInteger (0,Sell+i, OBJPROP_WIDTH,2);

ObjectSetInteger (0,Sell+i, OBJPROP_ANCHOR, ANCHOR_LOWER);

ObjectSetInteger (0,Sell+i, OBJPROP_HIDDEN, true);

ObjectSetString (0,Sell+i, OBJPROP_TOOLTIP, close [i-1]);

}

}



bars_calculated=calculated;

// - return value ofprev_calculated for nextcall

return (rates_total);

}

//+                +

bool FillArrayFromPSARBuffer (double &sar_buffer [], //    ParabolicSAR

int ind_handle, //  iSAR

int amount //   

)

{

ResetLastError();

if (CopyBuffer (ind_handle,0,0,amount, sar_buffer)<0)

{

return (false);

}

return (true);

}

//+                +

bool FillArrayFromMABuffer (double &values [], //    Moving Average

int shift, // 

int ind_handle, //  iMA

int amount //   

)

{

ResetLastError();

if (CopyBuffer (ind_handle,0, -shift, amount, values)<0)

{

return (false);

}

return (true);

}



void OnDeinit (const int reason){

ObjectsDeleteAll (0, -1,-1);

}

      countBuy, countSell,  ,        .




 OnChartEvent


 OnChartEvent    ,        ,     .

void OnChartEvent (const int id, //  

const long& lparam, //   long

const double& dparam, //    double

const string& sparam //    string

);

     OnChartEvent    Impulse keeper   ,            .

      OnChartEvent,       :

#property indicator_chart_window

#property indicator_buffers4

double EMA34HBuffer[];

double EMA34LBuffer[];

double EMA125Buffer[];

double PSARBuffer[];

int EMA34HHandle;

int EMA34LHandle;

int EMA125Handle;

int PSARHandle;



int bars_calculated=0;

//+                +

//| Custom indicator initialization function|

//+                +

int OnInit()

{

// - indicator buffers mapping

SetIndexBuffer (0,EMA34HBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (1,EMA34LBuffer, INDICATOR_CALCULATIONS);




  .


   .

   ,     (https://www.litres.ru/timur-mashnin/yazyk-programmirovaniya-mql5-prodvinutoe-ispolzovanie-torgovoy-platformy-metatrader-5/)  .

      Visa, MasterCard, Maestro,    ,   ,     ,  PayPal, WebMoney, ., QIWI ,       .


