128 lines
7.4 KiB
MQL5
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);
|
|
}
|