_s_HistoryGen

Author: Copyright � 2005, MetaQuotes Software Corp.
_s_HistoryGen
Miscellaneous
It opens Message Boxes to the userIt writes information to fileIt writes information to fileIt writes information to fileIt writes information to file
0 Views
0 Downloads
0 Favorites
_s_HistoryGen
//+------------------------------------------------------------------+
//|                                                _s_HistoryGen.mq4 |
//|                                     Copyright © 2005, Doji Starr |
//|                   Based on Period_converter script by metaquotes |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property show_inputs

#include <WinUser32.mqh>



int start()
{
    if (Period() != 1)
    {
        MessageBox("This script is to be applied to M1 charts only.", "_s_HistoryGen", MB_OK);
        return (-1);
    }
    
    int    ExtHandle, period;
    int    periodArray[9] = {1, 5, 15, 30, 60, 240, 1440, 10080, 43200};
    int    i, start_pos, i_time, time0, last_fpos, periodseconds;
    double d_open, d_low, d_high, d_close, d_volume, last_volume;
    int    hwnd ,cnt;
    
    //---- History header
    int    version=400;
    string c_copyright = "(C)opyright 2003, MetaQuotes Software Corp.";
    string c_symbol=Symbol();
    int    i_period;
    int    i_digits=Digits;
    int    i_unused[13];
    
    for (period=1; period<=8; period++)
    {
        ExtHandle=-1;
        hwnd = 0;
        cnt = 0;
        version = 400;
        i_period = Period()*periodArray[period];
    
        ExtHandle = FileOpenHistory(c_symbol+i_period+".hst", FILE_BIN|FILE_WRITE);
        if (ExtHandle < 0)
            return(-1);
            
        //---- write history file header
        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=start_pos-1;i>=0; i--)
        {
            //     Print(i);
            time0=Time[i];
            if(time0>=i_time+periodseconds || i==0)
            {
                if(i==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[i];
                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[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_high) d_high=High[i];
                d_close=Close[i];
            }
        } 
        FileFlush(ExtHandle);
        FileClose(ExtHandle);
            
        Print("Period_", periodArray[period], ": ", cnt, " record(s) written");
    }
    
    return(0);
}

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