242 lines
8.7 KiB
Plaintext
242 lines
8.7 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| MN1_W1_Levels.mq4 |
|
|
//| © Tecciztecatl |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "© Tecciztecatl 2016"
|
|
#property link "113411@bk.ru"
|
|
#property version "1.00"
|
|
#property description "The script shows the highs and lows of weeks and months."
|
|
#property script_show_inputs
|
|
#property strict
|
|
|
|
input int days=200; //Number of days
|
|
extern string comm0=""; //- - -- ---- Weeks ---- -- - -
|
|
extern color W1_Color=LimeGreen; //W1 Color of lines
|
|
input int W1_Width=3; //W1 Line Width
|
|
extern ENUM_LINE_STYLE W1_style=STYLE_SOLID; //W1 Style of lines
|
|
extern string comm1=""; //- - -- ---- Months ---- -- - -
|
|
extern color MN1_Color=Orange; //MN1 Color of lines
|
|
input int MN1_Width=3; //MN1 Line Width
|
|
extern ENUM_LINE_STYLE MN1_style=STYLE_SOLID;//MN1 Style of lines
|
|
|
|
enum choice0 {Trend_Line=0,Horizontal_Line=1};
|
|
input choice0 object=Trend_Line; //Trend or Horizontal line
|
|
|
|
datetime ArrDate[1];
|
|
double ArrDouble[1];
|
|
MqlDateTime time;
|
|
//+------------------------------------------------------------------+
|
|
//| Script program start function |
|
|
//+------------------------------------------------------------------+
|
|
void OnStart()
|
|
{
|
|
DelObject();
|
|
|
|
int weeks=(int)MathCeil(days/7)+1;
|
|
if(weeks>Bars(_Symbol,PERIOD_W1)) weeks=Bars(_Symbol,PERIOD_W1)-1;
|
|
if(weeks<0) {Alert("No historical data!"); return;}
|
|
for(int i=weeks; i>=0; i--)
|
|
{
|
|
datetime w1=iTime(_Symbol,PERIOD_W1,i);
|
|
TimeToStruct(w1,time);
|
|
if(object==Trend_Line)
|
|
{
|
|
SetTrendLine("W1_High_"+(string)i+"_ln",
|
|
w1+86400,
|
|
iHigh(_Symbol,PERIOD_W1,i),
|
|
w1+7*86400,
|
|
W1_Color,
|
|
W1_Width,
|
|
W1_style,
|
|
0x0007ffff);
|
|
SetTrendLine("W1_Low_"+(string)i+"_ln",
|
|
w1+86400,
|
|
iLow(_Symbol,PERIOD_W1,i),
|
|
w1+7*86400,
|
|
W1_Color,
|
|
W1_Width,
|
|
W1_style,
|
|
0x0007ffff);
|
|
}
|
|
else
|
|
{
|
|
SetHLine("W1_High_"+(string)i+"_ln",
|
|
iHigh(_Symbol,PERIOD_W1,i),
|
|
W1_Color,
|
|
W1_Width,
|
|
W1_style);
|
|
SetHLine("W1_Low_"+(string)i+"_ln",
|
|
iLow(_Symbol,PERIOD_W1,i),
|
|
W1_Color,
|
|
W1_Width,
|
|
W1_style);
|
|
}
|
|
}
|
|
|
|
TimeToStruct(TimeCurrent(),time);
|
|
int month=(int)MathCeil((days-time.day)/30)+1;
|
|
if(month>Bars(_Symbol,PERIOD_MN1)) month=Bars(_Symbol,PERIOD_MN1)-1;
|
|
if(month<0) {Alert("No historical data!"); return;}
|
|
for(int i=month; i>=0; i--)
|
|
{
|
|
|
|
datetime mn=iTime(_Symbol,PERIOD_MN1,i);
|
|
TimeToStruct(mn,time);
|
|
|
|
if(object==Trend_Line)
|
|
{
|
|
SetTrendLine("MN1_High_"+(string)i+"_ln",
|
|
mn,
|
|
iHigh(_Symbol,PERIOD_MN1,i),
|
|
mn+DayMonth(time.mon,mn)*86400,
|
|
MN1_Color,
|
|
MN1_Width,
|
|
MN1_style,
|
|
0x000fffff);
|
|
SetTrendLine("MN1_Low_"+(string)i+"_ln",
|
|
mn,
|
|
iLow(_Symbol,PERIOD_MN1,i),
|
|
mn+DayMonth(time.mon,mn)*86400,
|
|
MN1_Color,
|
|
MN1_Width,
|
|
MN1_style,
|
|
0x000fffff);
|
|
}
|
|
else
|
|
{
|
|
SetHLine("MN1_High_"+(string)i+"_ln",
|
|
iHigh(_Symbol,PERIOD_MN1,i),
|
|
MN1_Color,
|
|
MN1_Width,
|
|
MN1_style);
|
|
SetHLine("MN1_Low_"+(string)i+"_ln",
|
|
iLow(_Symbol,PERIOD_MN1,i),
|
|
MN1_Color,
|
|
MN1_Width,
|
|
MN1_style);
|
|
}
|
|
|
|
}
|
|
|
|
ChartRedraw();
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
int DayMonth(int mon,datetime ttime)
|
|
{
|
|
int leap_year;
|
|
TimeToStruct(ttime,time);
|
|
switch(mon)
|
|
{
|
|
case 1:
|
|
case 3:
|
|
case 5:
|
|
case 7:
|
|
case 8:
|
|
case 10:
|
|
case 12:
|
|
return(31);
|
|
case 2:
|
|
leap_year=time.year;
|
|
if(time.year%100==0)
|
|
leap_year/=100;
|
|
return((leap_year%4==0)? 29 : 28);
|
|
case 4:
|
|
case 6:
|
|
case 9:
|
|
case 11:
|
|
return(30);
|
|
}
|
|
return(0);
|
|
}
|
|
//// Ñîçäà¸ì ëèíèþ
|
|
void SetTrendLine(
|
|
const string name,
|
|
datetime time1,
|
|
double price1,
|
|
datetime time2,
|
|
color cvet,
|
|
int widthL,
|
|
ENUM_LINE_STYLE styleL,
|
|
int hide_TF
|
|
)
|
|
{
|
|
if(ObjectFind(0,name)<0) ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price1);
|
|
ObjectMove(0,name,0,time1,price1);
|
|
ObjectMove(0,name,1,time2,price1);
|
|
ObjectSetInteger(0,name,OBJPROP_COLOR,cvet);
|
|
ObjectSetInteger(0,name,OBJPROP_STYLE,styleL);
|
|
ObjectSetInteger(0,name,OBJPROP_WIDTH,widthL);
|
|
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
|
|
ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
|
|
ObjectSetInteger(0,name,OBJPROP_BACK,false);
|
|
ObjectSetInteger(0,name,OBJPROP_ZORDER,1);
|
|
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
|
|
ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
|
|
ObjectSetInteger(0,name,OBJPROP_TIMEFRAMES,hide_TF);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
datetime iTime(string symbol,ENUM_TIMEFRAMES timeframe,int index)
|
|
{
|
|
if(index<0) index=0;
|
|
if(CopyTime(symbol, timeframe, index, 1, ArrDate)>0) return(ArrDate[0]);
|
|
else return(-1);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
|
|
{
|
|
if(index < 0) return(-1);
|
|
if(CopyLow(symbol, timeframe, index, 1, ArrDouble)>0) return(ArrDouble[0]);
|
|
else return(-1);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
|
|
{
|
|
if(index < 0) return(-1);
|
|
if(CopyHigh(symbol, timeframe, index, 1, ArrDouble)>0) return(ArrDouble[0]);
|
|
else return(-1);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void SetHLine(
|
|
const string name,
|
|
double price1,
|
|
color cvet,
|
|
int widthL,
|
|
ENUM_LINE_STYLE styleL,
|
|
)
|
|
{
|
|
if(ObjectFind(0,name)<0) ObjectCreate(0,name,OBJ_HLINE,0,0,price1);
|
|
ObjectSetDouble(0,name,OBJPROP_PRICE,price1);
|
|
ObjectSetInteger(0,name,OBJPROP_COLOR,cvet);
|
|
ObjectSetInteger(0,name,OBJPROP_STYLE,styleL);
|
|
ObjectSetInteger(0,name,OBJPROP_WIDTH,widthL);
|
|
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
|
|
ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
|
|
ObjectSetInteger(0,name,OBJPROP_BACK,false);
|
|
ObjectSetInteger(0,name,OBJPROP_ZORDER,1);
|
|
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
|
|
ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void DelObject()
|
|
{
|
|
for(int i=ObjectsTotal(0,0,-1)-1;i>=0;i--)
|
|
{
|
|
string temp=ObjectName(0,i,0,-1);
|
|
if(StringFind(temp,"_ln",0)>=0)
|
|
ObjectDelete(0,temp);
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|