//+------------------------------------------------------------------+ //| 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 input bool Print_MODE = false; input bool FileWrite_MODE = true; // 各計測用パラメータ 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 (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(); } //+------------------------------------------------------------------+ } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 実行スプレッド・スリッページ・実行スプレッド計測・ファイル作成 | //+------------------------------------------------------------------+ // ファイル初期化 int FileInit() { filename = AccountCompany() + "_" + Symbol() + "_" + Timeframe + "_MTFCheck.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(), " ファイルの書き込みに失敗しました"); } //+------------------------------------------------------------------+