![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
MT4で時間を指定するにはどのようにすれば良いでしょうか。
例えば、取引を日本時間で午前9時から午後3時の間に指定して、午後3時の時点で建て玉があった場合は手仕舞いできるようにしたいのです。
MT4付属EAの、MACD Sampleで時間指定する場合は、どのようなプログラムをどの位置に書けば良いのでしょうか。
時間指定をいろいろ変えてバックテストを行ってみたいと思っています。
プログラムは、トレードスタジアムで少しやった程度ですので、MT4のプログラムは初心者のレベルです。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
回答が大変遅くなってごめんなさい。
実は、私も悩んでいました。
MACDのサンプルプログラムを下の方までよく読んでみると、マジックナンバーが16384となっているので、これに統一しなければ決済されません。
よって、私が書いた最初の部分で、
# define MAGIC 0001
という部分を、
# define MAGIC 16384
としていただければ、うまくいくかと思います。
一時やってみてください。
再度のご回答ありがとうございます。
ご指示のようにマジックナンバーを統一し、5・15・30・60分足でバックテストしたところ、無事に9時から15時の間に取引を行い、ポジションが残ったら15時にクローズすることができました。
この時間制限を使用して、いろいろな条件でバックテストしてみようと思っています。
ちなみにUSDJPNの5分足で2009年10月から2010年1月までをバックテストしましたらきれいな右肩下がりのグラフになりました。ひょっとして売りと買いを逆にすれば良いのかと思いました。
MT4のEAは、まだまだ理解が足りませんのでこれからも勉強していきたいと思っています。
今回は、ご親切に教えて頂き有難うございました。感謝しております。
No.1
- 回答日時:
当方のメタトレーダーの調子が悪く、きちんと実験できませんでしたが、おおよそ、以下のような感じでいかがでしょうか。
このプログラムでは、あくまでも、チャート上の時刻(サーバーの時刻)が基準になります。日本時間とは必ずしも一致しないので、ご注意ください。
int init()
{
return(0);
}
int deinit()
{
return(0);
}
#define MAGIC 0001
//外部パラメーター
extern double TakeProfit = 50;
extern double Lots = 0.1;
extern int Slip = 3;
extern double TrailingStop = 30;
extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;
extern int StartTime = 9;//トレード開始時刻
extern int EndTime = 15;//トレード終了時刻
//ポジション決済関数
void ClosePos(int magic)
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS) == false) break;
if(OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slip,White);
break;
}
}
}
int start()
{
double MacdCurrent, MacdPrevious, SignalCurrent;
double SignalPrevious, MaCurrent, MaPrevious;
int cnt, ticket, total;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0);
}
//トレード可否
if(IsTradeAllowed()==false) return(0);
//時間設定
int Jikoku=0;
int Ji = TimeHour(CurTime());
if(Ji>=StartTime && Ji<EndTime) Jikoku=1;
else Jikoku=0;
if(Jikoku==0)
{
ClosePos(MAGIC);
return(0);
}
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
total=OrdersTotal();
if(total<1)
以下、サンプル通り。
この回答への補足
プログラムを見直し、USDJPNの15分足で同じ期間でバックテストしてみました。
取引回数は44回あり、新規の注文は9時から15時の間に行われていますが、決済は15時を過ぎることが多々あります。(時間はチャート時間を使用)
15時までにポジションが残っていた時に、15時で決済されないようです。どのようにすれば15時で決済されるのでしょうか。
もう一度教えていただけないでしょうか。よろしくお願いします。
早速のご回答ありがとうございます。
チャートの時刻と日本時間のずれを考慮して設定すれば良いのですね。
上記のとうりにEAを作り、2009年10月から今年1月末迄でバックテストを行いました。
時間はチャートの時刻で9時から15時にしてみました。USDJPNの1分足です。
結果を見ますと、15時に手仕舞いしないで翌営業日に持ち越すものがあります。そして翌営業日に持ち越すものは負けが多いようです。
しかし、当日に手仕舞いするものは、すべて勝っています。
エントリー回数が意外と少ないようです。(4ヶ月間で8回)
まだ、詳しく見直していませんので、見直しを行いいろいろな時間設定でも検証したいと思っています。
詳しいプログラムを教えて頂き大変助かりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FXの円キャリートレードのいわ...
-
FXの損切り、ロスカットについて
-
LINEグループのFX詐欺(疑い)...
-
FXがやめられない
-
円安が記録的とニュースでも言...
-
空港などの為替でユーロに変え...
-
株価指数でFX
-
トルコリラってどのあたりまで...
-
XMトレードで破産者はいるんで...
-
FX トルコ円について
-
積み立てFXされてるかたいますか
-
ユーロ紙幣、米ドル紙幣 の活用
-
ドル円が昨日146円台だったのに...
-
FX投資の判断:しっかり行動に...
-
為替 トランプが再選したらドル...
-
トランプ氏が大統領に当選した...
-
円が1ドル100円くらいに戻る事...
-
政府、日銀による為替介入のせ...
-
今、円安ですけど なんで韓国と...
-
生命保険会社勤務の場合、FXを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2回戦止まりは2回戦は勝ってい...
-
mql4のコンパイルエラー箇所の...
-
MT4で時間を指定するにはどのよ...
-
MT4のEAで通貨ペア毎に最...
-
FX 最近、エントリーチャンス少...
-
MT4 ボリンジャーバンドタッチ...
-
FXの自動売買で大儲けした人...
-
メタトレーダ4で自動売買をした...
-
MT4によるバックテストの信頼性...
-
MT4の売買シグナルをメール受信...
-
【FX】MT4にてプログラムを作成...
-
Tera Termが途中で切れるのです...
-
陽線・陰線が切り替わったらア...
-
MT4「デモ口座の申請」について
-
【MQL4】ZigZagの天底の値の取得
-
MT5のBIT(売り)ASK(買い)のライ...
-
mt4のテスターが遅すぎる。
-
為替データをエクセルにダウン...
-
遠藤さくらと言う人が、毎日100...
-
FXの日足時系列データをダウン...
おすすめ情報