Price Data Components
Miscellaneous
3
Views
0
Downloads
0
Favorites
AbsolutelyNoLagLwma_HTF
ÿþ//+------------------------------------------------------------------+
//| AbsolutelyNoLagLwma_HTF.mq5 |
//| Copyright © 2018, Nikolay Kositsin |
//| Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Nikolay Kositsin"
#property link "farria@mail.redcom.ru"
//---- =><5@ 25@A88 8=48:0B>@0
#property version "1.60"
//---- >B@8A>2:0 8=48:0B>@0 2 3;02=>< >:=5
#property indicator_chart_window
//---- :>;8G5AB2> 8=48:0B>@=KE 1CD5@>2 2
#property indicator_buffers 2
//---- 8A?>;L7>20=> 2A53> >4=> 3@0D8G5A:>5 ?>AB@>5=85
#property indicator_plots 1
//+----------------------------------------------+
//| >1JO2;5=85 :>=AB0=B |
//+----------------------------------------------+
#define RESET 0 // >=AB0=B0 4;O 2>72@0B0 B5@<8=0;C :><0=4K =0 ?5@5AGQB 8=48:0B>@0
#define INDICATOR_NAME "AbsolutelyNoLagLwma" // >=AB0=B0 4;O 8<5=8 8=48:0B>@0
//+----------------------------------------------+
//| 0@0<5B@K >B@8A>2:8 8=48:0B>@0 |
//+----------------------------------------------+
//---- >B@8A>2:0 8=48:0B>@0 1 2 2845 A8<2>;0
#property indicator_type1 DRAW_COLOR_LINE
//---- 2 :0G5AB25 F25B>2 8=48:0B>@0 8A?>;L7>20=K
#property indicator_color1 clrViolet,clrGray,clrDodgerBlue
//---- B>;I8=0 ;8=88 8=48:0B>@0 1 @02=0 4
#property indicator_width1 4
//---- >B>1@065=85 1KG59 ;M91K 8=48:0B>@0
#property indicator_label1 INDICATOR_NAME
//+-----------------------------------+
//| >1JO2;5=85 ?5@5G8A;5=89 |
//+-----------------------------------+
enum Applied_price_ //"8? :>=AB0=BK
{
PRICE_CLOSE_ = 1, //PRICE_CLOSE
PRICE_OPEN_, //PRICE_OPEN
PRICE_HIGH_, //PRICE_HIGH
PRICE_LOW_, //PRICE_LOW
PRICE_MEDIAN_, //PRICE_MEDIAN
PRICE_TYPICAL_, //PRICE_TYPICAL
PRICE_WEIGHTED_, //PRICE_WEIGHTED
PRICE_SIMPL_, //PRICE_SIMPL_
PRICE_QUARTER_, //PRICE_QUARTER_
PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price
PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price
PRICE_DEMARK_ //Demark Price
};
//+-------------------------------------+
//| %+ " + " |
//+-------------------------------------+
input ENUM_TIMEFRAMES TimeFrame=PERIOD_H4;//5@8>4 3@0D8:0
input uint AlertCount=0;//:>;8G5AB2> ?>40205<KE 0;5@B>2
input uint SignalBar=1;//=><5@ 10@0 4;O A83=0;0, 0-B5:CI89 10@
//+-------------------------------------+
//| %+ " + " |
//+-------------------------------------+
input uint Length=7; // 3;C18=0 A3;06820=8O
input Applied_price_ IPC=PRICE_CLOSE_;//F5=>20O :>=AB0=B0
input int Shift=0; // A4283 ?> 3>@87>=B0;8 2 10@0E
input int PriceShift=0; // c4283 ?> 25@B8:0;8 2 ?C=:B0E
//+-------------------------------------+
//---- >1JO2;5=85 48=0<8G5A:8E <0AA82>2, :>B>@K5 1C4CB 2
// 40;L=59H5< 8A?>;L7>20=K 2 :0G5AB25 8=48:0B>@=KE 1CD5@>2
double IndBuffer[],ColorIndBuffer[];
//---- 1JO2;5=85 AB@8=3>2
string Symbol_,Word;
//---- 1JO2;5=85 F5;KE ?5@5<5==KE =0G0;0 >BAGQB0 40==KE
int min_rates_total;
//---- 1JO2;5=85 F5;KE ?5@5<5==KE 4;O E5=4;>2 8=48:0B>@>2
int Ind_Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- ?@>25@:0 ?5@8>4>2 3@0D8:>2 =0 :>@@5:B=>ABL
if(TimeFrame<Period() && TimeFrame!=PERIOD_CURRENT)
{
Print("5@8>4 3@0D8:0 4;O 8=48:0B>@0 AbsolutelyNoLagLwma =5 <>65B 1KBL <5=LH5 ?5@8>40 B5:CI53> 3@0D8:0");
return(INIT_FAILED);
}
//---- =8F80;870F8O ?5@5<5==KE
min_rates_total=2;
Symbol_=Symbol();
Word=INDICATOR_NAME+" 8=48:0B>@: "+Symbol_+StringSubstr(EnumToString(_Period),7,-1);
//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 AbsolutelyNoLagLwma
Ind_Handle=iCustom(Symbol_,TimeFrame,"AbsolutelyNoLagLwma",Length,IPC,0,PriceShift);
if(Ind_Handle==INVALID_HANDLE)
{
Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 AbsolutelyNoLagLwma");
return(INIT_FAILED);
}
//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@
SetIndexBuffer(0,IndBuffer,INDICATOR_DATA);
//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAGQB0 >B@8A>2:8 8=48:0B>@0 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- CAB0=>2:0 7=0G5=89 8=48:0B>@0, :>B>@K5 =5 1C4CB 2848<K =0 3@0D8:5
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88
ArraySetAsSeries(IndBuffer,true);
//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 F25B>2>9, 8=45:A=K9 1CD5@
SetIndexBuffer(1,ColorIndBuffer,INDICATOR_COLOR_INDEX);
//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88
ArraySetAsSeries(ColorIndBuffer,true);
//--- A>740=85 8<5=8 4;O >B>1@065=8O 2 >B45;L=>< ?>4>:=5 8 2> 2A?;K20NI59 ?>4A:07:5
IndicatorSetString(INDICATOR_SHORTNAME,INDICATOR_NAME);
//--- >?@545;5=85 B>G=>AB8 >B>1@065=8O 7=0G5=89 8=48:0B>@0
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- 7025@H5=85 8=8F80;870F88
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom iteration function |
//+------------------------------------------------------------------+
int OnCalculate(
const int rates_total, // :>;8G5AB2> 8AB>@88 2 10@0E =0 B5:CI5< B8:5
const int prev_calculated,// :>;8G5AB2> 8AB>@88 2 10@0E =0 ?@54K4CI5< B8:5
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[]
)
{
//---- ?@>25@:0 :>;8G5AB20 10@>2 =0 4>AB0B>G=>ABL 4;O @0AGQB0
if(rates_total<min_rates_total) return(RESET);
if(BarsCalculated(Ind_Handle)<Bars(Symbol(),TimeFrame)) return(prev_calculated);
//---- >1JO2;5=8O ;>:0;L=KE ?5@5<5==KE
double Ind[1],Col[1];
int limit,bar;
datetime IndTime[1];
static uint UpCount,DnCount;
static uint UpCount_,DnCount_;
static double LastInd=0.0;
static uint LastCountBar;
//---- @0AGQBK =5>1E>48<>3> :>;8G5AB20 :>?8@C5<KE 40==KE 8
//AB0@B>2>3> =><5@0 limit 4;O F8:;0 ?5@5AGQB0 10@>2
if(prev_calculated>rates_total || prev_calculated<=0)// ?@>25@:0 =0 ?5@2K9 AB0@B @0AGQB0 8=48:0B>@0
{
limit=rates_total-min_rates_total-1; // AB0@B>2K9 =><5@ 4;O @0AGQB0 2A5E 10@>2
LastCountBar=rates_total;
}
else limit=int(LastCountBar)+rates_total-prev_calculated; // AB0@B>2K9 =><5@ 4;O @0AGQB0 =>2KE 10@>2
//---- 8=45:A0F8O M;5<5=B>2 2 <0AA820E :0: 2 B09<A5@8OE
ArraySetAsSeries(time,true);
//---- >A=>2=>9 F8:; @0AGQB0 8=48:0B>@0
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- >1=C;8< A>45@68<>5 8=48:0B>@=KE 1CD5@>2 4> @0AGQB0
IndBuffer[bar]=0.0;
IndBuffer[bar]=1.0;
//---- :>?8@C5< 2=>2L ?>O282H85AO 40==K5 2 <0AA82 IndTime
if(CopyTime(Symbol_,TimeFrame,time[bar],1,IndTime)<=0) return(RESET);
if(time[bar]>=IndTime[0] && time[bar+1]<IndTime[0])
{
LastCountBar=bar;
//---- :>?8@C5< 2=>2L ?>O282H85AO 40==K5 2 <0AA82 Ind
if(CopyBuffer(Ind_Handle,0,time[bar],1,Ind)<=0) return(RESET);
if(CopyBuffer(Ind_Handle,1,time[bar],1,Col)<=0) return(RESET);
IndBuffer[bar]=Ind[0];
ColorIndBuffer[bar]=Col[0];
}
else
{
IndBuffer[bar]=IndBuffer[bar+1];
ColorIndBuffer[bar]=ColorIndBuffer[bar+1];
}
}
//---- A1@>A AGQBG8:>2 0;5@B>2 2 =C;8
if(rates_total!=prev_calculated)
{
UpCount=0;
DnCount=0;
UpCount_=0;
DnCount_=0;
}
//---- ?>40G0 0;5@B0 4;O ?>:C?:8
if(UpCount<AlertCount && ColorIndBuffer[SignalBar+1]!=2 && ColorIndBuffer[SignalBar]==2)
{
UpCount++;
Alert(Word+": !83=0; =0 ?>:C?:C ?> "+Symbol_);
}
//---- ?>40G0 0;5@B0 4;O ?@>4068
if(DnCount<AlertCount && ColorIndBuffer[SignalBar+1]!=0 && ColorIndBuffer[SignalBar]==0)
{
DnCount++;
Alert(Word+": !83=0; =0 ?@>406C ?> "+Symbol_);
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Comments