ShadowsTF3





//
//  ShadowsTF.mq4 
//  Dmitry Yakovlev 
//  dmitry_yakovlev@rambler.ru
//  Íà ïèâî WebMoney R865705290089
//------------------------------------------------------------------
#property copyright "Dmitry Yakovlev, Russia,Omsk  WM R865705290089"
#property link      "dmitry_yakovlev@rambler.ru"

#property indicator_chart_window

#import  "shell32.dll"           //Connect a dll (provided with Windows)             
  int ShellExecuteA(int hwnd,string Operation,string File,string Parameters,string Directory,int ShowCmd); 
#import "user32.dll"
  int MessageBoxA(int hWnd ,string lpText,string lpCaption,int uType);
#import

//---- input 
extern string    _tf="Òàéìôðåéì (ìèí):";
extern int       tf=240;
extern string    _idepth="Ê-âî áàðîâ,åñëè 0-âñå";
extern int       idepth=30;
extern string    _shift="Ñäâèã (ìèíóò)";
extern int       iMin=60;
extern string    _Filled="Çàêðàñêà áàðîâ?(false-ðàìêà)";
extern bool      Filled=true;
extern string    _Border="+Êîíòóð?";
extern bool      Border=true;
extern string    _hilo="Öâåò High/Low, Up, Down";
extern color     HiLoColor=DarkGray;
extern color     UpColor=MediumSeaGreen;
extern color     DnColor=Tomato;
extern string    _MidColor="Öâåò ëèíèè (High+Low)/2 (None-áåç ëèíèè)";
extern color     MidColor=Yellow;
extern string    _BordColor="Öâåò êîíòóðà";
extern color     BordColor=Yellow;
extern string    _Trend="Ìèêðî Òðåíä îò Open äî Close";
extern bool      Trend=true;
extern string    _donate1="Íà ïèâî :-) WebMoney";
extern string    _donate2="R865705290089";
//+------------------------------------------------------------------+
int depth=30;
int k=1;

void init()
{
   CheckDonate();
   
   k=MathRound(tf/Period());
   if(idepth==0) depth=Bars; else depth=idepth;
   deleteAll();
   if(tf==0 || tf<Period()) tf=Period();
   if(tf<=Period())
   {
      if(Period()==PERIOD_M1) tf=PERIOD_M5;
      if(Period()==PERIOD_M5) tf=PERIOD_M15;
      if(Period()==PERIOD_M15) tf=PERIOD_M30;
      if(Period()==PERIOD_M30) tf=PERIOD_H1;
      if(Period()==PERIOD_H1) tf=PERIOD_H4;
      if(Period()==PERIOD_H4) tf=PERIOD_D1;
      if(Period()==PERIOD_D1) tf=PERIOD_W1;
   }
   if(iMin>=tf) iMin=0;
}

void deinit()
{
   if(idepth==0) depth=Bars;  else depth=idepth;
   deleteAll();
}

int start()
{
   int      counted_bars=IndicatorCounted();
   int      i=0, ti=0,cdow,ii,jj;
   datetime t1,t2,ct;
   double   p1,p2,p3,p4;
   if(idepth==0) depth=(Bars-counted_bars)/k;  else depth=idepth;
//----
   deleteAll();
   int cnt=0,plus=0,FirstBar=1;
   for(i=0;i<depth;i++)
   {
      cdow=TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,i));
      ct=iTime(Symbol(),PERIOD_D1,i)+iMin*60;
      
      FirstBar=1;
      for(ii=ct;ii<(ct+24*60*60);ii+=tf*60)
      {
         if(ii>TimeCurrent()) break;
         
         t1=ii;
         if(cdow==1 && FirstBar==1) t1=iTime(Symbol(),PERIOD_D1,i)+61*60;
         t2=ii+tf*60-Period()*30;
         if(t2>TimeCurrent()) t2=TimeCurrent();
         FirstBar=0;
      
         p3=iOpen(Symbol(),0,iBarShift(Symbol(),0,t1+plus,false));
         p4=iClose(Symbol(),0,iBarShift(Symbol(),0,t2,false));

         p1=-100; p2=+100;
         for(jj=t1+plus;jj<=t2;jj+=60)
         {
            p1=MathMax(p1,iHigh(Symbol(),0,iBarShift(Symbol(),0,jj,false)));
            p2=MathMin(p2,iLow(Symbol(),0,iBarShift(Symbol(),0,jj,false)));
         }
         drawCandle(cnt,t1,t2,p1,p2,p3,p4); cnt++;
      }
   }
   //----
   return(0);
}

double myHigh(int TF=0, int shift=0, int num=10)
{
   double ret=iHigh(Symbol(),TF,shift);
   for(int i=shift;i<=(shift+num);i++)
      if(i>=0) ret=MathMax(ret,iHigh(Symbol(),TF,i));
      else ret=MathMax(ret,iHigh(Symbol(),TF,0));
   return(ret);
}
double myLow(int TF=0, int shift=0, int num=10)
{
   double ret=iLow(Symbol(),TF,shift);
   for(int i=shift;i<=(shift+num);i++)
      if(i>=0) ret=MathMin(ret,iLow(Symbol(),TF,i));
      else ret=MathMin(ret,iLow(Symbol(),TF,0));
   return(ret);
}


