質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

Q&A

解決済

1回答

1386閲覧

EAの条件のコード化

nisei2

総合スコア19

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

0グッド

0クリップ

投稿2020/11/17 13:34

編集2020/11/18 09:56

前提・実現したいこと

エントリー条件
条件1.月足が高値・安値ともに切り上がっている。
条件2.週足の高値・安値ともに切り下がっている。
条件3.週足の高値を日足の終値でブレイクしている。

イグジット条件
条件1.前々日の日足の安値を前日の日足の安値が割ってしまったとき。

発生している問題・エラーメッセージ

EAを実行してもエントリーが行われない。

該当のソースコード

MQL4

1#property copyright "Copyright 2020, MetaQuotes Software Corp." 2#property link "https://www.mql5.com" 3#property version "1.00" 4#property strict 5#include "LibEA4.mqh" 6 7 //仕掛けシグナル関数------------------------------------------------- 8 int Sig_Entry(){ 9 int ret = 0; 10 11 //前日足の四本値 12 double C1 = iClose(NULL,PERIOD_D1,1); 13 14 //前週の四本値 15 double WH1 = iHigh(NULL,PERIOD_W1,1); 16 double WL1 = iLow(NULL,PERIOD_W1,1); 17 18 //前々週の四本値 19 double WH2 = iHigh(NULL,PERIOD_W1,2); 20 double WL2 = iLow(NULL,PERIOD_W1,2); 21 22 //前月の四本値 23 double MNH1 = iHigh(NULL,PERIOD_MN1,1); 24 double MNL1 = iLow(NULL,PERIOD_MN1,1); 25 26 //前々月の4本値 27 double MNH2 = iHigh(NULL,PERIOD_MN1,2); 28 double MNL2 = iLow(NULL,PERIOD_MN1,2); 29 30 //月足が高値・安値ともに切り上がっている 31 if(MNH2 < MNH1 && MNL2 < MNL1){ 32 //週足の高値・安値ともに切り下がっている 33 if(WH2 > WH1 && WL2 > WL1){ 34 //週足の高値を日足の終値でブレイクする 35 if(WH1 < C1){ 36 ret = 1; 37 return ret; 38 }//日足のif 39 }//週足のif 40 }//月足のif 41 42 return ret; 43 };//------------------------------------------------- 44 45 46 47 48 //手仕舞いシグナル関数------------------------------------------------- 49 int Sig_Exit(){ 50 int ret = 0; 51 52 //前日足のlow 53 double L1 = iLow(NULL,PERIOD_D1,1); 54 55 //前々日足のlow 56 double L2 = iLow(NULL,PERIOD_D1,2); 57 58 //前々日の日足の安値を前日の日足の安値が割ってしまった時 59 if(L2 > L1) 60 ret = 1; 61 return ret; 62 };//------------------------------------------------- 63 64 65 66int OnInit() 67 { 68 return(INIT_SUCCEEDED); 69 } 70 71void OnDeinit(const int reason) 72 { 73 } 74 75 //売買ロット数 76 extern double lots = 0.1; 77 78void OnTick() 79 { 80 //仕掛けシグナル 81 int sig_entry = Sig_Entry(); 82 83 //手仕舞いシグナル 84 int sig_exit = Sig_Exit(); 85 86 //成行売買 87 MyOrderSendMarket(sig_entry,sig_exit,lots); 88 89}

試したこと

綴りのチェック等

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

//直近日足の四本値
double H0 = iHigh(NULL,PERIOD_D1,0);
double L0 = iLow(NULL,PERIOD_D1,0);
double C0 = iClose(NULL,PERIOD_D1,0);

これだとテスト開始直後の1回しか更新されませんよね。
OnTickの中で毎回更新してください。

投稿2020/11/17 14:12

mah

総合スコア591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nisei2

2020/11/17 14:26

4本値の変数をすべてontickに移動させたらいいのでしょうか?
mah

2020/11/17 14:57

Sig_Entry,Sig_Exitの中で必要な値を取得するようにすればいいと思いますが。
nisei2

2020/11/18 09:57

このような感じにしてみたのですがダメでした
mah

2020/11/18 14:00

あとは記述されている条件が質問者さんの想定した通りになっているかどうかだと思います。
nisei2

2020/11/18 14:14

自分の中ではこれであってるのではないかと思うのですが、エントリーが行われないという事はなにかおかしいのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問