記事「高度なICT取引システムの開発:インジケーターへのオーダーブロックの実装」についてのディスカッション - ページ 2

 
Niquel Mendoza #:

最初の問題については、インジケーターがデータを正しく読み込んでいないことが原因かもしれません。これは通常、チャートを変更したり、新しいチャートを開いたりしたときに起こります。しかし、すでに使用していたチャートであれば、注文ブロックが取得されない理由をさらに調査する価値があるでしょう。その場合、問題を特定するために、コードにデバッグ(印刷)メッセージを含めると便利です。

強気の注文ブロックのみが描画される2つ目の問題については、H4時間枠のEURUSDが現在ローソク足の高値600-700にあることが原因である可能性があります。そのような状況では、すべての弱気注文ブロックが緩和されている可能性があり、それがチャート上に描画されない理由です。

基準の変更については、コード内のブール変数をいくつか減らしました。しかし、必要であれば、これらの条件を再び導入することは問題ないだろう。

色については、コメントに掲載した最新版では、注文ブロックの長方形の色に透明度を適用しています。そのためか、以前のバージョンと視覚的に色が一致していません。最後に、アニメーションについてですが、何を指しているのかよく理解できませんでした。この文脈でのアニメーションの意味をもう少し詳しく説明していただけますか?

セクション3.0の結論で、XAUUSD M1のインジケーターの動きを動画で紹介されていましたが、ストラテジーテスターのインジケーター機能を使って動画を作成されているのでしょうか? ストラテジーテスターを実行すると、通常Visal ModeがチェックされたEAの場合、インジケーターとトレードは表示されるのですが、実行中のEAのテキストが表示されません。 原因や解決策をご存知でしたら教えていただけないでしょうか?


また、大きな複数次元配列のリサイズには膨大な時間がかかることがわかりました。 経過時間を最小化するために、リサイズごとに100個の追加要素を使用することにしました。 時系列にゼロベースの配列を使用しているため、これは非常に有効です。

 
CapeCoddah #:

セクション3.0の結論で、XAUUSD M1のインジケータの動作の動画を紹介されていましたが、その動画を作成するためにストラテジーテスターのインジケータ機能を使用されているのでしょうか。 ストラテジーテスターを実行すると、通常Visal Modeにチェックが入っているEAでは、インジケータとトレードは表示されますが、実行中のEAのテキストは表示されません。 原因または解決策をご存知でしたら教えていただけないでしょうか。


また、大きな複数次元配列のリサイズには膨大な時間がかかることがわかりました。 経過時間を最小化するために、リサイズごとに100個の追加要素を使用することにしました。 時系列にゼロベースの配列を使用しているため、これは非常に有効です。

CapeCoddahさん、こんにちは。

ストラテジーテスターの内蔵機能ではなく、外部アプリケーションを使って録画しました。

Expert Advisorの実行中におっしゃるテキストについてですが、ラベルのようなグラフィカルなオブジェクトではなく、MQL5の外部の何かである可能性があると理解しています。よりよく分析するためにスクリーンショットを共有していただけると助かります。

よろしくお願いします。


 

こんにちは、

情報ありがとうございます。

スペイン語から英語への翻訳についてですが、Google翻訳では、//以降のテキストは翻訳されないため、コメントを翻訳するニーズに合いませんでした。 DeepLを試したところ、//以降のテキストは翻訳されましたが、私には理解するのが困難でした。 コードを翻訳するのは難しくありませんでしたが、翻訳を保存するのは不可能でした。それにもかかわらず、DeepLは本当に翻訳を間違えていました。 文章の終わりと思われるところにピリオドや "End "を挿入していました。 さらに、&&を&&&に変えてしまい、さらに多くの問題が発生しました。 これらのエラーを修正した後、コンパイルしても100以上のエラーが発生したため、あきらめました。

ストラテジーテスターで パート2を実行したところ、TPとSLのラインとテキストが表示されました。 しかし、TPとSLのレベルの計算を調整する必要があるようです。さらに、テストではSLとTPが重なって表示されて います。 ヘッジを行わない環境では、SLとTPは1つのSLまたはTPに統合されるでしょう。 線は2本ではなく1本だけであるべきで、値の変化を示すステップがあるべきです。 また、予測された取引がどこで始まるかがチャート上に表示されていません。

最初のプログラムの方がより多くのシグナルを出すようなので、そちらに集中することにしました。私は、トレンドが終了したときにシグナルを終了させるメカニズムを組み込むこと、互いにn本以内のシグナルの重複を排除すること、バーの中央値を中心としたボックスの高さを標準化すること、期間H1以上で合理的に使用できるようにオーダーブロックパラメータを特定して修正すること、インジケータチャートを開くかメインチャートに出来高の移動平均を配置すること、そして最後に、私の標準的な使用法に適合するようにゼロベースの配列に変換し、最終的に私のEAに組み込むことを計画しています。しかし、私のプログラミングスタイルは伝統的ではなく、MetaQuotesの自動インデントには適合しません。

