Author: Denis Orlov
Miscellaneous
It issuies visual alerts to the screenUses files from the file systemImplements a curve of type %1It reads information from a file
0 Views
0 Downloads
0 Favorites
Anecdote
//+------------------------------------------------------------------+
//|                                                    TimeLines.mq4 |
//|                                                      Denis Orlov |
//|                                    http://denis-or-love.narod.ru |
/*
Àâòîìàòè÷åñêàÿ ðàçëèíîâêà ãðàôèêà ïî âðåìåíè, òàéìåð è ÀÍÅÊÄÎÒ!!!. 
ôàéë Anecdote.txt ñëåäóåò ñîõðàíèòü  â ïàïêå experts\files â äèðåêòîðèè âàøåãî òåðìèíàëà.

Íàïðèìåð : Ñ:\Program Files\ Broco Trader (èëè ÷òî òàì ó Âàñ :-) \experts\files
Ñàì èäèêàòîð ñëåäóåò ïîìåñòèòü â ïàïêó experts\indicators.

Ïîäðîáíî:
http://codebase.mql4.com/ru/6166

Automatic marking of the chart by the time and the timer. 
In detail:
http://codebase.mql4.com/6095

***
Âñå ìîè èíäèêàòîðû:
http://codebase.mql4.com/ru/author/denis_orlov
***
ÏÎËÜÇÓÉÒÅÑÜ È ÏÐÎÖÂÅÒÀÉÒÅ!
***
All my indicators:

http://codebase.mql4.com/author/denis_orlov
***
USE AND PROSPER!

*/
//+------------------------------------------------------------------+
#property copyright "Denis Orlov"
#property link      "http://denis-or-love.narod.ru"

#include <stdlib.mqh>//for ErrorDescription

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Green

double Smile[];

#define Pr "TimeLines "

extern string FileName="Anecdote.txt";
extern int period=15;
extern bool ShowAnecdotes=True;
extern bool ShowSmiles=True;
extern bool ShowLines=True;
extern color LineColor=Blue;
extern int LineWidth=1;
extern int LineStyle=2;
extern int History=100;
extern bool Back=true;//Ðèñîâàòü êàê ôîí

datetime per;
string Arr[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
/*if(period<=Period()|| period<5)
     Alert(
     "Èíäèêàòîð TimeLines íå áóäåò ðàáîòàòü íà ýòîì ÒÔ"+"\n"+
     "ñî çíà÷åíèåì \"period\"="+period+"\n"+
     "Èçìåíèòå ýòî çíà÷åíèå, ïîæàëóéñòà."+"\n"+
     "Indicator TimeLines will not work on this TF"+"\n"+
     "with the value of the \"period\"="+period+"\n"+
     "Change this value, please.");*/

   if(ShowAnecdotes)
     {
      int fname=FileOpen(FileName,FILE_BIN|FILE_READ);
      if(fname>0)
        {

         string str; ArrayResize(Arr,0);
         while(!FileIsEnding(fname))
           {
            str=GetStringFromFile(fname);
            while(StringFind(str,"\t")>-1 && StringLen(str)>1)
               str=_StringReplace(str,"\t","\n");

            if(StringLen(str)<5) continue;

            int Size=ArraySize(Arr);
            ArrayResize(Arr,Size+1);
            Arr[Size]=str;

           }

         // Alert(Size+1);
        }
      else
        {
         int err=GetLastError();
         Comment("Îøèáêà îòêðûòèÿ ôàéëà \""+FileName+"\"\n"+
                 "Error of opening file ",err,": ",ErrorDescription(err));
        }
     } //if(ShowAnecdotes)

   IndicatorShortName("Anecdote "+PeriodToStr(period));

   SetIndexBuffer(0,Smile);
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,2);
   SetIndexArrow(0,74);
   SetIndexLabel(0,"Smile Time "+PeriodToStr(period));
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Delete_My_Obj(Pr+PeriodToStr(period));
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   if(period<=Period() || period<5) return(0);

   int   Counted_bars=IndicatorCounted();

   if(Counted_bars>0)
     {
      if(per==Time[0]) return(0);
      per= Time[0];
      CheckAndDraw(Time[0]);
      return(0);
     }

   int      i=Bars-Counted_bars-1;           // Èíäåêñ ïåðâîãî íåïîñ÷èòàííîãî  
   if(History>0 && i>History-1) // Åñëè ìíîãî áàðîâ òî ..      
      i=History-1;

   while(i>=0) // Öèêë ïî íåïîñ÷èòàííûì áàðàì     
     {
      CheckAndDraw(Time[i]);

      i--;
     }

//----
   return(0);
  }