//+------------------------------------------------------------------+
void drawCandle(int n,int t1,int t2, double p1, double p2, double p3, double p4)
{
   string ml="mid_"+DoubleToStr(tf,0)+"_"+DoubleToStr(n,0);
   string n1="canhi_"+DoubleToStr(tf,0)+"_"+DoubleToStr(n,0);
   string n2="canopcl_"+DoubleToStr(tf,0)+"_"+DoubleToStr(n,0); 
   string n3="canlo_"+DoubleToStr(tf,0)+"_"+DoubleToStr(n,0); 
   string n4="canbord_"+DoubleToStr(tf,0)+"_"+DoubleToStr(n,0); 
   string n5="cantr_"+DoubleToStr(tf,0)+"_"+DoubleToStr(n,0); 
   color clr=UpColor;
   double p_open=p3,p_close=p4;
   
   if(p4>p3) 
   {
      double sw=p3;
      p3=p4;
      p4=sw;
      clr=UpColor;
   }
   else
      clr=DnColor;
   
   // mid line (high+low)/2 === (p1+p2)/2
   ObjectCreate(ml, OBJ_TREND, 0, t1, (p1+p2)/2, t2, (p1+p2)/2);
   ObjectSet(ml, OBJPROP_COLOR, MidColor);
   ObjectSet(ml,OBJPROP_WIDTH,2);
   ObjectSet(ml, OBJPROP_RAY, 0);
   ObjectSet(ml, OBJPROP_STYLE, STYLE_SOLID);

   ObjectCreate(n1, OBJ_RECTANGLE, 0, t1, p1, t2, p3);
   ObjectSet(n1, OBJPROP_COLOR, HiLoColor);
   ObjectSet(n1,OBJPROP_BACK,Filled);
   ObjectSet(n1,OBJPROP_WIDTH,1);
   ObjectSet(n1,OBJPROP_STYLE,0);

   ObjectCreate(n2, OBJ_RECTANGLE, 0, t1, p3, t2, p4);
   ObjectSet(n2, OBJPROP_COLOR, clr);
   ObjectSet(n2,OBJPROP_BACK,Filled);
   ObjectSet(n2,OBJPROP_WIDTH,1);
   ObjectSet(n2,OBJPROP_STYLE,0);

   // <trend
   if(Trend)
   {
      ObjectCreate(n5, OBJ_TREND, 0, t1, p_open, t2, p_close);
      if(p_open<p_close) ObjectSet(n5, OBJPROP_COLOR, Lime);
      if(p_open>p_close) ObjectSet(n5, OBJPROP_COLOR, Red);
      ObjectSet(n5,OBJPROP_RAY,false);
      ObjectSet(n5,OBJPROP_WIDTH,2);
      ObjectSet(n5,OBJPROP_STYLE,0);
   }
   // trend>
   
   ObjectCreate(n3, OBJ_RECTANGLE, 0, t1, p4, t2, p2);
   ObjectSet(n3, OBJPROP_COLOR, HiLoColor);
   ObjectSet(n3,OBJPROP_BACK,Filled);
   ObjectSet(n3,OBJPROP_WIDTH,1);
   ObjectSet(n3,OBJPROP_STYLE,0);
   
   // hi-lo border
   if(Filled && Border)
   {
      ObjectCreate(n4, OBJ_RECTANGLE, 0, t1, p1, t2, p2);
      ObjectSet(n4, OBJPROP_COLOR, Yellow);
      ObjectSet(n4,OBJPROP_BACK,false);
      ObjectSet(n4,OBJPROP_WIDTH,1);
      ObjectSet(n4,OBJPROP_STYLE,0);
   }
}

void deleteAll()
{
   for(int i=-10;i<depth*24*60/tf;i++)
   {
      ObjectDelete("mid_"+DoubleToStr(tf,0)+"_"+DoubleToStr(i,0));
      ObjectDelete("canhi_"+DoubleToStr(tf,0)+"_"+DoubleToStr(i,0));
      ObjectDelete("canopcl_"+DoubleToStr(tf,0)+"_"+DoubleToStr(i,0));
      ObjectDelete("canlo_"+DoubleToStr(tf,0)+"_"+DoubleToStr(i,0));
      ObjectDelete("canbord_"+DoubleToStr(tf,0)+"_"+DoubleToStr(i,0)); 
      ObjectDelete("cantr_"+DoubleToStr(tf,0)+"_"+DoubleToStr(i,0)); 
   }
}

void CheckDonate()
{
   int fd=0; string pay="0"; datetime dt=0;
   string fn="ShadowsTF.txt";
   fd=FileOpen(fn,FILE_READ|FILE_CSV,";");
   if(fd>=1)
   {
      pay=FileReadString(fd); if(pay!="0" && pay!="1") pay="0";
      dt=StrToTime(FileReadString(fd));
   }
   else
   {
      dt=TimeCurrent();
      fd=FileOpen(fn,FILE_WRITE|FILE_CSV,";");
      FileWrite(fd,"0",TimeToStr(dt,TIME_DATE));
   }
   FileClose(fd);
   
   if(pay=="0" && (TimeCurrent()-dt)>10*24*60*60) // 5 äíåé
   {
      if(MessageBoxA(0,"Åñëè Âàì ïîíðàâèëñÿ èíäèêàòîð ShadowsTF,\n õîòèòå ïîìî÷ü àâòîðó ìàòåðèàëüíî?","Âîïðîñ",4)==6)
      {
         ShellExecuteA(0,"Open","iexplore.exe","wmk:payto?Purse=R865705290089&Amount=100&Desc=Indicator&BringToFront=Y&ExecEvenKeeperIsOffline=Y","",7);
         pay="1";
      }
      dt=TimeCurrent();
      
      fd=FileOpen(fn,FILE_WRITE|FILE_CSV,";");
      FileWrite(fd,pay,TimeToStr(dt,TIME_DATE));
      FileClose(fd);
   }
   FileClose(fd);
}






Sample





Analysis



Market Information Used:

Series array that contains open prices of each bar
Series array that contains close prices for each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:
shell32
user32

Order Management characteristics:

Other Features:

Uses files from the file system
It reads information from a file
It writes information to file