CTG-Modify_Date

Author: Copyright � 2007, ChaosTradingGroup.com
CTG-Modify_Date
Miscellaneous
It writes information to fileIt writes information to fileIt writes information to fileIt writes information to file
0 Views
0 Downloads
0 Favorites
CTG-Modify_Date
//+------------------------------------------------------------------+
//|                                              CTG-Modify Date.mq4 |
//|                                                CompanyName "CTG" |
//|                                     http://chaostradinggroup.com |
//+------------------------------------------------------------------+

//Ñêðèïò ñîçäàí äëÿ òåðìèíàëà MetaTrader 4, îí èñïðàâëÿåò ãðàôèê, óäëèíÿÿ åãî, 
//ñ ó÷åòîì âûõîäíûõ äíåé è ïðàçäíèêîâ.
//
//Çàïóñòèòå òåðìèíàë MetaTrader 4.  âåðõíåì ìåíþ âûáåðèòå çíà÷îê Íàâèãàòîð,â ðàçäåëå Ñêðèïòû 
//íàéäèòå CTG Modify Date, çàòåì ïåðåêèíüòå åãî íà ãðàôèê, êîòîðûé âû õîòèòå èñïðàâèòü.
//
//Ó èíäèêàòîðà åñòü îïöèÿ ExtPeriodMultiplier, îíà íóæíà, åñëè âû õîòèòå ïîëó÷èòü íåñòàíäàðòíûé
//ïåðèîä ãðàôèêà, íàïðèìåð èç ïåðèîäà H1  ñäåëàòü ïåðèîä H2 èëè ëþáîé äðóãîé. Äëÿ èçìåíåíèÿ
//ïåðèîäà âàì íóæíî èñïðàâèòü ýòî çíà÷åíèå (Íàïðèìåð: - åñëè âàì íóæåí ïåðèîä ãðàôèêà H8, 
//óñòàíîâèòå ExtPeriodMultiplier=8). Åñëè æå âû íå õîòèòå ìåíÿòü ïåðèîä òîãäà îñòàâëÿéòå 1.
//Ñëåäóþùàÿ îïöèÿ ñêðèïòà  Nullbars - ýòà îïöèÿ ñëóæèò äëÿ íàãëÿäíîñòè ïîëó÷åííîãî ãðàôèêà, 
//îíà îáíóëÿåò high è low ó áàðîâ, êîòîðûå ïðèõîäÿòñÿ íà âûõîäíûå. Ïî óìîë÷àíèþ ýòà îïöèÿ âêëþ÷åíà. 
//
//Äàëåå âàì íåîáõîäèìî çàéòè â ãëàâíîå ìåíþ òåðìèíàëà è âûáðàòü îïöèþ îòêðûòü àâòîíîìíî.
//Â ñïèñêå ãðàôèêîâ âûáåðèòå ãðàôèê ñ ïðèïèñêîé M_D è îòêðîéòå åãî.
//Ó âàñ ïîÿâèòñÿ èñïðàâëåííûé ãðàôèê â íîâîì îêíå. Ýòîò ãðàôèê áóäåò îáíîâëÿòüñÿ êàæäûå 2 ñåêóíäû,
//(ïîêà íà ïåðâîì ãðàôèêå âêëþ÷åí ñêðèïò).

#property copyright "Copyright © 2007, ChaosTradingGroup.com"
#property link      "http://ChaosTradingGroup.com"
#property show_inputs
#include <WinUser32.mqh>

extern int ExtPeriodMultiplier=1; // new period multiplier factor
extern bool Nullbars=true;
int        ExtHandle=-1;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   int    i, start_pos, i_time, time0, last_fpos, periodseconds,sk;
   double d_open, d_low, d_high, d_close, d_volume, last_volume;
   int    hwnd=0,cnt=0;
//---- History header
   int    version=400;
   string c_copyright;
   string c_symbol=Symbol()+"-M_D";
   int    i_period=Period()*ExtPeriodMultiplier;
   int    i_digits=Digits;
   int    i_unused[13];


switch ( Period() )
        {
         case 1:     sk=60;  break;
         case 5:     sk=300;  break;
         case 15:    sk=900;  break;
         case 30:    sk=1800;  break;
         case 60:    sk=3600;  break;
         case 240:   sk=14400;  break;
         case 1440:  sk=86400;  break;         
         case 10080: sk=604800;  break;
         case 43200: sk=2592000;  break;          
         
         default: break;
         }





//----  
   ExtHandle=FileOpenHistory(c_symbol+i_period+".hst", FILE_BIN|FILE_WRITE);
   if(ExtHandle < 0) return(-1);