//+------------------------------------------------------------------+
void CheckAndDraw(datetime t)
  {
   int TM=TimeMinute(t),TH=TimeHour(t);
   bool draw=false;

   if(period==5)
     {
      if(TM==0 || TM==5 || TM==10 || TM==15 || TM==20 || TM==25 || TM==30
         ||TM==35 ||TM==40 ||TM==45||TM==50||TM==55)
         draw=true;
     }
   if(period==15)
     {
      if( TM==0 || TM==15 ||TM==30 ||TM==45)
         draw=true;
     }
   if(period==30)
     {
      if( TM==0 || TM==30)
         draw=true;
     }
   if(period==60)
     {
      if(TM==0)
         draw=true;
     }
   if(period==240)
     {
      if(TM==0 && (TH==0 || TH==4 || TH==8 || TH==12 || TH==16 || TH==20 || TH==24))
         draw=true;
     }
   if(period==1440)
     {
      if(TH==0 && TM==0)
         draw=true;
     }
   if(period==10080)
     {
      if(TH==0 && TM==0 && TimeDayOfWeek(t)==1)
         draw=true;
     }
   if(period==43200)
     {
      if(TH==0 && TM==0 && TimeDay(t)==1)
         draw=true;
     }

   string LName=Pr+PeriodToStr(period)+" "+TimeToStr(t,TIME_DATE|TIME_MINUTES);


   if(ShowLines && draw && ObjectFind(LName)<0)
     {
      ObjectCreate(LName,OBJ_VLINE,0,t,0);
      ObjectSet(LName,OBJPROP_COLOR,LineColor);
      ObjectSet(LName,OBJPROP_WIDTH,LineWidth);
      if(Back==true)ObjectSet(LName,OBJPROP_BACK,Back);
      if(LineWidth<2)
         ObjectSet(LName,OBJPROP_STYLE,LineStyle);
      // ObjectSetText( LName, DoubleToStr(TM,0));

     }

   datetime nt=t+period*60;
   LName=Pr+PeriodToStr(period)+" "+TimeToStr(nt,TIME_DATE|TIME_MINUTES);

   if(ShowAnecdotes && draw && Time[0]==t && ObjectFind(LName)<0)
     {
      MathSrand((int)TimeLocal());
      int i=MathRand();
      while(i>ArraySize(Arr)-1)
         i=MathRand();

      //Comment("Àíåêäîò ¹"+Arr[i]);  
      Alert("Smile Time "+PeriodToStr(period)+": "+TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)+" ! Àíåêäîò ¹"+Arr[i]);
      if(ShowSmiles) Smile[0]=High[1]+(High[1]-Low[1])*3;

     }

   if(ShowLines && draw && ObjectFind(LName)<0)
     {

      ObjectCreate(LName,OBJ_VLINE,0,nt,0);
      ObjectSet(LName,OBJPROP_COLOR,LineColor);
      ObjectSet(LName,OBJPROP_WIDTH,LineWidth);
      if(Back==true)ObjectSet(LName,OBJPROP_BACK,Back);
      if(LineWidth<2)
         ObjectSet(LName,OBJPROP_STYLE,LineStyle);
      // ObjectSetText( LName, DoubleToStr(TM,0));
     }


  }
//----------------------
void Delete_My_Obj(string Prefix)
  {//Alert(ObjectsTotal());
   for(int k=ObjectsTotal()-1; k>=0; k--) // Ïî êîëè÷åñòâó âñåõ îáúåêòîâ 
     {
      string Obj_Name=ObjectName(k);   // Çàïðàøèâàåì èìÿ îáúåêòà
      string Head=StringSubstr(Obj_Name,0,StringLen(Prefix));// Èçâëåêàåì ïåðâûå ñèì

      if(Head==Prefix)// Íàéäåí îáúåêò, ..
        {
         ObjectDelete(Obj_Name);
         //Alert(Head+";"+Prefix);
        }

     }
  }
//-------------------------------
string PeriodToStr(int Per)
  {
   switch(Per) // Ðàñ÷¸ò  äëÿ..     
     {                              // .. ðàçëè÷íûõ ÒÔ     
      case     1: return("M1"); break;// Òàéìôðåéì Ì1      
      case     5: return("M5"); break;// Òàéìôðåéì Ì5      
      case    15: return("M15"); break;// Òàéìôðåéì Ì15      
      case    30: return("M30"); break;// Òàéìôðåéì Ì30      
      case    60: return("H1"); break;// Òàéìôðåéì H1      
      case   240: return("H4"); break;// Òàéìôðåéì H4      
      case  1440: return("D1"); break;// Òàéìôðåéì D1      
      case 10080: return("W1"); break;// Òàéìôðåéì W1      
      case 43200: return("ÌN"); break;// Òàéìôðåéì ÌN     
      default: return("M1");
     }
  }
///-----------------------------
//+----------------------------------------------------------------------------+
//|  ×èòàåò ñòðîêîâûé áëîê èç ôàéëà äî çíàêà ïåðåíîñà êàðåòêè #13#10           |
//|  Ïàðàìåòðû:                                                                |
//|    fh - îïèñàòåëü îòêðûòîãî ðàíåå ôàéëà                                                        |
//|                                            |
//+----------------------------------------------------------------------------+
string GetStringFromFile(int &fh)
  {
   string str="",s;
   while(!FileIsEnding(fh))
     {
      s=FileReadString(fh,1);
      int Ch=StringGetChar(s, 0);
      if(Ch!=13 && Ch!=10) str=str+s;
      else return(str);
     }
   return(str);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string _StringReplace(string text,string oldstr,string newstr)
  {
   int pos=StringFind(text,oldstr);
   if(pos>-1)
     {
      string str=StringSubstr(text,0,pos)+newstr+StringSubstr(text,pos+StringLen(oldstr));
      return(str);
     }
   return(text);
  }
//+------------------------------------------------------------------+

Comments