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

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

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

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

Q&A

0回答

246閲覧

オフラインチャートで複数の時間足を作成

FilmWindow

総合スコア11

MQL4

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

0グッド

0クリップ

投稿2024/12/28 13:31

実現したいこと

https://fx-ea-labo.com/30s-3m
https://fx-ea-labo.com/wp-content/uploads/2019/11/Period_Converter_Opt.zip
こちらのPeriod_Converter_Optというインジケーターで3分足をつくりました。

MT4で1分足にPeriod_Converter_Optを入れて、【PeriodMultiplier】に3を記入。
そして、オフラインチャートのM3から、3分足を表示させました。

2つ目の3分足を表示させたいため、オフラインチャートのM3から表示させましたが、
2つ目の3分足が動かないみたいです。

2つ3つと、複数の3分足を表示させたいと思っています。(3分足だけでなく、他の時間足も)
2つ目の3分足を動くようにするには、どのようにすればできますか?

理想の形では、
Period_Converter_Optを1つ入れて、オフラインチャートに〇〇_,▲▲というような表記。
そして、それを複数チャート開くことができる。という状態が理想です。

Period_Converter_Optで作った時間足を複数開くようにするには、どのようなコードでできますか?
ひとつお知恵を拝借させていただきたいです。どうぞよろしくお願いいたします。

発生している問題・分からないこと

Period_Converter_Optを入れて、オフラインチャートから1つしか時間足を表示できない。
2つ目を入れるとチャートが動かない。

該当のソースコード

ソースコードを貼ると、文字数制限の9000文字を超えてしまいます。 mq4ファイルは、 https://fx-ea-labo.com/wp-content/uploads/2019/11/Period_Converter_Opt.zip こちらからダウンロードできます。

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

検索しても、インジケーター紹介のページばかりです。
chatGPTで聞いていろいろ試行錯誤しましたが、形になりません。

mq4ファイルもあるのですが、それをchatGPTで質問したりしました。

MySymbol =Symbol() + "" + suffix;
if(StringLen(MySymbol)>11)
MySymbol = StringConcatenate(StringSubstr(MySymbol,0,11-StringLen(suffix)),suffix);
を、
// 動的にユニークなオフラインチャート名を生成
MySymbol = Symbol() + "
" + suffix + "" + IntegerToString(GetTickCount() % 10000) ;
if (StringLen(MySymbol) > 11)
MySymbol = StringConcatenate(StringSubstr(MySymbol, 0, 11 - StringLen(suffix)), suffix);
に変更すれば、表示させたい数のPeriod_Converter_Optを入れて、
〇〇
(数字),▲▲
〇〇_(数字),▲▲
〇〇_(数字),▲▲
という形ですが、表示させることができました。

ですが、それでやっていたら、〇〇_(数字),▲▲の表記の数が増殖していってるみたいです。
(Period_Converter_Optを入れてるのは3つなのに、〇〇_(数字),▲▲が何倍にも増えている)

それに、MT4を再起動したら、チャートが「アップデート待機中」となってMT4がフリーズしたりします。

何度も何度もchatGPTはコードを出しますが、その度にエラーが出るし、
エラーが出なくても、形になってくれず困っています。

補足

特になし

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

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

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

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

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

dodox86

2024/12/30 00:24

> MySymbol = Symbol() + "" + suffix + "" + IntegerToString(GetTickCount() % 10000) ; ... > に変更すれば、表示させたい数のPeriod_Converter_Optを入れて、 ... > ですが、それでやっていたら、〇〇_(数字),▲▲の表記の数が増殖していってるみたいです。 GetTickCountはシステム開始時からのミリ秒単位の経過時間を返す関数なので、当然、そうなるのではないでしょうか。 https://docs.mql4.com/common/gettickcount > 何度も何度もchatGPTはコードを出しますが、その度にエラーが出るし、 > エラーが出なくても、形になってくれず困っています。 この質問に限らず各所で見かける言い様ですが、ChatGPTが提案したコードでも、ご自身で内容を理解せずに利用するのはかなり無理があります。 そういうAIの利用の仕方があって悪い訳ではありませんが、自らプログラミングをする姿勢であれば、ダメでしょう。 私はPeriod_Converter_Opt.mq4のソースコードは覗いてみただけで、ネット上の記事と照らして概ね動きが想像できる程度なので偉そうなことは言えませんが、改造して望む動きにするには、まず自分自身でプログラムの動きを理解していないと無理だと思います。
FilmWindow

