Author: Copyright © 2009, Vladimir Hlystov
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
0 Views
0 Downloads
0 Favorites
SendClose
ÿþ//+------------------------------------------------------------------+

//|                           SendClose(barabashkakvn's edition).mq5 |

//|                               Copyright © 2009, Vladimir Hlystov |

//|     v 1.00 B:@K205B 8;8 70:@K205B ?>78F88 ?@8 ?5@5A5G5=88 ;8=89 |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2009, Vladimir Hlystov"

#property link      "cmillion@narod.ru"

#property version   "1.001"

//---

#include <Trade\PositionInfo.mqh>

#include <Trade\Trade.mqh>

#include <Trade\SymbolInfo.mqh>  

CPositionInfo  m_position;                   // trade position object

CTrade         m_trade;                      // trading object

CSymbolInfo    m_symbol;                     // symbol info object

//---

input bool   DRAW_SELL    = true;  // @8A>20BL >B@57:8 Sell

input bool   DRAW_BUY     = true;  // @8A>20BL >B@57:8 BUY

input bool   DRAW_CLOSE1  = true;  // @8A>20BL >B@57:8 Close1

input bool   DRAW_CLOSE2  = true;  // @8A>20BL >B@57:8 Close2

input int    MAX_POSITIONS= 1;     // <0:A8<0;L=>5 :>;;8G5AB2> ?>78F89

input double lot          = 0.10;  // ;>B

input color  resi         = clrBrown;

input color  supp         = clrMediumBlue;

input color  clos         = clrDarkViolet;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

//SetMarginMode();

//if(!IsHedging())

//  {

//   Print("Hedging only!");

//   return(INIT_FAILED);

//  }

