ここでは、MetaTrader4のEAでの自動取引を、csvファイルに入力された日時データをもとに停止・再開をさせるためのツールを公開しています。
メール送信機能のみを使用して、メールアラートツールとしても使用できます。
ツール本体(インジケーターファイル)と、日時データ(csvファイル)をセットで作動します。
ツールをダウンロード
次のリンクからcsvファイルで指定した日時にEAを停止させるツール(インジケーターファイル)がダウンロードできます。
今回のツール【NoTrade_ReadFile_Ind.mq4】をダウンロード
ツールの保存先
今回のツールはインジケーターファイルなので、MetaTrader4のデータフォルダのMQL4フォルダ → Indicatorsフォルダに保存してください。
MetaTrader4への組み込み
当ツールインジケーターファイルをメタエディタでコンパイルするか、MT4再起動でMT4のインジケーターとして反映されます。
日時データcsvファイルサンプルをダウンロード
次のリンクから日時を指定するためのcsvファイルのサンプルがダウンロードできます。
日時データサンプルファイル【NoTradeTime.csv】をダウンロード
csvファイルの保存先
日時データのcsvファイルは、MetaTrader4のデータフォルダのMQL4フォルダ → Filesフォルダに保存してください。
使用方法
使い方を説明するにゃ
csvファイルへの日時データ入力フォーマット
サンプルcsvファイルと同じように、1段につき1つの日時データを「yyyy.mm.dd hh:mm」の日時フォーマットで入力します。
ツール本体のパラメーター説明
ツール本体(インジケーター)のパラメーターは、次の通りです。
Switch_AutoTrade | EA自動売買 停止/再開の機能 true: ON, false: OFF |
---|---|
EmailON | 停止タイミングでのメール機能 ON/OFF |
NoTradeBeforeMin | 指定日時から設定(分)前から自動売買停止開始 |
NoTradeAfterMin | 指定日時から設定(分)後に自動売買再開 |
NoTradeFileName | 指定日時データcsvファイル名 |
作動中の表示
当ツールインジケーターを任意のチャートに設定します。当ツールが作動中には、次の画像のようにチャートのサブウィンドウに設定などの情報が表示されます。
あとがき
実際に使用される場合は、十分動作確認をしてから使用してくださいね^^
はじめまして。こんにちは。
プログラム超初心者の者ですが・・・
色々と調べていくうちに、こちらのブログに出会うことができました。これから、色々と参考にさせていただこうと思っています。
早速ですが、お聞きしたいことがありまして、コメントさせていただきました。
1000通貨での取引を考えていますが・・どうプログラムをかいていいのかわかりません。また、バックテストを行っても何も売買されません。教えていただきたいです。
宜しくお願いします。
//パラメーター
extern int FastMA_Period = 20; //短期移動平均の期間
extern int MiddleMA_Period = 90; //中期移動平均の期間
extern int SlowMA_Period = 200; //長期移動平均の期間
extern int Slippage = 3; //スリッページ
extern int SLpips = 50; //
extern int TPpips = 100; //
extern double Leverage =1.0;//レバレッジ
//+——————————————————————+
//| ポジションを決済する |
//+——————————————————————+
void ClosePositions()
{
for(int i=0; i1 || IsTradeAllowed()==false) return(0);
//移動平均の計算
double FastMA1M5 = iMA(NULL,PERIOD_M5,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,1);
double MiddleMA1M5 = iMA(NULL,PERIOD_M5,MiddleMA_Period,0,MODE_SMA,PRICE_CLOSE,1);
double SlowMA1M5 = iMA(NULL,PERIOD_M5,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,1);
double FastMA2M5 = iMA(NULL,PERIOD_M5,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,2);
double MiddleMA2M5 = iMA(NULL,PERIOD_M5,MiddleMA_Period,0,MODE_SMA,PRICE_CLOSE,2);
double SlowMA2M5 = iMA(NULL,PERIOD_M5,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,2);
//ロット数の計算
double microlot = 0.01;
double Lots = NormalizeDouble(AccountFreeMargin()*Leverage/1000000,2);
if(Lots = MiddleMA2M5 && MiddleMA2M5 =MiddleMA2M5 && MiddleMA2M5 > SlowMA1M5 )
{
ClosePositions();
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-SLpips*Point,0,””,MAGIC,0,Blue);
return(0);
}
//売りシグナル
if(FastMA2M5 = SlowMA2M5 && FastMA1M5 <=MiddleMA2M5 && MiddleMA2M5 < SlowMA1M5 )
{
ClosePositions();
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+SLpips*Point,0,””,MAGIC,0,Red);
return(0);
}
return(0);
}
//ロット数の計算
double microlot = 0.01;
double Lots = NormalizeDouble(AccountFreeMargin()*Leverage/1000000,2);
if(Lots < microlot) Lots = microlot;
//買いシグナル
if(FastMA2M5 >= MiddleMA2M5 && MiddleMA2M5 > SlowMA2M5 && FastMA1M5 >=MiddleMA2M5 && MiddleMA2M5 > SlowMA1M5 )
{
ClosePositions();
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-SLpips*Point,0,””,MAGIC,0,Blue);
return(0);
}
//売りシグナル
if(FastMA2M5 <= MiddleMA2M5 && MiddleMA2M5 >= SlowMA2M5 && FastMA1M5 <=MiddleMA2M5 && MiddleMA2M5 < SlowMA1M5 )
{
ClosePositions();
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+SLpips*Point,0,””,MAGIC,0,Red);
return(0);
}
return(0);
}
下のほうが、抜けてしまったので・・・
度々すみません。
まさぴょんさん
こんにちわ^^
EAがうまく動かないときは、
バックテストで、操作履歴にエラーが無いか確認してみてください。
原因が判る場合があります^^
それでも不明な場合は、コード内でPrintやCommentで変数の値がどのようになっているかしらべてみましょう。
地道な作業になりますが、がんばってください^^
慶次さん!!早速のご返答ありがとうございます。操作履歴を確認してみます。
ご教授ありがとうございました。
慶次 さま
はじめまして。ご指導頂きたいのですが、
重要経済指標発表時にEAを自動で止める、こちらの
日時データサンプルファイル【NoTradeTime.csv】をダウンロードを
使わせ頂いて設定したいのですが、
毎日、朝8時~15時の間だけ運用させたい場合、
例:
2020.05.06 15:00
2020.05.07 08:00
というので良いのでしょうか。日本時間ではダメなのでしょうか。
どうぞ宜しくお願い致します。
慶次さま
何度もすみません。
先程、問合せさせていただきましたが、
よくよく考えると、その時間だけ止めるのではなく、
毎日、朝8時~15時以外は、ポジションを持たないようにしたい場合、
プログラム初心者で、色々、検索しているのですが、よくわかりません。
どのようなプログラムにしたら良いのかわかりません。
ご指導いただけませんでしょうか。
どうぞ宜しくお願い致します。
ぴーろこちゃんさん
コメントありがとうございます。
このツールは、毎日の時間指定には不向きです。
下記のコードのように、現在時刻を取得してif()文で分岐する方法があります。
int jikan = TimeHour(TimeCurrent());
コメントありがとうございます。
Yes, No を逆にする場合は、if()文の分岐を逆にします。
こんばんは。はじめまして。
csvファイルで指定した日時にEAを一時停止させるツールでの質問です。
例えば、停止させたい時間が18時から19時•23時から1時(25時)•5時(29時)から7時と3回ある場合、ファイルとパラメータの入力はどのようになりますか?
よろしくお願いします。
はじめまして。
停止させたい時間が1日に3回ある場合、ファイルとパラメータの入力方法を教えてください。
例
日本時間 2021/01/09
10時〜13時
23時〜1時(25時)
5時(29時)〜8時
よろしくお願いします。
桜井さん
コメントありがとうございます。
NoTradeBeforeMin 0
NoTradeAfterMin 120
と設定して、時間指定csvファイルに
2021.01.09 10:00:00
2021.01.09 23:00:00
2021.01.10 05:00:00
2021.01.10 06:00:00
のようにして試してみてください。