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

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

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

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

MQL

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

Q&A

解決済

1回答

2309閲覧

EAのバックテスト中にバッファを用いたラインを描画する方法について

buibui80

総合スコア1033

MQL4

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

MQL

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

0グッド

0クリップ

投稿2020/09/15 05:35

只今インジケーターにオーダー機能をつけてEA化しようと奮闘中です。
インジケーターは問題なく出来あがり、オーダー関係はスクリプトで作成し動作チェックを行い、
結合してようやくEAのバックテストを行う段階まで来ました。

しかしEAのバックテストでは、インジケーターの肝であるSetIndexBuffer()が機能せず、
バッファを用いたラインの描画やデータ管理が行えずに不具合が生じてしまいました。

データ管理については、
iCustom()を用いて外部インジケーターのバッファ値を取得できることが分かったので、
結合は中止し、EAからiCustom()でバッファ値を取得する形式にしました。

ラインの描画については、
バックテスト中に表示されませんが、ストップボタンを押下したタイミングで描画されています。
(ビジュアルモードは有効になっています)

質問ですが、
EAのバックテスト中にバッファを用いたラインを描画する方法はないでしょうか?
また、インジケーターをEAに移植する方法で参考となるご意見を教えていただけたら助かります。

以下、iCustom()を検証したソースです。

mq4

1//+------------------------------------------------------------------+ 2//| /Experts/add/custom/Test/TestICustom_EA.mq4 3//+------------------------------------------------------------------+ 4#property strict 5 6int OnInit() 7{ 8 return(INIT_SUCCEEDED); 9} 10 11void OnDeinit(const int reason) 12{ 13 14} 15 16void OnTick() 17{ 18 UpdateMA(); 19} 20 21void UpdateMA() 22{ 23 string symbol = Symbol(); 24 int period = PERIOD_CURRENT; 25 string indicatorName = "add\custom\Test\TestICustom_Indicator.ex4"; // mq4形式ではなく、ex4形式、区切りは[\]を使用する 26 int mode = 0; // バッファのインデックス 27 int shift = 0; // 常に最新のロウソク足 28 29 double ma = iCustom(symbol, period, indicatorName, mode, shift); // inputパラメータなし 30 Print("[ma] ", ma); 31}

mq4

1//+------------------------------------------------------------------+ 2//| /indicators/add/custom/Test/TestICustom_Indicator.mq4 3//+------------------------------------------------------------------+ 4#property strict 5 6#property indicator_chart_window 7#property indicator_buffers 1 8#property indicator_color1 clrRed 9#property indicator_width1 1 10 11double ma[]; 12 13int OnInit() 14{ 15 IndicatorBuffers(1); 16 SetIndexBuffer(0, ma); 17 SetIndexStyle(0, DRAW_LINE); 18 return(INIT_SUCCEEDED); 19} 20 21void OnDeinit(const int reason) 22{ 23 24} 25 26int OnCalculate(const int rates_total, 27 const int prev_calculated, 28 const datetime &time[], 29 const double &open[], 30 const double &high[], 31 const double &low[], 32 const double &close[], 33 const long &tick_volume[], 34 const long &volume[], 35 const int &spread[]) 36{ 37 int limit; 38 if (prev_calculated == 0) 39 limit = rates_total - 1; 40 else 41 limit = rates_total - prev_calculated; 42 43 UpdateMA(limit); 44 45 return (rates_total); 46} 47 48void UpdateMA(int limit) 49{ 50 int i; 51 string symbol = Symbol(); 52 int period = PERIOD_CURRENT; 53 int ma_shift = 0; 54 55 for (i=limit; i>=0; i--) 56 { 57 ma[i] = iMA(symbol, period, 10, ma_shift, MODE_SMA, PRICE_CLOSE, i); 58 } 59} 60

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

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

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

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

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

guest

回答1

0

ベストアンサー

EAのバックテスト中にバッファを用いたラインを描画する方法はないでしょうか?

MT4では停止するか完了するまでiCustomで呼び出しているインジケータは表示されないと思います。

妥協案としては、手動でチャートにインジケータを追加するか、EA名.tplで定形チャートを作成でしょうか。

MT5だとバックテストを開始するとEA内で使用しているインジケータが表示されました。

また、インジケーターをEAに移植する方法で参考となるご意見を教えていただけたら助かります。

検証ソースのようにiCustomでインジケータの出力しているバッファを参照するのが一般的かなと思います。

投稿2020/09/15 08:01

mah

総合スコア591

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

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

buibui80

2020/09/15 09:06

ご返答ありがとうございます。 テスト時には定型チャートを適用しようと思います。 ちなみに ChartApplyTemplate() で定型チャートを動的に変更しようとしましたが、 戻り値はtrueでも実際はチャートに何も適用されていないという悲しい結果になったので、 毎回手動で適用しようと思います。MT5が羨ましいです。 iCustomが一般的でしたか。 インジケーターをEAへ移植するのではなく、インジケーターそのままをEAで利用する形態なのですね。 MQ4の勉強し始めに「iCustomは重い」という情報が頭にあったので移植することのみ考えていました。 バックテスト中のライン表示も定型チャートで解決したのでテストが捗りそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問