4kk4.MQL5/Indicators/Support_and_Resistance.mq5

163 lines
13 KiB
MQL5
Raw Permalink Normal View History

2026-04-27 07:14:01 +07:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| Support_and_Resistance.mq5 |
//| Copyright <EFBFBD> 2005, <8B@89 |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright <00> 2006, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
//---- =><5@ 25@A88 8=48:0B>@0
#property version "1.12"
//---- >B@8A>2:0 8=48:0B>@0 2 3;02=>< >:=5
#property indicator_chart_window
//---- 4;O @0AG5B0 8 >B@8A>2:8 8=48:0B>@0 8A?>;L7>20=> 420 1CD5@0
#property indicator_buffers 2
//---- 8A?>;L7>20=> 2A53> 420 3@0D8G5A:8E ?>AB@>5=8O
#property indicator_plots 2
//+----------------------------------------------+
//| >1JO2;5=85 :>=AB0=B |
//+----------------------------------------------+
#define RESET 0 // >=AB0=B0 4;O 2>72@0B0 B5@<8=0;C :><0=4K =0 ?5@5AG5B 8=48:0B>@0
//+----------------------------------------------+
//| 0@0<5B@K >B@8A>2:8 <54256L53> 8=48:0B>@0 |
//+----------------------------------------------+
//---- >B@8A>2:0 8=48:0B>@0 1 2 2845 A8<2>;0
#property indicator_type1 DRAW_ARROW
//---- 2 :0G5AB25 F25B0 C@>2=59 ?>445@6:8 8A?>;L7>20= @>7>2K9 F25B
#property indicator_color1 clrMagenta
//---- B>;I8=0 ;8=88 8=48:0B>@0 1 @02=0 1
#property indicator_width1 1
//---- >B>1@065=85 <5B:8 ?>445@6:8
#property indicator_label1 "Support"
//+----------------------------------------------+
//| 0@0<5B@K >B@8A>2:8 1KGL3> 8=48:0B>@0 |
//+----------------------------------------------+
//---- >B@8A>2:0 8=48:0B>@0 2 2 2845 A8<2>;0
#property indicator_type2 DRAW_ARROW
//---- 2 :0G5AB25 F25B0 C@>2=59 A>?@>B82;5=8O 8A?>;L7>20= 75;5=K9 F25B
#property indicator_color2 clrLime
//---- B>;I8=0 ;8=88 8=48:0B>@0 2 @02=0 1
#property indicator_width2 1
//---- >B>1@065=85 <5B:8 A>?@>B82;5=8O
#property indicator_label2 "Resistance"
//+----------------------------------------------+
//| E>4=K5 ?0@0<5B@K 8=48:0B>@0 |
//+----------------------------------------------+
//+----------------------------------------------+
//---- >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 SellBuffer[];
double BuyBuffer[];
//---
int StartBars;
int FRA_Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- 8=8F80;870F8O 3;>10;L=KE ?5@5<5==KE
StartBars=6;
//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 iFractals
FRA_Handle=iFractals(NULL,0);
if(FRA_Handle==INVALID_HANDLE)
{
Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 iFractals");
return(INIT_FAILED);
}
//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAG5B0 >B@8A>2:8 8=48:0B>@0 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBars);
//--- A>740=85 <5B:8 4;O >B>1@065=8O 2 DataWindow
PlotIndexSetString(0,PLOT_LABEL,"Support");
//---- A8<2>; 4;O 8=48:0B>@0
PlotIndexSetInteger(0,PLOT_ARROW,159);
//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88
ArraySetAsSeries(SellBuffer,true);
//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAG5B0 >B@8A>2:8 8=48:0B>@0 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,StartBars);
//--- A>740=85 <5B:8 4;O >B>1@065=8O 2 DataWindow
PlotIndexSetString(1,PLOT_LABEL,"Resistance");
//---- A8<2>; 4;O 8=48:0B>@0
PlotIndexSetInteger(1,PLOT_ARROW,159);
//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88
ArraySetAsSeries(BuyBuffer,true);
//---- #AB0=>2:0 D>@<0B0 B>G=>AB8 >B>1@065=8O 8=48:0B>@0
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- 8<O 4;O >:>= 40==KE 8 ;M910 4;O AC1J>:>=
string short_name="Support & Resistance";
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- 7025@H5=85 8=8F80;870F88
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[]
)
{
//---- ?@>25@:0 :>;8G5AB20 10@>2 =0 4>AB0B>G=>ABL 4;O @0AG5B0
if(BarsCalculated(FRA_Handle)<rates_total || rates_total<StartBars) return(RESET);
//---- >1JO2;5=8O ;>:0;L=KE ?5@5<5==KE
int to_copy,limit,bar;
double FRAUp[],FRALo[],upVel,loVel;
//---- @0AG5BK =5>1E>48<>3> :>;8G5AB20 :>?8@C5<KE 40==KE
//---- 8 AB0@B>2>3> =><5@0 limit 4;O F8:;0 ?5@5AG5B0 10@>2
if(prev_calculated>rates_total || prev_calculated<=0)// ?@>25@:0 =0 ?5@2K9 AB0@B @0AG5B0 8=48:0B>@0
{
to_copy=rates_total; // @0AG5B=>5 :>;8G5AB2> 2A5E 10@>2
limit=rates_total-StartBars-1; // AB0@B>2K9 =><5@ 4;O @0AG5B0 2A5E 10@>2
}
else
{
to_copy=rates_total-prev_calculated+3; // @0AG5B=>5 :>;8G5AB2> B>;L:> =>2KE 10@>2
limit=rates_total-prev_calculated+2; // AB0@B>2K9 =><5@ 4;O @0AG5B0 =>2KE 10@>2
}
//---- 8=45:A0F8O M;5<5=B>2 2 <0AA820E :0: 2 B09<A5@8OE
ArraySetAsSeries(FRAUp,true);
ArraySetAsSeries(FRALo,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- :>?8@C5< 2=>2L ?>O282H85AO 40==K5 2 <0AA82K
if(CopyBuffer(FRA_Handle,0,0,to_copy,FRAUp)<=0) return(RESET);
if(CopyBuffer(FRA_Handle,1,0,to_copy,FRALo)<=0) return(RESET);
//---- >A=>2=>9 F8:; @0AG5B0 8=48:0B>@0
for(bar=limit; bar>=0; bar--)
{
BuyBuffer[bar]=NULL;
SellBuffer[bar]=NULL;
//----
upVel=FRAUp[bar];
loVel=FRALo[bar];
//----
if(upVel && upVel!=EMPTY_VALUE) BuyBuffer[bar]=high[bar]; else BuyBuffer[bar]=BuyBuffer[bar+1];
if(loVel && loVel!=EMPTY_VALUE) SellBuffer[bar]=low[bar]; else SellBuffer[bar]=SellBuffer[bar+1];
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+