//---

   m_symbol.Name(Symbol());                  // sets symbol name

   if(!RefreshRates())

     {

      Print("Error RefreshRates. Bid=",DoubleToString(m_symbol.Bid(),Digits()),

            ", Ask=",DoubleToString(m_symbol.Ask(),Digits()));

      return(INIT_FAILED);

     }

   m_symbol.Refresh();

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

   ObjectDelete(0,"LINES SELL");

   ObjectDelete(0,"LINES BUY");

   ObjectDelete(0,"LINES CLOSE1");

   ObjectDelete(0,"LINES CLOSE2");

   ObjectDelete(0,"LINES SELL n");

   ObjectDelete(0,"LINES BUY n");

   ObjectDelete(0,"LINES CLOSE1 n");

   ObjectDelete(0,"LINES CLOSE2 n");

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   int bar1=0,bar2=0,bar3=0;

   if(DRAW_SELL && ObjectFind(0,"LINES SELL")==-1)

     {

      bar3=searcFR(0,1);

      bar2=searcFR(bar3,-1);

      bar1=searcFR(bar2,1);

      DrawLine("LINES SELL",resi,iTime(m_symbol.Name(),Period(),bar1),iHigh(m_symbol.Name(),Period(),bar1),iTime(m_symbol.Name(),Period(),bar3),iHigh(m_symbol.Name(),Period(),bar3));

     }

   if(DRAW_CLOSE1 && ObjectFind(0,"LINES CLOSE1")==-1)

     {

      bar3=searcFR(0,1);

      bar2=searcFR(bar3,-1);

      bar1=searcFR(bar2,1);

      DrawLine("LINES CLOSE1",clos,iTime(m_symbol.Name(),Period(),bar1),iHigh(m_symbol.Name(),Period(),bar1)+15*Point(),iTime(m_symbol.Name(),Period(),bar3),iHigh(m_symbol.Name(),Period(),bar3)+15*Point());

     }

   if(DRAW_BUY && ObjectFind(0,"LINES BUY")==-1)

     {

      bar3=searcFR(0,-1);

      bar2=searcFR(bar3,1);

      bar1=searcFR(bar2,-1);

      DrawLine("LINES BUY",supp,iTime(m_symbol.Name(),Period(),bar1),iLow(m_symbol.Name(),Period(),bar1),iTime(m_symbol.Name(),Period(),bar3),iLow(m_symbol.Name(),Period(),bar3));

     }

   if(DRAW_CLOSE2 && ObjectFind(0,"LINES CLOSE2")==-1)

     {

      bar3=searcFR(0,-1);

      bar2=searcFR(bar3,1);

      bar1=searcFR(bar2,-1);

      DrawLine("LINES CLOSE2",clos,iTime(m_symbol.Name(),Period(),bar1),iLow(m_symbol.Name(),Period(),bar1)-15*Point(),iTime(m_symbol.Name(),Period(),bar3),iLow(m_symbol.Name(),Period(),bar3)-15*Point());

     }

   string pos=checkapp();

   if(pos=="LINES CLOSE1" || pos=="LINES CLOSE2")

      ClosePositions();

   if(PositionsTotal()<MAX_POSITIONS)

     {

      if(!RefreshRates())

         return;



      if(pos=="LINES SELL")

         m_trade.Sell(lot,m_symbol.Name(),m_symbol.Bid(),0.0,0.0,"LINES SELL");



      if(pos=="LINES BUY")

         m_trade.Buy(lot,m_symbol.Name(),m_symbol.Ask(),0.0,0.0,"LINES BUY ");

     }

   Comment(pos);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void ClosePositions()

  {

   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions

      if(m_position.SelectByIndex(i))

         m_trade.PositionClose(m_position.Ticket());

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int searcFR(int bar,int UP_DN)

  {

   while(true)//8I5< 1 D@0:B0; ?>A;5 bar

     {

      bar++;

      if(Fractal(bar)==UP_DN)

         return(bar);

     }

   return(0);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int Fractal(int br)

  {

   if(br<=2)

      return(0);

   if(iHigh(m_symbol.Name(),Period(),br)>=iHigh(m_symbol.Name(),Period(),br+1) && 

      iHigh(m_symbol.Name(),Period(),br)>iHigh(m_symbol.Name(),Period(),br+2) &&

      iHigh(m_symbol.Name(),Period(),br)>=iHigh(m_symbol.Name(),Period(),br-1) && 

      iHigh(m_symbol.Name(),Period(),br)>iHigh(m_symbol.Name(),Period(),br-2))

      return( 1);

   if(iLow(m_symbol.Name(),Period(),br)<=iLow(m_symbol.Name(),Period(),br+1) && 

      iLow(m_symbol.Name(),Period(),br)<iLow(m_symbol.Name(),Period(),br+2) &&

      iLow(m_symbol.Name(),Period(),br)<=iLow(m_symbol.Name(),Period(),br-1)

      && iLow(m_symbol.Name(),Period(),br)<iLow(m_symbol.Name(),Period(),br-2))

      return(-1);

   return(0);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void DrawLine(string name,color clr,datetime X1,double Y1,datetime X2,double Y2)

  {

   if(ObjectFind(0,name)==0)

      return; //A;8 >1L5:B ACI5AB2C5B

   datetime X1g=iTime(m_symbol.Name(),Period(),0);

   datetime X2g=iTime(m_symbol.Name(),Period(),0)+PeriodSeconds()*30;

   double Y1g=Y1+(Y2-Y1)*(X1g-X1)/(X2-X1);

   double Y2g=Y1+(Y2-Y1)*(X2g-X1)/(X2-X1);

   ObjectCreate(0,name,OBJ_TREND,0,X1g,Y1g,X2g,Y2g);

//--- CAB0=>28< F25B ;8=88

   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);

//--- CAB0=>28< AB8;L >B>1@065=8O ;8=88

   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);

//--- CAB0=>28< B>;I8=C ;8=88

   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(0,name,OBJPROP_BACK,false);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O ;8=88 <KHLN

//--- ?@8 A>740=88 3@0D8G5A:>3> >1J5:B0 DC=:F859 ObjectCreate, ?> C<>;G0=8N >1J5:B

//--- =5;L7O 2K45;8BL 8 ?5@5<5I0BL. =CB@8 65 MB>3> <5B>40 ?0@0<5B@ selection

//--- ?> C<>;G0=8N @025= true, GB> ?>72>;O5B 2K45;OBL 8 ?5@5<5I0BL MB>B >1J5:B

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true);

   ObjectSetInteger(0,name,OBJPROP_SELECTED,true);

   return;

  }

