//+------------------------------------------------------------------+
//| Givonly_SnR_SnD.mq4 |
//| Givonly |
//| |
//+------------------------------------------------------------------+
#property copyright "Givonly"
#property link "http://www.kgforexworld.com & http://oxy.opentraders.ru/bio/"
#property indicator_chart_window
extern bool SHOW_H1=true;
extern bool SHOW_H4=true;
extern bool SHOW_D1=true;
extern bool SHOW_W1=true;
extern int Supply_Demand_Area=10;
extern color SupportColor = DodgerBlue;
extern color ResistanceColor = Red;
extern color P60R=LightGray;
extern color P60S=LightGray;
extern color P240R=LightGray;
extern color P240S=LightGray;
extern color P1440R=LightGray;
extern color P1440S=LightGray;
extern color P10080R=LightGray;
extern color P10080S=LightGray;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//----
if(ObjectFind("H1 RESISTANCE")==0) ObjectDelete("H1 RESISTANCE");
if(ObjectFind("H4 RESISTANCE")==0) ObjectDelete("H4 RESISTANCE");
if(ObjectFind("D1 RESISTANCE")==0) ObjectDelete("D1 RESISTANCE");
if(ObjectFind("W1 RESISTANCE")==0) ObjectDelete("W1 RESISTANCE");
if(ObjectFind("H1 SUPPORT")==0) ObjectDelete("H1 SUPPORT");
if(ObjectFind("H4 SUPPORT")==0) ObjectDelete("H4 SUPPORT");
if(ObjectFind("D1 SUPPORT")==0) ObjectDelete("D1 SUPPORT");
if(ObjectFind("W1 SUPPORT")==0) ObjectDelete("W1 SUPPORT");
if(ObjectFind("GIVONLY H1 RESISTANCE LINE")==0) ObjectDelete("GIVONLY H1 RESISTANCE LINE");
if(ObjectFind("GIVONLY H4 RESISTANCE LINE")==0) ObjectDelete("GIVONLY H4 RESISTANCE LINE");
if(ObjectFind("GIVONLY D1 RESISTANCE LINE")==0) ObjectDelete("GIVONLY D1 RESISTANCE LINE");
if(ObjectFind("GIVONLY W1 RESISTANCE LINE")==0) ObjectDelete("GIVONLY W1 RESISTANCE LINE");
if(ObjectFind("GIVONLY H1 SUPPORT LINE")==0) ObjectDelete("GIVONLY H1 SUPPORT LINE");
if(ObjectFind("GIVONLY H4 SUPPORT LINE")==0) ObjectDelete("GIVONLY H4 SUPPORT LINE");
if(ObjectFind("GIVONLY D1 SUPPORT LINE")==0) ObjectDelete("GIVONLY D1 SUPPORT LINE");
if(ObjectFind("GIVONLY W1 SUPPORT LINE")==0) ObjectDelete("GIVONLY W1 SUPPORT LINE");
if(ObjectFind("H1 SUPPLY AREA")==0) ObjectDelete("H1 SUPPLY AREA");
if(ObjectFind("H4 SUPPLY AREA")==0) ObjectDelete("H4 SUPPLY AREA");
if(ObjectFind("D1 SUPPLY AREA")==0) ObjectDelete("D1 SUPPLY AREA");
if(ObjectFind("W1 SUPPLY AREA")==0) ObjectDelete("W1 SUPPLY AREA");
if(ObjectFind("H1 DEMAND AREA")==0) ObjectDelete("H1 DEMAND AREA");
if(ObjectFind("H4 DEMAND AREA")==0) ObjectDelete("H4 DEMAND AREA");
if(ObjectFind("D1 DEMAND AREA")==0) ObjectDelete("D1 DEMAND AREA");
if(ObjectFind("W1 DEMAND AREA")==0) ObjectDelete("W1 DEMAND AREA");
//----
}
//+------------------------------------------------------------------+
//| 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[])
{
if(prev_calculated==0 || (prev_calculated>0 && prev_calculated<rates_total)) {
if(SHOW_H1) GAMBAR(60);
if(SHOW_H4) GAMBAR(240);
if(SHOW_D1) GAMBAR(1440);
if(SHOW_W1) GAMBAR(10080);
if(Supply_Demand_Area>0) {
if(SHOW_H1) SND(60);
if(SHOW_H4) SND(240);
if(SHOW_D1) SND(1440);
if(SHOW_W1) SND(10080);
}
}
return(rates_total);
}
//+------------------------------------------------------------------+
void SND(int period)
{
string name;
name = StringConcatenate(TF(period)," SUPPLY AREA");
double atas, bawah;
atas = SNR(period,MODE_HIGH);
bawah= atas-Supply_Demand_Area*Point;
bool ada=false;
if( (SNR(period,MODE_HIGH)==SNR(60,MODE_HIGH) && period>60 && SHOW_H1)
|| (SNR(period,MODE_HIGH)==SNR(240,MODE_HIGH) && period>240 && SHOW_H4)
|| (SNR(period,MODE_HIGH)==SNR(1440,MODE_HIGH) && period>1440 && SHOW_D1)
|| (SNR(period,MODE_HIGH)==SNR(10080,MODE_HIGH) && period>10080 && SHOW_W1)
) ada=true;
if(!ada) {
ObjectCreate(name,OBJ_RECTANGLE,0,0,0);
ObjectSet(name,OBJPROP_TIME1,Time[0]);
ObjectSet(name,OBJPROP_TIME2,Time[Bars-1]);
ObjectSet(name,OBJPROP_COLOR,ResistanceColor);
ObjectSet(name,OBJPROP_PRICE1,atas);
ObjectSet(name,OBJPROP_PRICE2,bawah);
ObjectMove(name,0,Time[0],atas);
ObjectMove(name,1,Time[Bars-1],bawah);
}
name = StringConcatenate(TF(period)," DEMAND AREA");
bawah= SNR(period,MODE_LOW);
atas = bawah+Supply_Demand_Area*Point;
ada=false;
if( (SNR(period,MODE_LOW)==SNR(60,MODE_LOW) && period>60 && SHOW_H1)
|| (SNR(period,MODE_LOW)==SNR(240,MODE_LOW) && period>240 && SHOW_H4)
|| (SNR(period,MODE_LOW)==SNR(1440,MODE_LOW) && period>1440 && SHOW_D1)
|| (SNR(period,MODE_LOW)==SNR(10080,MODE_LOW) && period>10080 && SHOW_W1)
) ada=true;
if(!ada) {
ObjectCreate(name,OBJ_RECTANGLE,0,0,0);
ObjectSet(name,OBJPROP_TIME1,Time[0]);
ObjectSet(name,OBJPROP_TIME2,Time[Bars-1]);
ObjectSet(name,OBJPROP_COLOR, SupportColor);
ObjectSet(name,OBJPROP_PRICE1,bawah);
ObjectSet(name,OBJPROP_PRICE2,atas);
ObjectMove(name,0,Time[0],bawah);
ObjectMove(name,1,Time[Bars-1],atas);
}
}
Надо код в индикаторе заменить полностью на этот код из 2 частей по порядку и скомпилировать файл.
Индикатор будет считать значения не на каждом тике, а на каждой новой свече.
Oxy