質問するログイン新規登録

Q&A

1回答

706閲覧

コードどこが間違えてますか?約12時間毎にメールを届くようにしたはずが、6〜8時間バラバラに届きます。

otokoume

総合スコア9

MQL4

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

MQL

MQL(Meta Quotes Language)は、Meta Trader4(MT4)で用いられるプログラミング用語です。MQLによりEAやインジケーターの作成が可能。C言語で書かれているため、C言語の知識があれば簡単に扱うことができます。

MQL5

MQL5(MetaQuotes Language 5)は、トレードロボットやカスタムインディケータを作成できる高レベル言語。MetaQuotes社の独自の取引プラットフォームのために開発されました。さまざまなサービスをリンクできるコミュニティも存在します。

0グッド

1クリップ

投稿2023/09/08 08:48

0

1

12時間=720分
720分/5分足=144本
b=144

メール送信後、aに0を格納する

MQL5

1//グローバル変数 2int a=0; 3int b=144; 4 5void OnTick() 6{ 7//--ローソク足取得 8MqlRates rates[]; 9ArraySetAsSeries(rates,true); 10int copied=CopyRates(NULL,0,0,2,rates); 11//--1本足に1回実行する 12if(1<rates[0].tick_volume) 13return; 14 15a++; 16 17//〜省略〜 18 19if(a>b) 20{ 21//--メール送信 22SendMail("A", "A"); 23a=0; 24} 25}//--OnTick()終了

省略の所にリターンも含まれているので、バラバラにメールを受信するのは理解出来ます。早く受信する理由が分かりません。

if(1<rates[0].tick_volume)
が想定と違うのかと思い、下記コードを下の方に追加してみましたが、こちらは受信しませんでした。

MQL5

1if(1 != rates[0].tick_volume) 2{ 3SendMail("B", "ティック1じゃないよ"); 4return; 5}

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

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

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

ikedas

2023/09/09 06:00

MQLについてはまったく知りませんが、マニュアルの説明を読む限り、OnTick()は新しい相場を受信した際に実行されます。一方、ローソク足は値動きを一定の時間枠ごとに区切ってまとめた指標です。 相場はローソク足の時間枠に合わせて動くわけではないと思います。 OnTimer()を使えば定期的に処理を実行できるようです。
otokoume

2023/09/09 07:16

全く知らない事に対して調べていただいて、ありがとうございますm(_ _)m 改良してみます!!
ikedas

2023/09/09 11:13

改良がうまく行ったらその内容をご自分で回答として投稿して、質問を解決済みにしてくださいね。
otokoume

2023/09/09 12:32

分かりました!! テラテイルの使い方まで教えていただいてありがとうございます。
guest

回答1

0

要件が「12時間毎にメール通知」という定時連絡に近い内容なので
時間で判別するようにしてもいいでしょうね。
ちなみに通知を受けたいのはマーケットの営業時間中となるはずで OnTick() で十分と思います。

既にお使いの MqlRates 構造体を活用して
1日に2回、ブローカー時間で 2時と 14時30分 に定時通知する場合:

mql5

1//--- ブローカー時間で設定 2input int hour1 = 2;// 定時連絡1(時) 3input int min1 = 0;// 定時連絡1(分) 4input int hour2 = 14;// 定時連絡2(時) 5input int min2 = 30;// 定時連絡2(分) 6 7... 略 ... 8 9void OnTick() 10{ 11 //--ローソク足取得 12 ... 略 ... 13 14 datetiem open_time = rates[0].time; // 現在足のオープン時間 15 16 MqlDateTime dt; 17 TimeToStruct(open_time, dt); 18 if( dt.hour == hour1 && dt.min == min1 && dt.sec == 0 ) { 19 SendMail("定期通知1","チャートみる?"); 20 } 21 if( dt.hour == hour2 && dt.min == min2 && dt.sec == 0 ) { 22 SendMail("定期通知2","チャートみる?"); 23 } 24 25}

投稿2026/06/08 06:44

AkitoshiManabe

総合スコア5444

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問