//+------------------------------------------------------------------+

//| ?@>25@:0 2A5E ;8=89 "3@0=8F0"                                    |

//+------------------------------------------------------------------+

string checkapp()

  {

   if(!RefreshRates())

      return("");



   datetime X_1=0,X_2=0,X_3=0;

   double Y_1=0.0,Y_2=0.0,Y_3=0.0;

   double shift_Y=(ChartGetDouble(0,CHART_PRICE_MAX)-ChartGetDouble(0,CHART_PRICE_MIN))/50;

   color clr;

   for(int n=ObjectsTotal(0,-1,OBJ_TREND)-1; n>=0; n--)

     {

      string Obj_N=ObjectName(0,n);

      if(StringFind(Obj_N,"LINES ",0)!=-1) // =0945= >1L5:B-B@5=4 : :>B>@><C 2KG8A;O5BAO ?@81;865=85

        {

         X_1 = (datetime)ObjectGetInteger(0,Obj_N,OBJPROP_TIME,0);

         X_2 = (datetime)ObjectGetInteger(0,Obj_N,OBJPROP_TIME,1);

         ObjectDelete(0,Obj_N+" n");

         if(X_1>X_2 || X_2<iTime(m_symbol.Name(),Period(),0))

            continue;

         Y_1 = ObjectGetDouble(0,Obj_N, OBJPROP_PRICE,0);

         Y_2 = ObjectGetDouble(0,Obj_N, OBJPROP_PRICE,1);

         clr = (color)ObjectGetInteger(0,Obj_N,OBJPROP_COLOR);



         ObjectCreate(0,Obj_N+" n",OBJ_TEXT,0,X_1-PeriodSeconds()*6,Y_1+shift_Y);

         //--- CAB0=>28< B5:AB

         ObjectSetString(0,Obj_N+" n",OBJPROP_TEXT,StringSubstr(Obj_N,6,5));

         //--- CAB0=>28< H@8DB B5:AB0

         ObjectSetString(0,Obj_N+" n",OBJPROP_FONT,"Arial");

         //--- CAB0=>28< @07<5@ H@8DB0

         ObjectSetInteger(0,Obj_N+" n",OBJPROP_FONTSIZE,7);

         //--- CAB0=>28< F25B

         ObjectSetInteger(0,Obj_N+" n",OBJPROP_COLOR,clr);



         if(X_1<=iTime(m_symbol.Name(),Period(),0) && X_2>=iTime(m_symbol.Name(),Period(),0)) // ?>?0405B 2> 2@5<5==>9 480?07>=

           {

            X_3=iTime(m_symbol.Name(),Period(),0);

            Y_3=Y_1+(Y_2-Y_1)*(X_3-X_1)/(X_2-X_1); // C@02=5=85 ?@O<>9

            if(Y_3>=m_symbol.Bid() && Y_3<=m_symbol.Ask())

              {

               return(Obj_N);

              }

           }

        }

     }

   return("");

  }

//+------------------------------------------------------------------+

//| Refreshes the symbol quotes data                                 |

//+------------------------------------------------------------------+

bool RefreshRates()

  {

//--- refresh rates

   if(!m_symbol.RefreshRates())

      return(false);

//--- protection against the return value of "zero"

   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)

      return(false);

//---

   return(true);

  }

//------------------------------------------------------------------------------------------- 

Comments