2024/12/30 02:13

コメントありがとうございます! 〇〇_(数字),▲▲でもチャートが動くのかと思ったら、止まったままです・・・。 そのような関数が使われていたのですね。 プログラミングの知識がないと無理ですか・・・。 私の場合、3分足(とその他のMT4標準でない時間足)が必要であり、 すぐに複数チャートを表示できるようにしたいです。 かなり修正とか入れ替えをしないと、複数チャートが動くようにはできないですか? それとも、少し修正・入れ替えでできる内容なのでしょうか?
dodox86

2025/01/05 07:25

コメントしてから随分日が経ってしまいましたが、ご質問の状況が良く分からなかったのでMetaTrader4/MQL4の試用を併せ、ご提示のカスタムインジケーター「Period_Converter_Opt」を実際に試してみました。 > 2つ目の3分足を表示させたいため、オフラインチャートのM3から表示させましたが、 > 2つ目の3分足が動かないみたいです。 オフラインチャートでは市場のデータがリアルタイムに反映されないので、当然動かないと思いますよ。基本は*.hstファイルを読み込んで表示させているだけのように見えます。 カスタムインジケーター「Period_Converter_Opt」の動きとしても、リアルタイム、1分毎に更新されるM1データをもとに「PeriodMultiplier」変数の値を考慮して3分とか4分データを生成しているようで、2つ目の3分足をひとつのオフラインチャートで表示する(<そもそも意味が無いように思いますが、、、)のも無理です。あくまでオフラインチャートでは最終的な結果を表示出力するだけのものなので、質問者FilmWindowさんが期待する動作はしないはずです。 > かなり修正とか入れ替えをしないと、複数チャートが動くようにはできないですか? できないと思います。オフラインチャート上で更新する処理とか、ひとつのチャート上で複数の時間足を表示するなどは、コードを読んで自力で理解して書ける力が必要に思います。 (<そもそもできるかどうかの調査と検討から必要) ChatGPTなどのAIが提案するコードを利用するだけではちょっと無理でしょう。 私であれば、「Period_Converter_Opt」の内容を理解した上で、新たにコードを書き直しますね。 > プログラミングの知識がないと無理ですか・・・。 > 私の場合、3分足(とその他のMT4標準でない時間足)が必要であり、 > すぐに複数チャートを表示できるようにしたいです。 既存のカスタムインジケーターの使い方を含めるのであれば、teratailではなく専用のフォーラムの方が良いかもしれませんね。 [MQL4 and MetaTrader 4] https://www.mql5.com/ja/forum/mql4 ※あまり活発とも言えないようですが、、、
FilmWindow

2025/01/05 13:53

返信ありがとうございます。 >2つ目の3分足をひとつのオフラインチャートで表示する(<そもそも意味が無いように思いますが、、、) >ひとつのチャート上で複数の時間足を表示するなど これらから、もしかしたら認識のズレがあるのかな?と思いました。 ひとつのチャート上に複数の時間足(3分足や8分足など)を表示させたいのではなく、 ひとつのチャート(3分足など)を複数開きたいということであります。 1つ目のチャートでメインウィンドウだけを開いて、 2つ目のチャートでMACDだけを表示、3つ目のチャートでRSIだけを表示という風にしたいです。(メインウィンドウでズームアップ気味にしてサブウィンドウはズームアウト気味にしたい) それらの複数のチャートは、全部Period_Converter_Optで作ったものです。 認識のズレじゃなければすみません。 こういうのって、理屈ではできると思うのですが、 果たして、難しい内容なのか、それとも何かしらのコードを付け加えるだけでできるのか・・・。 chatGPTでいろいろやりましたが、全然であります汗 やはり、プログラミングができる方に依頼する他ないのかなとも思ったりもしてます。
dodox86

2025/01/05 18:20