//---- write history file header
   c_copyright="Copyright © 2007, ChaosTradingGroup.com";
   FileWriteInteger(ExtHandle, version, LONG_VALUE);
   FileWriteString(ExtHandle, c_copyright, 64);
   FileWriteString(ExtHandle, c_symbol, 12);
   FileWriteInteger(ExtHandle, i_period, LONG_VALUE);
   FileWriteInteger(ExtHandle, i_digits, LONG_VALUE);
   FileWriteInteger(ExtHandle, 0, LONG_VALUE);       //timesign
   FileWriteInteger(ExtHandle, 0, LONG_VALUE);       //last_sync
   FileWriteArray(ExtHandle, i_unused, 0, 13);
//---- write history file
   periodseconds=i_period*60;
   start_pos=Bars-1;
   d_open=Open[start_pos];
   d_low=Low[start_pos];
   d_high=High[start_pos];
   d_volume=Volume[start_pos];
   //---- normalize open time
   i_time=Time[start_pos]/periodseconds;
   i_time*=periodseconds;
   

   for(i=Time[start_pos-1];i<=Time[0]; i+=sk)
     {
      time0=i;
      if(time0>=i_time+periodseconds || i==Time[0])
        {
         if(i==Time[0] && time0<i_time+periodseconds)
           {
            d_volume+=Volume[0];
            if (Low[0]<d_low)   d_low=Low[0];
            if (High[0]>d_high) d_high=High[0];
            d_close=Close[0];
           }
         last_fpos=FileTell(ExtHandle);
         last_volume=Volume[iBarShift(Symbol(),Period(),i)];
         if ((Nullbars==true && i_period<=1440 && TimeDayOfWeek(i)==0) || (Nullbars==true && i_period<=1440 && TimeDayOfWeek(i)==6))
         {
         d_close=d_open;
         d_low=d_open;
         d_high=d_open;                  
         }
         
         
         FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
         FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);
         FileFlush(ExtHandle);
         cnt++;
         if(time0>=i_time+periodseconds)
           {
            i_time=time0/periodseconds;
            i_time*=periodseconds;
            d_open=Open[iBarShift(Symbol(),Period(),i)];
            d_low=Low[iBarShift(Symbol(),Period(),i)];
            d_high=High[iBarShift(Symbol(),Period(),i)];
            d_close=Close[iBarShift(Symbol(),Period(),i)];
            d_volume=last_volume;
           }
        }
       else
        {
         d_volume+=Volume[i];
         if (Low[iBarShift(Symbol(),Period(),i)]<d_low)   d_low=Low[iBarShift(Symbol(),Period(),i)];
         if (High[iBarShift(Symbol(),Period(),i)]>d_high) d_high=High[iBarShift(Symbol(),Period(),i)];
         d_close=Close[iBarShift(Symbol(),Period(),i)];
        }
     } 
   FileFlush(ExtHandle);
   Print(cnt," record(s) written");
//---- collect incoming ticks

   int last_time=LocalTime()-5;
   while(IsStopped()==false)
     {
      int cur_time=LocalTime();
      //---- check for new rates
      if(RefreshRates())
        {
         time0=Time[0];
         FileSeek(ExtHandle,last_fpos,SEEK_SET);
         //---- is there current bar?
         if(time0<i_time+periodseconds)
           {
            d_volume+=Volume[0]-last_volume;
            last_volume=Volume[0]; 
            if (Low[0]<d_low) d_low=Low[0];
            if (High[0]>d_high) d_high=High[0];
            d_close=Close[0];
           }
         else
           {
            //---- no, there is new bar
            d_volume+=Volume[1]-last_volume;
            if (Low[1]<d_low) d_low=Low[1];
            if (High[1]>d_high) d_high=High[1];
            //---- write previous bar remains
            FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
            FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
            FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
            FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
            FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
            FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);
            last_fpos=FileTell(ExtHandle);
            //----
            i_time=time0/periodseconds;
            i_time*=periodseconds;
            d_open=Open[0];
            d_low=Low[0];
            d_high=High[0];
            d_close=Close[0];
            d_volume=Volume[0];
            last_volume=d_volume;
           }
         //----
         FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
         FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);
         FileFlush(ExtHandle);
         //----
         if(hwnd==0)
           {
            hwnd=WindowHandle(c_symbol,i_period);
            if(hwnd!=0) Print("Chart window detected");
           }
         //---- refresh window not frequently than 1 time in 2 seconds
         if(hwnd!=0 && cur_time-last_time>=2)
           {
            PostMessageA(hwnd,WM_COMMAND,33324,0);
            last_time=cur_time;
           }
        } 
     }     
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void deinit()
  {
   if(ExtHandle>=0) { FileClose(ExtHandle); ExtHandle=-1; }
  }
//+------------------------------------------------------------------+

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 ---