260 lines
No EOL
20 KiB
MQL4
260 lines
No EOL
20 KiB
MQL4
//+------------------------------------------------------------------+
|
|
//| MTFCheck.mq4 |
|
|
//| Copyright 2024, TNK/TNK_SYSTEM |
|
|
//| https://note.com/tnk_system |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2024, TNK/TNK_SYSTEM"
|
|
//#property link "https://note.com/tnk_system"
|
|
#property version "1.3"
|
|
#property strict
|
|
#include <stdlib.mqh>
|
|
|
|
input bool Print_MODE = false;
|
|
input bool FileWrite_MODE = true;
|
|
|
|
//始値動作部分
|
|
static datetime time1 = iTime(NULL,0,0);
|
|
|
|
// 各計測用パラメータ
|
|
int err, fp;
|
|
string filename;
|
|
string Timeframe = (Period() == PERIOD_M1? "M1": Period() == PERIOD_M5? "M5": Period() == PERIOD_M15? "M15":
|
|
Period() == PERIOD_M30? "M30": Period() == PERIOD_H1? "H1": Period() == PERIOD_H4? "H4":
|
|
Period() == PERIOD_D1? "D1": Period() == PERIOD_W1? "W1": "MN1");
|
|
ulong V0;
|
|
double MA_M1, MA_M5, MA_M15, MA_M30, MA_H1, MA_H4, MA_D1, MA_W1, MA_MN1;
|
|
double ATR_M5, ATR_M15, ATR_M30, ATR_H1, ATR_H4, ATR_D1, ATR_W1;
|
|
double RSI_M5, RSI_M15, RSI_M30, RSI_H1, RSI_H4, RSI_D1, RSI_W1;
|
|
double ADX_M5, ADX_M15, ADX_M30, ADX_H1, ADX_H4, ADX_D1, ADX_W1;
|
|
double SD_M5, SD_M15, SD_M30, SD_H1, SD_H4, SD_D1, SD_W1;
|
|
double Close_M1, Close_M5, Close_M15, Close_M30, Close_H1, Close_H4, Close_D1, Close_W1, Close_MN1;
|
|
ulong Volume_M1, Volume_M5, Volume_M15, Volume_M30, Volume_H1, Volume_H4, Volume_D1, Volume_W1, Volume_MN1;
|
|
int Bars_M1, Bars_M5, Bars_M15, Bars_M30, Bars_H1, Bars_H4, Bars_D1, Bars_W1, Bars_MN1, Bars_NULL;
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| expert initialization function |
|
|
//+------------------------------------------------------------------+
|
|
int OnInit()
|
|
{
|
|
//+------------------------------------------------------------------+
|
|
// ファイル出力初期化処理
|
|
if (FileWrite_MODE) FileInit();
|
|
//+------------------------------------------------------------------+
|
|
|
|
return(0);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Expert tick function |
|
|
//+------------------------------------------------------------------+
|
|
void OnTick()
|
|
{
|
|
//+------------------------------------------------------------------+
|
|
if(iTime(NULL,0,0) != time1){
|
|
if (Volume[0] <= 10)
|
|
{
|
|
|
|
V0 = Volume[0];
|
|
|
|
Close_M1 = iClose(NULL, PERIOD_M1, 1);
|
|
Close_M5 = iClose(NULL, PERIOD_M5, 1);
|
|
Close_M15 = iClose(NULL, PERIOD_M15, 1);
|
|
Close_M30 = iClose(NULL, PERIOD_M30, 1);
|
|
Close_H1 = iClose(NULL, PERIOD_H1, 1);
|
|
Close_H4 = iClose(NULL, PERIOD_H4, 1);
|
|
Close_D1 = iClose(NULL, PERIOD_D1, 1);
|
|
Close_W1 = iClose(NULL, PERIOD_W1, 1);
|
|
Close_MN1 = iClose(NULL, PERIOD_MN1, 1);
|
|
|
|
Volume_M1 = iVolume(NULL, PERIOD_M1, 0);
|
|
Volume_M5 = iVolume(NULL, PERIOD_M5, 0);
|
|
Volume_M15 = iVolume(NULL, PERIOD_M15, 0);
|
|
Volume_M30 = iVolume(NULL, PERIOD_M30, 0);
|
|
Volume_H1 = iVolume(NULL, PERIOD_H1, 0);
|
|
Volume_H4 = iVolume(NULL, PERIOD_H4, 0);
|
|
Volume_D1 = iVolume(NULL, PERIOD_D1, 0);
|
|
Volume_W1 = iVolume(NULL, PERIOD_W1, 0);
|
|
Volume_MN1 = iVolume(NULL, PERIOD_MN1, 0);
|
|
|
|
Bars_M1 = iBars(NULL, PERIOD_M1);
|
|
Bars_M5 = iBars(NULL, PERIOD_M5);
|
|
Bars_M15 = iBars(NULL, PERIOD_M15);
|
|
Bars_M30 = iBars(NULL, PERIOD_M30);
|
|
Bars_H1 = iBars(NULL, PERIOD_H1);
|
|
Bars_H4 = iBars(NULL, PERIOD_H4);
|
|
Bars_D1 = iBars(NULL, PERIOD_D1);
|
|
Bars_W1 = iBars(NULL, PERIOD_W1);
|
|
Bars_MN1 = iBars(NULL, PERIOD_MN1);
|
|
Bars_NULL = Bars;
|
|
/*
|
|
MA_M1 = iMA(NULL, PERIOD_M1, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
MA_M5 = iMA(NULL, PERIOD_M5, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
MA_M15 = iMA(NULL, PERIOD_M15, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
MA_M30 = iMA(NULL, PERIOD_M30, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
MA_H1 = iMA(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
MA_H4 = iMA(NULL, PERIOD_H4, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
MA_D1 = iMA(NULL, PERIOD_D1, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
MA_W1 = iMA(NULL, PERIOD_W1, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
MA_MN1 = iMA(NULL, PERIOD_MN1, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
|
|
ATR_M5 = iATR(NULL, PERIOD_M5, 14, 1);
|
|
ATR_M15 = iATR(NULL, PERIOD_M15, 14, 1);
|
|
ATR_M30 = iATR(NULL, PERIOD_M30, 14, 1);
|
|
ATR_H1 = iATR(NULL, PERIOD_H1, 14, 1);
|
|
ATR_H4 = iATR(NULL, PERIOD_H4, 14, 1);
|
|
ATR_D1 = iATR(NULL, PERIOD_D1, 14, 1);
|
|
ATR_W1 = iATR(NULL, PERIOD_W1, 14, 1);
|
|
|
|
RSI_M5 = iRSI(NULL, PERIOD_M5, 14, PRICE_CLOSE, 1);
|
|
RSI_M15 = iRSI(NULL, PERIOD_M15, 14, PRICE_CLOSE, 1);
|
|
RSI_M30 = iRSI(NULL, PERIOD_M30, 14, PRICE_CLOSE, 1);
|
|
RSI_H1 = iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1);
|
|
RSI_H4 = iRSI(NULL, PERIOD_H4, 14, PRICE_CLOSE, 1);
|
|
RSI_D1 = iRSI(NULL, PERIOD_D1, 14, PRICE_CLOSE, 1);
|
|
RSI_W1 = iRSI(NULL, PERIOD_W1, 14, PRICE_CLOSE, 1);
|
|
|
|
ADX_M5 = iADX(NULL, PERIOD_M5, 14, PRICE_CLOSE, MODE_MAIN, 1);
|
|
ADX_M15 = iADX(NULL, PERIOD_M15, 14, PRICE_CLOSE, MODE_MAIN, 1);
|
|
ADX_M30 = iADX(NULL, PERIOD_M30, 14, PRICE_CLOSE, MODE_MAIN, 1);
|
|
ADX_H1 = iADX(NULL, PERIOD_H1, 14, PRICE_CLOSE, MODE_MAIN, 1);
|
|
ADX_H4 = iADX(NULL, PERIOD_H4, 14, PRICE_CLOSE, MODE_MAIN, 1);
|
|
ADX_D1 = iADX(NULL, PERIOD_D1, 14, PRICE_CLOSE, MODE_MAIN, 1);
|
|
ADX_W1 = iADX(NULL, PERIOD_W1, 14, PRICE_CLOSE, MODE_MAIN, 1);
|
|
|
|
SD_M5 = iStdDev(NULL, PERIOD_M5, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
SD_M15 = iStdDev(NULL, PERIOD_M15, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
SD_M30 = iStdDev(NULL, PERIOD_M30, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
SD_H1 = iStdDev(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
SD_H4 = iStdDev(NULL, PERIOD_H4, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
SD_D1 = iStdDev(NULL, PERIOD_D1, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
SD_W1 = iStdDev(NULL, PERIOD_W1, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
|
|
*/
|
|
|
|
if (Print_MODE)
|
|
{
|
|
Print(
|
|
"V0=", V0,
|
|
" C_M1=", Close_M1,
|
|
" C_M5=", Close_M5,
|
|
" C_M15=", Close_M15,
|
|
" C_M30=", Close_M30,
|
|
" C_H1=", Close_H1,
|
|
" C_H4=", Close_H4,
|
|
" C_D1=", Close_D1,
|
|
" C_W1=", Close_W1,
|
|
" C_MN1=", Close_MN1,
|
|
" V_M1=", Volume_M1,
|
|
" V_M5=", Volume_M5,
|
|
" V_M15=", Volume_M15,
|
|
" V_M30=", Volume_M30,
|
|
" V_H1=", Volume_H1,
|
|
" V_H4=", Volume_H4,
|
|
" V_D1=", Volume_D1,
|
|
" V_W1=", Volume_W1,
|
|
" V_MN1=", Volume_MN1,
|
|
" B_M1=", Bars_M1,
|
|
" B_M5=", Bars_M5,
|
|
" B_M15=", Bars_M15,
|
|
" B_M30=", Bars_M30,
|
|
" B_H1=", Bars_H1,
|
|
" B_H4=", Bars_H4,
|
|
" B_D1=", Bars_D1,
|
|
" B_W1=", Bars_W1,
|
|
" B_MN1=", Bars_MN1,
|
|
" B_NULL", Bars_NULL
|
|
/*
|
|
" MA_M1=", MA_M1,
|
|
" MA_M5=", MA_M5,
|
|
" MA_M15=", MA_M15,
|
|
" MA_M30=", MA_M30,
|
|
" MA_H1=", MA_H1,
|
|
" MA_H4=", MA_H4,
|
|
" MA_D1=", MA_D1,
|
|
" MA_W1=", MA_W1,
|
|
" MA_MN1=", MA_MN1
|
|
*/
|
|
);
|
|
}
|
|
|
|
if (FileWrite_MODE) FileWriteing();
|
|
|
|
}
|
|
//今回のバー形成開始時刻記憶
|
|
time1 = iTime(NULL,0,0);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| 実行スプレッド・スリッページ・実行スプレッド計測・ファイル作成 |
|
|
//+------------------------------------------------------------------+
|
|
// ファイル初期化
|
|
int FileInit()
|
|
{
|
|
filename = AccountCompany() + "_" + Symbol() + "_" + Timeframe + "_MTFCheck_Time.csv";// ファイル名を決める
|
|
|
|
fp = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_CSV, ',');// ファイルオープン(csv)
|
|
//fp = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_CSV, '\t');// MT5用
|
|
|
|
if(fp==INVALID_HANDLE)
|
|
{
|
|
err = GetLastError();
|
|
printf("Error occured: [%d] %s", err, ErrorDescription(err));
|
|
return(0.0);
|
|
}
|
|
FileWrite(fp, "Volume[0]", "サーバー時間", "時刻", "分",
|
|
"Close_M1", "Close_M5", "Close_M15", "Close_M30", "Close_H1", "Close_H4", "Close_D1", "Close_W1", "Close_MN1",
|
|
"Volume_M1", "Volume_M5", "Volume_M15", "Volume_M30", "Volume_H1", "Volume_H4", "Volume_D1", "Volume_W1", "Volume_MN1",
|
|
"Bars_M1", "Bars_M5", "Bars_M15", "Bars_M30", "Bars_H1", "Bars_H4", "Bars_D1", "Bars_W1", "Bars_MN1", "Bars_NULL"
|
|
//"MA_M1", "MA_M5", "MA_M15", "MA_M30", "MA_H1", "MA_H4", "MA_D1", "MA_W1", "MA_MN1"
|
|
);
|
|
/*FileWrite(fp, "Volume[0]", "サーバー時間", "時刻", "分",
|
|
"MA_M5", "MA_M15", "MA_M30", "MA_H1", "MA_H4", "MA_D1", "MA_W1",
|
|
"ATR_M5", "ATR_M15", "ATR_M30", "ATR_H1", "ATR_H4", "ATR_D1", "ATR_W1",
|
|
"RSI_M5", "RSI_M15", "RSI_M30", "RSI_H1", "RSI_H4", "RSI_D1", "RSI_W1",
|
|
"ADX_M5", "ADX_M15", "ADX_M30", "ADX_H1", "ADX_H4", "ADX_D1", "ADX_W1",
|
|
"SD_M5", "SD_M15", "SD_M30", "SD_H1", "SD_H4", "SD_D1", "SD_W1"
|
|
);*/
|
|
// ファイルを閉じる
|
|
FileClose(fp);
|
|
|
|
return(0);
|
|
}
|
|
|
|
void FileWriteing()
|
|
{
|
|
for(int i = 0; i < 3000; i++)
|
|
{
|
|
FileClose(fp); // ファイルが開きっぱなしで開けないエラーを防ぐ
|
|
fp = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_CSV, ',');// ファイルオープン(csv)、失敗戻り値は-1
|
|
//fp = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_CSV, '\t');// MT5用
|
|
|
|
if (fp != INVALID_HANDLE)
|
|
{
|
|
FileSeek(fp, 0, SEEK_END);
|
|
FileWrite(fp, V0, TimeCurrent(), Hour(), Minute(),
|
|
Close_M1, Close_M5, Close_M15, Close_M30, Close_H1, Close_H4, Close_D1, Close_W1, Close_MN1,
|
|
Volume_M1, Volume_M5, Volume_M15, Volume_M30, Volume_H1, Volume_H4, Volume_D1, Volume_W1, Volume_MN1,
|
|
Bars_M1, Bars_M5, Bars_M15, Bars_M30, Bars_H1, Bars_H4, Bars_D1, Bars_W1, Bars_MN1, Bars_NULL
|
|
//MA_M1, MA_M5, MA_M15, MA_M30, MA_H1, MA_H4, MA_D1, MA_W1, MA_MN1
|
|
);
|
|
|
|
/*FileWrite(fp, V0, TimeCurrent(), TimeHour(TimeCurrent()), TimeMinute(TimeCurrent()),
|
|
MA_M5, MA_M15, MA_M30, MA_H1, MA_H4, MA_D1, MA_W1,
|
|
ATR_M5, ATR_M15, ATR_M30, ATR_H1, ATR_H4, ATR_D1, ATR_W1,
|
|
RSI_M5, RSI_M15, RSI_M30, RSI_H1, RSI_H4, RSI_D1, RSI_W1,
|
|
ADX_M5, ADX_M15, ADX_M30, ADX_H1, ADX_H4, ADX_D1, ADX_W1,
|
|
SD_M5, SD_M15, SD_M30, SD_H1, SD_H4, SD_D1, SD_W1
|
|
);*/
|
|
FileClose(fp);
|
|
break;
|
|
}
|
|
}
|
|
if (fp == -1) Print("Error=", GetLastError(), " ファイルの書き込みに失敗しました");
|
|
}
|
|
|
|
//+------------------------------------------------------------------+ |