0
Views
0
Downloads
0
Favorites
cm_ind_-_Smart_Gread_260914
//+------------------------------------------------------------------+
//| Smart Gread.mq4 |
//| Copyright 2014, cmillion@narod.ru |
//| http://cmillion.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, cmillion@narod.ru"
#property link "http://cmillion.ru"
#property version "1.00"
#property strict
#property indicator_chart_window
extern datetime StartTime=D'2014.09.01';
extern datetime EndTime=D'2014.09.26';
extern int Step=100;
extern int TP=50;
extern double Lot=1;
extern double K=2;
double Pb[100],Ps[100];
datetime Tb[100],Ts[100];
int I=0,Kb[100],Ks[100];
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id==CHARTEVENT_OBJECT_CLICK)
{
string clickedChartObject=sparam;
if (clickedChartObject=="kn Step up")
{
Step+=5;
Sleep(100);
if (ObjectGetInteger(0,"kn Step up",OBJPROP_STATE)) ObjectSetInteger(0,"kn Step up",OBJPROP_STATE,false);
}
if (clickedChartObject=="kn Step dn")
{
Step-=5;if (Step<5) Step=5;
Sleep(100);
if (ObjectGetInteger(0,"kn Step dn",OBJPROP_STATE)) ObjectSetInteger(0,"kn Step dn",OBJPROP_STATE,false);
}
if (clickedChartObject=="kn TP up")
{
TP+=5;
Sleep(100);
if (ObjectGetInteger(0,"kn TP up",OBJPROP_STATE)) ObjectSetInteger(0,"kn TP up",OBJPROP_STATE,false);
}
if (clickedChartObject=="kn TP dn")
{
TP-=5;if (TP<5) TP=5;
Sleep(100);
if (ObjectGetInteger(0,"kn TP dn",OBJPROP_STATE)) ObjectSetInteger(0,"kn TP dn",OBJPROP_STATE,false);
}
if (clickedChartObject=="kn K up")
{
K+=0.1;
Sleep(100);
if (ObjectGetInteger(0,"kn K up",OBJPROP_STATE)) ObjectSetInteger(0,"kn K up",OBJPROP_STATE,false);
}
if (clickedChartObject=="kn K dn")
{
K-=0.1;if (K<0.1) K=0.1;
Sleep(100);
if (ObjectGetInteger(0,"kn K dn",OBJPROP_STATE)) ObjectSetInteger(0,"kn K dn",OBJPROP_STATE,false);
}
LabelCreate(0,"Step" ,0 ,350,38,CORNER_RIGHT_UPPER,StringConcatenate("Step ",Step),"Arial",10,clrBlue,0,ANCHOR_CENTER,false,false,true,0);
LabelCreate(0,"TP" ,0 ,450,38,CORNER_RIGHT_UPPER,StringConcatenate("TP ",TP),"Arial",10,clrBlue,0,ANCHOR_CENTER,false,false,true,0);
LabelCreate(0,"K" ,0 ,550,38,CORNER_RIGHT_UPPER,StringConcatenate("K ",DoubleToStr(K,1)),"Arial",10,clrBlue,0,ANCHOR_CENTER,false,false,true,0);
chek();
}
}
//+------------------------------------------------------------------+
int OnInit()
{
ButtonCreate(0,"lot",0,180,50,70,18,"ëîò","Arial",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
ButtonCreate(0,"êîëåí",0,120,50,70,18,"êîëåí","Arial",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
ButtonCreate(0,"êîëåí b",0,55,50,50,18,"buy","Arial",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
ButtonCreate(0,"êîëåí s",0,5,50,50,18,"sell","Arial",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void chek()
{
ObjectsDeleteAll(0,OBJ_TREND);
ObjectsDeleteAll(0,OBJ_LABEL);
ObjectsDeleteAll(0,OBJ_TEXT);
LabelCreate(0,"Step" ,0 ,350,38,CORNER_RIGHT_UPPER,StringConcatenate("Step ",Step),"Arial",10,clrBlue,0,ANCHOR_CENTER,false,false,true,0);
ButtonCreate(0,"kn Step up",0,290,20,18,18,CharToStr(217),"Wingdings",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
ButtonCreate(0,"kn Step dn",0,290,40,18,18,CharToStr(218),"Wingdings",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
LabelCreate(0,"TP" ,0 ,450,38,CORNER_RIGHT_UPPER,StringConcatenate("TP ",TP),"Arial",10,clrBlue,0,ANCHOR_CENTER,false,false,true,0);
ButtonCreate(0,"kn TP up",0,390,20,18,18,CharToStr(217),"Wingdings",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
ButtonCreate(0,"kn TP dn",0,390,40,18,18,CharToStr(218),"Wingdings",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
LabelCreate(0,"K" ,0 ,550,38,CORNER_RIGHT_UPPER,StringConcatenate("K ",DoubleToStr(K,1)),"Arial",10,clrBlue,0,ANCHOR_CENTER,false,false,true,0);
ButtonCreate(0,"kn K up",0,490,20,18,18,CharToStr(217),"Wingdings",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
ButtonCreate(0,"kn K dn",0,490,40,18,18,CharToStr(218),"Wingdings",8,clrBlue,clrGray,clrLightGray,clrNONE,false);
//+------------------------------------------------------------------+
int i,j,b=0,s=0;
int Speriod = iBarShift(NULL,0,StartTime);
int Eperiod = iBarShift(NULL,0,EndTime);
ArrayInitialize(Kb,0);
ArrayInitialize(Ks,0);
ArrayInitialize(Pb,0);
ArrayInitialize(Ps,0);
double OL,nl=0,lot=0,price=0;
int MaxKolenB=0,MaxKolenS=0;
for(i=Speriod; i>=Eperiod; i--)
{
if (Pb[0]==0 && I!=i)
{
Pb[0] = Open[i]; Tb[0] = Time[i];
if (ObjectGetInteger(0,"êîëåí b",OBJPROP_STATE))
DrawText(StringConcatenate(" start b ",TimeToStr(Time[i],TIME_DATE|TIME_MINUTES)),DoubleToStr(Lot,2), Time[i], Pb[0], clrRed);
}
if (Ps[0]==0 && I!=i)
{
Ps[0] = Open[i]; Ts[0] = Time[i];
if (ObjectGetInteger(0,"êîëåí s",OBJPROP_STATE))
DrawText(StringConcatenate(" start s ",TimeToStr(Time[i],TIME_DATE|TIME_MINUTES)),DoubleToStr(Lot,2), Time[i], Ps[0], clrRed);
}
//-------------------------------------------------------------------------------------------------------------------------------------------
nl=0;lot=0;price=0;
if (b==0) nl=Pb[b];
else
{
for(j=0; j<b; j++)//ðàññ÷åò áåçóáûòêà buy
{
OL=Lot*MathPow(K,j);
price += Pb[j]*OL;
lot+=OL;
}
}
if (lot!=0) nl=price/lot;
if (nl!=0 && nl+TP*Point<High[i]) //äîñòèãíóò òåéêïðîôèò ñåðèè buy
{
if (ObjectGetInteger(0,"êîëåí b",OBJPROP_STATE))
for(j=b; j>=0; j--) DrawTrand(StringConcatenate(j," buy ",TimeToStr(Tb[j],TIME_DATE|TIME_MINUTES)," ",Pb[j]," ",nl+TP*Point), Tb[j], Pb[j], Time[i], nl+TP*Point, clrLime);
Pb[0] = 0;
Kb[b]++;
b=0;I=i;
}
while (Pb[0]!=0 && Pb[b]-Step*Point>Low[i])//âûñòàâëÿåì î÷åðåäíîé buy
{
b++; if (b>MaxKolenB) MaxKolenB=b;
if (b>99)
{ Pb[0] = Pb[b-1]-Step*Point; Tb[0] = Time[i]; b=0; break; }
Pb[b]=Pb[b-1]-Step*Point;
Tb[b]=Time[i];
if (ObjectGetInteger(0,"êîëåí b",OBJPROP_STATE))
DrawText(StringConcatenate(b+1," lot ",TimeToStr(Time[i],TIME_DATE|TIME_MINUTES)), DoubleToStr(Lot*MathPow(K,b),2), Time[i], Pb[b], clrBlue);
}
//-------------------------------------------------------------------------------------------------------------------------------------------
nl=0;lot=0;price=0;
if (s==0) nl=Ps[s];
else
{
for(j=0; j<s; j++)//ðàññ÷åò áåçóáûòêà sell
{
OL=Lot*MathPow(K,j);
price += Ps[j]*OL;
lot+=OL;
}
}
if (lot!=0) nl=price/lot;
if (nl!=0 && nl-TP*Point>Low[i]) //äîñòèãíóò òåéêïðîôèò ñåðèè sell
{
if (ObjectGetInteger(0,"êîëåí s",OBJPROP_STATE))
for(j=s; j>=0; j--) DrawTrand(StringConcatenate(j," sell ",TimeToStr(Ts[j],TIME_DATE|TIME_MINUTES)), Ts[j], Ps[j], Time[i], nl-TP*Point, clrBlue);
if (ObjectGetInteger(0,"êîëåí s",OBJPROP_STATE))
DrawText(StringConcatenate(s," start lot ",TimeToStr(Time[i],TIME_DATE|TIME_MINUTES)), DoubleToStr(s,2), Time[i], Ps[0], clrBlue);
Ps[0] = 0;
Ks[s]++;
s=0;I=i;
}
while (Ps[0]!=0 && Ps[s]+Step*Point<High[i])//âûñòàâëÿåì î÷åðåäíîé sell
{
s++; if (s>MaxKolenS) MaxKolenS=s;
if (s>99)
{
Ps[0] = Ps[s-1]+Step*Point;
Ts[0] = Time[i];
s=0;
break;
}
Ps[s]=Ps[s-1]+Step*Point;
Ts[s]=Time[i];
if (ObjectGetInteger(0,"êîëåí s",OBJPROP_STATE))
DrawText(StringConcatenate(s+1," lot ",TimeToStr(Time[i],TIME_DATE|TIME_MINUTES)), DoubleToStr(Lot*MathPow(K,s),2), Time[i], Ps[s], clrBlue);
}
}
DrawLABEL("Èòîãî", StringConcatenate(TimeToStr(StartTime,TIME_DATE), " - ",TimeToStr(EndTime,TIME_DATE)), 10, 10, clrBlue);
i=0;
while (i<=MathMax(MaxKolenB,MaxKolenS))
{
DrawLABEL(StringConcatenate(i,"ëîò"), DoubleToStr(Lot*MathPow(K,i),2), 190, 70+i*15, clrRed);
DrawLABEL(StringConcatenate(i,"êîëåí"), DoubleToStr(i+1,0), 150, 70+i*15, clrRed);
i++;
}
i=0;
while (i<=MaxKolenB)
{
DrawLABEL(StringConcatenate(" êîëåí B",i), DoubleToStr(Kb[i],0), 50, 70+i*15, clrRed);
i++;
}
i=0;
while (i<=MaxKolenS)
{
DrawLABEL(StringConcatenate(" êîëåí S",i), DoubleToStr(Ks[i],0), 10, 70+i*15, clrRed);
i++;
}
}
//+------------------------------------------------------------------+
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[])
{
chek();
return(rates_total);
}
//+------------------------------------------------------------------+
void DrawTrand(string name, datetime t1, double P1, datetime t2, double P2, color clr)
{
if (ObjectFind(name)==-1)
{
ObjectCreate(name, OBJ_TREND, 0, t1, P1, t2, P2);
ObjectSet(name, OBJPROP_COLOR, clr);
ObjectSet(name, OBJPROP_RAY, false);
}
}
//--------------------------------------------------------------------
void DrawLABEL(string name, string Name, int X, int Y, color clr)
{
if (ObjectFind(name)==-1)
{
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
ObjectSet(name, OBJPROP_CORNER, 1);
ObjectSet(name, OBJPROP_XDISTANCE, X);
ObjectSet(name, OBJPROP_YDISTANCE, Y);
}
ObjectSetText(name,Name,10,"Arial",clr);
}
//--------------------------------------------------------------------
void DrawText(string name, string Name, datetime t, double p, color clr)
{
if (ObjectFind(name)==-1)
{
ObjectCreate(name, OBJ_TEXT, 0, t, p);
ObjectSet(name, OBJPROP_ANCHOR,ANCHOR_CENTER);
}
ObjectSetText(name,Name,8,"Arial",clr);
}
//--------------------------------------------------------------------
bool ButtonCreate(const long chart_ID=0, // ID ãðàôèêà
const string name="Button", // èìÿ êíîïêè
const int sub_window=0, // íîìåð ïîäîêíà
const long x=0, // êîîðäèíàòà ïî îñè X
const long y=0, // êîîðäèíàòà ïî îñè Y
const int width=50, // øèðèíà êíîïêè
const int height=18, // âûñîòà êíîïêè
const string text="Button", // òåêñò
const string font="Arial", // øðèôò
const int font_size=10, // ðàçìåð øðèôòà
const color clr=clrLime, // öâåò òåêñòà
const color clrON=clrLime, // öâåò ôîíà
const color clrOFF=clrBlack, // öâåò ôîíà
const color border_clr=clrNONE, // öâåò ãðàíèöû
const bool state=false) // íàæàòà/îòæàòà
{
if (ObjectFind(chart_ID,name)==-1)
{
ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
}
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
color back_clr;
if (ObjectGetInteger(chart_ID,name,OBJPROP_STATE)) back_clr=clrON; else back_clr=clrOFF;
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
return(true);
}
//--------------------------------------------------------------------
bool RectLabelCreate(const long chart_ID=0, // ID ãðàôèêà
const string name="RectLabel", // èìÿ ìåòêè
const int sub_window=0, // íîìåð ïîäîêíà
const long x=0, // êîîðäèíàòà ïî îñè X
const long y=0, // êîîðäèíàòà ïî îñè y
const int width=50, // øèðèíà
const int height=18, // âûñîòà
const color back_clr=clrNONE, // öâåò ôîíà
const color clr=clrNONE, // öâåò ïëîñêîé ãðàíèöû (Flat)
const ENUM_LINE_STYLE style=STYLE_SOLID, // ñòèëü ïëîñêîé ãðàíèöû
const int line_width=1, // òîëùèíà ïëîñêîé ãðàíèöû
const bool back=false, // íà çàäíåì ïëàíå
const bool selection=false, // âûäåëèòü äëÿ ïåðåìåùåíèé
const bool hidden=true, // ñêðûò â ñïèñêå îáúåêòîâ
const long z_order=0) // ïðèîðèòåò íà íàæàòèå ìûøüþ
{
ResetLastError();
if (ObjectFind(chart_ID,name)==-1)
{
ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
}
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
return(true);
}
//--------------------------------------------------------------------
bool LabelCreate(const long chart_ID=0, // ID ãðàôèêà
const string name="Label", // èìÿ ìåòêè
const int sub_window=0, // íîìåð ïîäîêíà
const long x=0, // êîîðäèíàòà ïî îñè X
const long y=0, // êîîðäèíàòà ïî îñè y
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // óãîë ãðàôèêà äëÿ ïðèâÿçêè
const string text="Label", // òåêñò
const string font="Arial", // øðèôò
const int font_size=10, // ðàçìåð øðèôòà
const color clr=clrNONE,
const double angle=0.0, // íàêëîí òåêñòà
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // ñïîñîá ïðèâÿçêè
const bool back=false, // íà çàäíåì ïëàíå
const bool selection=false, // âûäåëèòü äëÿ ïåðåìåùåíèé
const bool hidden=true, // ñêðûò â ñïèñêå îáúåêòîâ
const long z_order=0) // ïðèîðèòåò íà íàæàòèå ìûøüþ
{
ResetLastError();
if (ObjectFind(chart_ID,name)==-1)
{
ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
}
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
return(true);
}
//--------------------------------------------------------------------
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---