aisaki_FTJ/ind CheckAutoTrading.mq5
super.admin 3100c322e4 convert
2025-05-30 14:39:35 +02:00

128 lines
7.4 KiB
MQL5

//+------------------------------------------------------------------+
//|
//| 自動売買、DLLの使用が許可されていないと
//|
//| 指定時刻にスマホに通知するインジケータです
//|
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_type1 DRAW_NONE
enum ENUM_SEND{
Mail = 0, // メールを送信
Noti = 1 // スマホ版MT5から通知
};
enum ENUM_MODE{
mode01 = 1, // 設定が変更されたときに通知
mode10 = 2, // 指定した時刻に通知
mode11 = 3 // 「設定が変更されたとき」と「指定した時刻に通知」
};
enum ENUM_TIME{
Server = 0, // サーバ時間
Local = 1 // ローカルコンピューター時間
};
input ENUM_SEND send = Noti; // 通知方法
input ENUM_MODE mode = mode11; // 通知のタイミング
input ENUM_TIME tmode = Local; // 通知する時刻を(サーバ時間orローカル時間)で表記
input string stime = "9:00"; // 通知する時刻
datetime ntime = 0;
int OnInit()
{
EventSetTimer(2);
if(tmode == Server) ntime = 0;
else if(tmode == Local) ntime = TimeLocal() - TimeTradeServer();
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
EventKillTimer();
}
void OnTimer()
{
static bool a=TerminalInfoInteger(TERMINAL_TRADE_ALLOWED),
b=TerminalInfoInteger(TERMINAL_DLLS_ALLOWED);
static datetime nowtime = TimeTradeServer();
int f = 0;
string message = "";
// 設定が変更されたときに通知
if(mode == mode01 || mode == mode11){
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false && a == true){
f = 1;
message = "自動売買が無効になりました";
a = TerminalInfoInteger(TERMINAL_TRADE_ALLOWED);
}
else if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == true && a == false){
f = 1;
message = "自動売買が有効になりました";
a = TerminalInfoInteger(TERMINAL_TRADE_ALLOWED);
}
if(TerminalInfoInteger(TERMINAL_DLLS_ALLOWED) == false && b == true){
f = 1;
message = "DLLを使用する許可がなくなりました";
b = TerminalInfoInteger(TERMINAL_DLLS_ALLOWED);
}
else if(TerminalInfoInteger(TERMINAL_DLLS_ALLOWED) == true && b == false){
f = 1;
message = "DLLの使用が許可されました";
b = TerminalInfoInteger(TERMINAL_DLLS_ALLOWED);
}
}
// 指定した時刻に通知
if( (mode == mode10 || mode == mode11)&&(nowtime+ntime < StringToTime(stime) && TimeTradeServer()+ntime >= StringToTime(stime)) ){
//f = 1;
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false){
f = 1;
message += "(NG)---自動売買が無効です\n";
}
else message += "(OK)---自動売買が有効です\n";
if(TerminalInfoInteger(TERMINAL_DLLS_ALLOWED) == false){
f = 1;
message += "(NG)---DLLを使用する許可がありません\n";
}
else message += "(OK)---DLLを使用することは許可させています\n";
if(AccountInfoInteger(ACCOUNT_TRADE_EXPERT) == false){
f = 1;
message += "(NG)---自動売買が許可されていない口座です";
}
else message += "(OK)---自動売買が可能な口座です";
}
// 通知の送信
if(f >= 1 && send == Noti ){ //
if( !SendNotification(message) )
Print("通知の送信に失敗しました。設定を確認してください。",GetLastError());
}
else if(f >= 1 && send == Mail ){
if( !SendMail("MT5からの通知",message) )
Print("通知の送信に失敗しました。設定を確認してください。",GetLastError());
}
nowtime = TimeTradeServer();
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
return(rates_total);
}