私は、あなたの取引に対する非常に良いアプローチを持っていると信じているので、これからもあなたについていきます。

これからも頑張ってください、


ケープコッダ

 

こんにちは、

ストラテジーテスターで 私のEA、EURUSD H4 1/1/2025-2/1/2025をテストしていたところ、終了時にブロックオーダーインジケーターに2つの問題があることを確認しました。

1つ目は、テストウィンドウの外にある2/3/2025のブロックオーダーを選択してしまうこと、2つ目は、チャートシフト領域にブロックテキストを配置してしまうことです。


お楽しみください。


ケープ・コッダ

ファイル:
 

最初のインジケータの英語翻訳バージョンです。 私は、あなたの多くのコードコメントを英語で理解する必要があると判断し、DeepLが私に感銘を与えなかったため、Google Translateを再考しました。 私はまず、Googleが//行コメントを翻訳できるように、すべての//コメントを#/#に変更しました。そして、Translateに入力するために、テキストファイルをMS Word文書に変換しました。翻訳後、私は新しいドキュメントを開き、テキストファイルとして保存し、名前を変更し、新しいソースの構文解析を開始しました。 Translateは作業の90%を行ったと推定していますが、手動で変換が必要なスペースや文字を追加しました。 日間の作業の後、それはエラーなしでコンパイルされました。驚いたことに、 それは最初の試みで動作しました!1000バーのオリジナルインジケーターと比較してみましたが、全く同じでした。

ファイル:
 
CapeCoddah # :

最初のインジケータの英語翻訳バージョンです。 私は、あなたの多くのコードコメントを英語で理解する必要があると判断し、DeepLが私に感銘を与えなかったため、Google Translateを再考しました。 私はまず、Googleが//行コメントを翻訳できるように、すべての//コメントを#/#に変更しました。そして、Translateに入力するために、テキストファイルをMS Word文書に変換しました。翻訳後、私は新しいドキュメントを開き、テキストファイルとして保存し、名前を変更し、新しいソースの構文解析を開始しました。 Translateは作業の90%を行ったと推定していますが、手動で変換が必要なスペースや文字を追加しました。 日間の作業の後、それはエラーなしでコンパイルされました。 驚いたことに、 それは最初の試みで動作しました!1000バーのオリジナルインジケーターと比較してみましたが、全く同じでした。

CapeCoddahさん、こんにちは。私はいくつかのプロジェクトに携わっており、あなたのお役に立てる時間が限られていました。しかし今日、このインジケータの改良版の開発に時間を割くことができます。以下にコードを共有します。
 

残念ながら、このインジケータは構造的に欠陥があり、取引には役立たないようです。なぜなら、このインジケータは、以下のコードで太字で強調表示されているように、計算時に未知の将来の変数に対して計算を行っているからです。

for( int i = Universal_search_range ; i > 5 ; i--) {
//エラーチェック
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;

// ローソク足のインデックスを更新
one_candle = i ;// 中央のローソク足
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
two_candle = one_candle - 1;
three_candle = one_candle - 2;
four_candle = one_candle -3
;

// 直前のローソク足の平均出来高を計算
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);

 
CapeCoddah #:

残念ながら、このインジケーターは構造的な欠陥があり、取引には役立たないようです。なぜなら、このインジケーターは、以下のコードで太字で強調されているように、計算時に未知の将来の変数に対して計算を行っているからです。

for( int i = Universal_search_range ; i > 5 ; i--) {
//エラーチェック
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;

// ローソク足のインデックスを更新
one_candle = i ;// 中央のローソク足
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
two_candle = one_candle - 1;
three_candle = one_candle - 2;
four_candle = one_candle -3
;

// 直前のローソク足の平均出来高を計算
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);

CapeCoddahさん、こんにちは。例えば、このインジケーターは配列を直列に使ってすべての計算を行うので(一般的ではありませんが、通常は直列にしないで行います)、そうではないと思います、何が行われている "Universal_search_range "ローソク足(シリーズではローソク足0が最新であることを覚えておいてください)からローソク足6に移動するので、私は将来のローソク足が使用されていることはありませんし、それがそうであった場合、two_candleまたは他のインデックスは、範囲外の原因となる0未満の値になります。だから、ローソク足four_candle = one_candle - 3は、ループがi = 6の次にfour_candle = 3で終了した場合に0に最も近いだろう、だから、現在のローソク足が0であることを考慮に入れて、私は将来のローソク足を使用していないことを言うことができます。このネーミングは分かりにくいと思われるかもしれませんが、注文ブロックを取得する際に、one_velaが中心のローソク足と同じであることを考えると、その方が分かりやすかったので、このようにしました。そのため、強い動きを探している場合は、それに続くローソク足を評価する(直列で言えば、これは引き算になる)。