View Single Post
  #6 (permalink)  
Old 03-10-2008, 01:03 AM
DooMGuarD DooMGuarD is offline
Freshman
 
Join Date: Feb 2008
Posts: 4
Thanks: 0
Thanked 0 Times in 0 Posts
DooMGuarD is on a distinguished road
Default

hi...

you can make a offline chart for every time... if you need... but the minimum time is 1 minute... the script above create a 3 hour timeframe for a offline charts...

PHP Code:
//+------------------------------------------------------------------+
//|                                             Period_Converter.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property show_inputs
#include <WinUser32.mqh>
/*
  # Open H1 chart.
  # Attach to chart 'Period_converter.mq4' MQL4 file from 'Script' folder of 'Navigator' window.
  # On 'Common' tab check 'Allow DLL imports' and clear 'Confirm DLL function calls' checkbox.
  # On 'Inputs' properties tab please set 'ExtPeriodMultiplier' variable value to 3 (you'll 
    get H1*3 = H3).
  # Click OK.
  # Open H3 chart in offline mode ('File – Open Offline'). H3 chart will be updated every 2 
    sec (by default) while H1 chart with attached 'Period_converter.mq4' will be opened.
*/
extern int ExtPeriodMultiplier=3// new period multiplier factor
int        ExtHandle=-1;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   
int    istart_posi_timetime0last_fposperiodseconds;
   
double d_opend_lowd_highd_closed_volumelast_volume;
   
int    hwnd=0,cnt=0;
//---- History header
   
int    version=400;
   
string c_copyright;
   
string c_symbol=Symbol();
   
int    i_period=Period()*ExtPeriodMultiplier;
   
int    i_digits=Digits;
   
int    i_unused[13];
//----  
   
ExtHandle=FileOpenHistory(c_symbol+i_period+".hst"FILE_BIN|FILE_WRITE);
   if(
ExtHandle 0) return(-1);
//---- write history file header
   
c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   
FileWriteInteger(ExtHandleversionLONG_VALUE);
   
FileWriteString(ExtHandlec_copyright64);
   
FileWriteString(ExtHandlec_symbol12);
   
FileWriteInteger(ExtHandlei_periodLONG_VALUE);
   
FileWriteInteger(ExtHandlei_digitsLONG_VALUE);
   
FileWriteInteger(ExtHandle0LONG_VALUE);       //timesign
   
FileWriteInteger(ExtHandle0LONG_VALUE);       //last_sync
   
FileWriteArray(ExtHandlei_unused013);
//---- 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=start_pos-1;i>=0i--)
     {
      
time0=Time[i];
      if(
time0>=i_time+periodseconds || i==0)
        {
         if(
i==&& time0<i_time+periodseconds)
           {
            
d_volume+=Volume[0];
            if (
Low[0]<d_low)   d_low=Low[0];
            if (
High[0]>d_highd_high=High[0];
            
d_close=Close[0];
           }
         
last_fpos=FileTell(ExtHandle);
         
last_volume=Volume[i];
         
FileWriteInteger(ExtHandlei_timeLONG_VALUE);
         
FileWriteDouble(ExtHandled_openDOUBLE_VALUE);
         
FileWriteDouble(ExtHandled_lowDOUBLE_VALUE);
         
FileWriteDouble(ExtHandled_highDOUBLE_VALUE);
         
FileWriteDouble(ExtHandled_closeDOUBLE_VALUE);
         
FileWriteDouble(ExtHandled_volumeDOUBLE_VALUE);
         
FileFlush(ExtHandle);
         
cnt++;
         if(
time0>=i_time+periodseconds)
           {
            
i_time=time0/periodseconds;
            
i_time*=periodseconds;
            
d_open=Open[i];
            
d_low=Low[i];
            
d_high=High[i];
            
d_close=Close[i];
            
d_volume=last_volume;
           }
        }
       else
        {
         
d_volume+=Volume[i];
         if (
Low[i]<d_low)   d_low=Low[i];
         if (
High[i]>d_highd_high=High[i];
         
d_close=Close[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_lowd_low=Low[0];
            if (
High[0]>d_highd_high=High[0];
            
d_close=Close[0];
           }
         else
           {
            
//---- no, there is new bar
            
d_volume+=Volume[1]-last_volume;
            if (
Low[1]<d_lowd_low=Low[1];
            if (
High[1]>d_highd_high=High[1];
            
//---- write previous bar remains
            
FileWriteInteger(ExtHandlei_timeLONG_VALUE);
            
FileWriteDouble(ExtHandled_openDOUBLE_VALUE);
            
FileWriteDouble(ExtHandled_lowDOUBLE_VALUE);
            
FileWriteDouble(ExtHandled_highDOUBLE_VALUE);
            
FileWriteDouble(ExtHandled_closeDOUBLE_VALUE);
            
FileWriteDouble(ExtHandled_volumeDOUBLE_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(ExtHandlei_timeLONG_VALUE);
         
FileWriteDouble(ExtHandled_openDOUBLE_VALUE);
         
FileWriteDouble(ExtHandled_lowDOUBLE_VALUE);
         
FileWriteDouble(ExtHandled_highDOUBLE_VALUE);
         
FileWriteDouble(ExtHandled_closeDOUBLE_VALUE);
         
FileWriteDouble(ExtHandled_volumeDOUBLE_VALUE);
         
FileFlush(ExtHandle);
         
//----
         
if(hwnd==0)
           {
            
hwnd=WindowHandle(Symbol(),i_period);
            if(
hwnd!=0) Print("Chart window detected");
           }
         
//---- refresh window not frequently than 1 time in 2 seconds
         
if(hwnd!=&& 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; }
  }
//+------------------------------------------------------------------+ 
Reply With Quote

Registered members have access to special online forex currency trading tools, software, mt4 expert advisors and indicators. Register now

Main Menu

Economic Forecast