cm_ind_-_Smart_Gread_260914

Author: Copyright 2014, cmillion@narod.ru
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 supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---