Miscellaneous
0
Views
0
Downloads
0
Favorites
HistoryConverter
//+------------------------------------------------------------------+
//| HistoryConverter.mq4 |
//| 220Volt |
//| Version 1 |
//+------------------------------------------------------------------+
#property copyright "220Volt"
#property link ""
#property show_inputs
#define _OUT_DELIMITER ','
extern string fileName_1; // Ôàéë ñ èñõîäíîé èñòîðèåé
extern string fileName_2; // Ôàéë ñ èñõîäíîé èñòîðèåé
extern string fileName_rez; // Èìÿ ôàéëà ñ ñèíòåçèðîâàííîé èñòîðèåé (áóäåò ñîçäàí èëè ïåðåçàïèñàí)
extern int delimiter = ','; // Ðàçäåëèòåëü â ôàéëàõ-èñòî÷íèêàõ
extern int skipLine = 0; // Ïðîïóñòèòü skipLin ñòðîê â ôàéëàõ-èñòî÷íèêàõ
extern int mode = 1; // Ðåæèì ñèíòåçà: 1 -- high = max(highFile1, highFile2); low = min(lowFile1, lowFile2); close = (closeFile1 + closeFile2) / 2; open = (openFile1 + openFile2) / 2;
// 2 -- param = (paramFile1 + paramFile2) / 2 (Avg èñòîðèÿ)
extern int digits = 5; // Çíàêîâ ïîñëå òî÷êè (òî÷íîñòü èíñòðóìåíòà)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int f1_handle = 0;
datetime f1_time = -1;
bool f1_Init()
{
f1_handle = FileOpen(fileName_1, FILE_CSV|FILE_READ, delimiter);
if( f1_handle == -1)
return(false);
for(int count = skipLine; count > 0; count --)
{
while(true)
{
FileReadString(f1_handle);
if(FileIsLineEnding(f1_handle))
break;
}
}
return(true);
}
void f1_Deinit()
{
if(f1_handle > 0)
FileClose(f1_handle);
}
datetime f1_GetTime()
{
if(f1_time != -1)
return(f1_time);
f1_time = StrToTime( FileReadString(f1_handle) );
if(FileIsEnding(f1_handle))
f1_time = -1;
return(f1_time);
}
void f1_GetData(double &open,
double &high,
double &low,
double &close,
double &volume)
{
f1_time = -1;
open = 0;
high = 0;
low = 0;
close = 0;
volume = 0;
if(FileIsLineEnding(f1_handle))
return;
open = FileReadNumber(f1_handle); if(FileIsLineEnding(f1_handle)) return;
high = FileReadNumber(f1_handle); if(FileIsLineEnding(f1_handle)) return;
low = FileReadNumber(f1_handle); if(FileIsLineEnding(f1_handle)) return;
close = FileReadNumber(f1_handle); if(FileIsLineEnding(f1_handle)) return;
volume = FileReadNumber(f1_handle);
}
//+-----------------------------------------------
int f2_handle = 0;
datetime f2_time = -1;
bool f2_Init()
{
f2_handle = FileOpen(fileName_2, FILE_CSV|FILE_READ, delimiter);
if( f2_handle == -1)
return(false);
for(int count = skipLine; count > 0; count --)
{
while(true)
{
FileReadString(f2_handle);
if(FileIsLineEnding(f2_handle))
break;
}
}
return(true);
}
void f2_Deinit()
{
if(f2_handle > 0)
FileClose(f2_handle);
}
datetime f2_GetTime()
{
if(f2_time != -1)
return(f2_time);
f2_time = StrToTime( FileReadString(f2_handle) );
if(FileIsEnding(f2_handle))
f2_time = -1;
return(f2_time);
}
void f2_GetData(double &open,
double &high,
double &low,
double &close,
double &volume)
{
f2_time = -1;
open = 0;
high = 0;
low = 0;
close = 0;
volume = 0;
if(FileIsLineEnding(f2_handle))
return;
open = FileReadNumber(f2_handle); if(FileIsLineEnding(f2_handle)) return;
high = FileReadNumber(f2_handle); if(FileIsLineEnding(f2_handle)) return;
low = FileReadNumber(f2_handle); if(FileIsLineEnding(f2_handle)) return;
close = FileReadNumber(f2_handle); if(FileIsLineEnding(f2_handle)) return;
volume = FileReadNumber(f2_handle);
}
//+-----------------------------------------------
int fRez_handle = 0;
bool fRez_Init()
{
if(mode != 1 && mode != 2)
return(false);
if( !f1_Init() || !f2_Init() )
return(false);
double open, high, low, close, volume;
datetime time1 = -2, time2;
while(true)
{
if(time1 == -2)
{
time1 = f1_GetTime();
time2 = f2_GetTime();
}
else
{
if(time1 < time2)
{
f1_GetData(open, high, low, close, volume);
time1 = f1_GetTime();
}
else
{
f2_GetData(open, high, low, close, volume);
time2 = f2_GetTime();
}
}
if(time1 == -1 || time2 == -1)
return(false);
if(time1 == time2)
break;
}
fRez_handle = FileOpen(fileName_rez, FILE_CSV|FILE_WRITE, _OUT_DELIMITER);
if( fRez_handle == -1)
return(false);
return(true);
}
void fRez_Deinit()
{
f1_Deinit();
f2_Deinit();
if(fRez_handle > 0)
FileClose(fRez_handle);
}
bool fRez_Step()
{
datetime time1 = f1_GetTime();
datetime time2 = f2_GetTime();
if(time1 == -1 || time2 == -1)
return(true);
datetime rezTime;
double rezOpen, rezHigh, rezLow, rezClose, rezVolume;
if(time1 != time2)
{
if(time1 < time2)
{
rezTime = time1;
f1_GetData(rezOpen, rezHigh, rezLow, rezClose, rezVolume);
}
else
{
f2_GetData(rezOpen, rezHigh, rezLow, rezClose, rezVolume);
rezTime = time2;
}
}
else
{
rezTime = time1;
double f1Open, f1High, f1Low, f1Close, f1Volume;
double f2Open, f2High, f2Low, f2Close, f2Volume;
f1_GetData(f1Open, f1High, f1Low, f1Close, f1Volume);
f2_GetData(f2Open, f2High, f2Low, f2Close, f2Volume);
switch(mode)
{
case 1:
rezOpen = (f1Open + f2Open) / 2;
rezHigh = MathMax(f1High, f2High);
rezLow = MathMin(f1Low, f2Low);
rezClose = (f1Close + f2Close) / 2;
rezVolume = (f1Volume + f2Volume) / 2;
break;
case 2:
rezOpen = (f1Open + f2Open) / 2;
rezHigh = (f1High + f2High) / 2;
rezLow = (f1Low + f2Low) / 2;
rezClose = (f1Close + f2Close) / 2;
rezVolume = (f1Volume + f2Volume) / 2;
}
}
FileWrite( fRez_handle,
TimeToStr(rezTime, TIME_DATE|TIME_SECONDS),
DoubleToStr(rezOpen, digits),
DoubleToStr(rezHigh, digits),
DoubleToStr(rezLow, digits),
DoubleToStr(rezClose, digits),
DoubleToStr(rezVolume, digits) );
return(false);
}
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
if( !fRez_Init() )
{
fRez_Deinit();
return(1);
}
while(true)
if(fRez_Step())
break;
fRez_Deinit();
//----
return(0);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---