> ひとつのチャート上に複数の時間足(3分足や8分足など)を表示させたいのではなく、 > ひとつのチャート(3分足など)を複数開きたいということであります。 > > 1つ目のチャートでメインウィンドウだけを開いて、 > 2つ目のチャートでMACDだけを表示、3つ目のチャートでRSIだけを表示という風にしたいです。(メインウィンドウでズームアップ気味にしてサブウィンドウはズームアウト気味にしたい) うーん、そうであれば、すみませんが私では分からないですね。完全ではなくとも今のMetaTrader4と「Period_Converter_Opt」の操作でおおむね実現できる操作のように思えます。 私自身はFXの実際の取引や分析をしている訳ではない(MetaTraderやMQLの開発環境に興味を持っているだけ)ので、FilmWindowさんが本当に実現したいことを把握しかねているのかもしれませんが、以下のような操作では不充分、と言うことなのでしょうか。 1. M1のリアルタイムのチャート(例: "USDJPY-cd,M1")に、3分足を出力する為、Period_Converter_OptをPeriodMultiPlier=3で適用する。 2. MetaTrader4の「ファイル」メニューから「オフラインチャート」で、ヒストリーデータ「USDJPY-cd_,M3」を開く。 3. 2. で開いたオフラインチャート("USDJPY-cd_,M3 (offline)"のウィンドウ)に対して、ナビゲーターからカスタムインジケーター「MACD」を適用する。  すると、そのオフラインチャートのサブウィンドウにMACDの結果が表示される。メインウィンドウとサブウィンドウの境を上にドラッグして、  メインウィンドウをできるだけ小さくする。(メインウィンドウは消せないので仕方が無い) 4. オフラインチャートで、ヒストリーデータ「USDJPY-cd_,M3」を再度開く。(<何個でも開けます) 5. 4. で開いたオフラインチャート("USDJPY-cd_,M3 (offline)"のウィンドウ)に対して、ナビゲーターからカスタムインジケーター「RSI」を適用する。  ...以下、3.のMACDでの操作と同様。 Period_Converter_Optについて、3分足のデータ生成はそのままに、併せて7分用の設定をしてM1に適用すれば3分足も7分足も同時に作られていますので、7分足のチャートも表示して操作できるはずです。 もし、上記の操作は既に知っていてそういうことではないとか、更に発展的な動作を要望されているのであれば、もう私では分かりかねる話なので忘れてください。 ただひとつ言えるのは、ChatGPTを含む生成AIが出力するコードは、ご自身がその内容を理解されないと、うまく扱うことはできないです。(<私の経験上から言っています) プロンプト(AIへの訊ね方)如何でも結果が違いますし、誤った回答もよくあります。 それだけで完結する小さいプログラムなら理解していなくても動くことはありますが、ある特殊なアプリケーションのコードの断片を提案してもらうようなものは結構無理があります。 例えば話が戻りますが > MySymbol = Symbol() + "" + suffix + "" + IntegerToString(GetTickCount() % 10000) ; で、GetTickCount()が何者で、 "% 10000"が何を意図したコードなのか読み取れなければ、実行された結果の成否を判断できませんよね。 > やはり、プログラミングができる方に依頼する他ないのかなとも思ったりもしてます。 質問者さんの過去のご質問を見て自らプログラミングをするべく努力をされていたのかなと思って当初はコメントをしたのですが、ご自身で手に余るようであればFXの取引、事情も理解したプログラマーの方に相談した方が良いと思います。 長々とすみませんでしたが、コメントは以上です。
FilmWindow

2025/01/05 19:36

返信ありがとうございます。 はい、1~5の流れで、複数の生成した時間足を表示させました。 ですが、1つ目のチャートだけが動いて、2つ目以降はチャートが動きません。(チャート自体が動かないので、オシレーターも動かない) chatGPTでも、こちらが達成したい形を理解してくれて、 一発で完成のコードが書かれるっていうのもできそうなのですが、やはりズレてるんですよね。 こちらの説明がダメなのだろうと思いますが、具体的に書けば書くほどズレていくってことも・・・汗 mql4に詳しいプログラマーの方を見つけて、相談してみようかと思います。 どうもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問