
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会社(XM)のレバレッジ計...
-
いま話題のFX戦士くるみちゃん...
-
ハイローオーストラリアで稼ぎ...
-
【悲報】
-
「仮想通貨FX」とか「ビットコイン...
-
トランプ政権で固定為替になる...
-
海外FXで安定したスキャルピン...
-
FXについてです。 私は親の扶養...
-
FXを扱っている証券会社で年間...
-
FXのおススメのブローカーを、...
-
Century FXは詐欺サイトでしょ...
-
fxで8千円負けました。 悔しい...
-
海外FX口座凍結について
-
ミラクルサロンというFX系のス...
-
fx で利益が出ている場合、確定...
-
FXの円キャリートレードのいわ...
-
LINEグループのFX詐欺(疑い)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MT4のEAで通貨ペア毎に最...
-
FX 最近、エントリーチャンス少...
-
mql4のコンパイルエラー箇所の...
-
メタトレーダーでCloseがある値...
-
MT4で時間を指定するにはどのよ...
-
MT4 ボリンジャーバンドタッチ...
-
ポジションを同時に2個持つの...
-
MT4(メタトレーダー)で単純...
-
2回戦止まりは2回戦は勝ってい...
-
MT4におけるトレーリングス...
-
Tera Termが途中で切れるのです...
-
Brocoのデモ口座
-
FXPROでJP225
-
FX初心者はどうすればチャート...
-
VENTURE BANKというFX自動売買...
-
おすすめの自動売買EA
-
為替データをエクセルにダウン...
-
FXのシステムトレードは儲かり...
-
MT4 直前の足の四本値を片隅に...
-
FXの自動売買とはどういった物...
おすすめ情報