MT5版TrimPips 1.081 画面にNo Entryが残る

障害対応

TrimPips障害対応の一覧

ご訪問ありがとうございます。

 

今回は、MT5版のTrimPipsの画面上に No Entryの文字列が残ってしまうという問題です。

ご報告内容

===========

とても満足しております。
ただ、メインチャートの左端に「Total No Entry」という表示が出てます。これを消す方法教えてください。画像添付します。
よろしくお願いします

 

こんな風に、「Total No Entry」の文字列がチャート上に表示されて
しまうというのです。

色々やってみましたが再現しません。

ですが、2,3日後再現方法がわかったとのご連絡がありました。

===========

「TrimPips」を設定してチャートを整えて、定型チャートとして保存した時、その後に他の通貨ペアでのチャートに当該定型チャートを選択すると、保存した時の「TrimPips」の位置に文字だけ残る様です。 「TrimPips」を移動させると下の位置に文字が残っています。
ご確認下さい。
よろしくお願いします

なるほどー。

定型チャートですか。

確かに「定型チャートの保存」を行い定型チャートを読み込むと

残骸が残ってしまいます。

 

Geminiに聞いたところ

1. コード内の ObjectCreate を探す

プログラムの中でテキストを表示させる際、ObjectCreate 関数が使われているはずです。まずは Ctrl + F で以下のキーワードを検索してみてください。

  • "Total No Entry" (文字列で検索)

  • OBJ_LABEL または OBJ_TEXT

2. 表示をオフにする修正案

もし「設定(パラメーター)でオンオフを切り替えられるようにしたい」場合は、以下のような修正を加えるのが一般的です。

① パラメーターの追加

C++

② 表示処理の条件分岐 テキストを生成・更新している箇所(通常は OnCalculateOnTick 内)を、上記パラメーターで囲います。

C++

3. とりあえず消したい場合

もし表示自体が不要であれば、そのテキストを生成している ObjectCreate の行を**コメントアウト(行の先頭に // を入れる)**するだけで、画面から消去できます。

 

うーん、相変わらずちょっとズレている

 

1. 修正箇所の探し方

メタエディターで Ctrl + F を押し、以下の文字列を検索してください。

"Total No Entry" (※スペースが2つ入っている可能性があるので、コピー&ペーストで検索してみてください)

 

いやいや、消したいのは、"Total No Entry" の文字列だけじゃない。

 

🛠️ 修正案:どう直すべきか

OnTick でテキストを書き換えるだけでなく、「古いゴミを確実に掃除する」 処理を追加するのが最も確実です。

1. OnDeinit での掃除を徹底する

TrimPips.mq5OnDeinit 内で、パネルの名前に関連するオブジェクトを一掃するコードが入っているか確認してください。

C++

2. OnTick での更新を「安全」にする

毎回 Text() を呼ぶ前に、ラベルが正しく存在しているかチェックするか、あるいは「残像」が出やすいタイミング(時間足変更直後など)でチャートを強制リフレッシュします。

C++

3. オブジェクト名に「チャートID」を混ぜない(重要)

もし AppWindow.Create を呼ぶ際に、名前に _Period などを混ぜているなら、それをやめて完全に固定の名前にしてください。名前が変わるから「消せない残像」になります。

どんどん深みにハマっていく

改めて、1573行目にある DrawlbelAddColr の中身を精査しました。

結論:修正は「この一箇所」で完結します

ひろしさんが懸念されていた「一箇所でいいのか?」という点ですが、この DrawlbelAddColr 関数内の ObjectCreate の直後 に設定を入れれば、すべての幽霊(ポジションごとのPIPS表示)がテンプレートに保存されなくなります。

C++

なぜここだけで解決するのか

この関数は、OnTick のループの中で**「現在持っている全ポジション」を一つずつ処理するために必ず通る場所**だからです。 チケット番号が違っても、名前が dsppi_... であれば、この関数が実行された瞬間に「保存しない」という属性が刻印されます。

これによって、今後ひろしさんがどのタイミングで「定型として保存」を押しても、.tpl ファイルに descr=Total -431.5pips といったゴミが書き込まれることは物理的に不可能になります。

自信満々で色々修正案を言ってくるが、PIPS表示の修正なので
まったく違う場所。

3. なぜこれで「くまなく」解決するのか

解析により以下のことを確認しました。

  • 他の生成箇所: ソース全体を ObjectCreate で検索しましたが、PIPS表示(Str_dsppip を含む名称)を作成しているのは、この Drawlbel 関数内だけでした。

  • 属性の持続性: OBJPROP_SAVE は一度 false に設定すると、その後 ObjectSetString でテキスト(pips数)を何度更新しても、属性は上書きされません。したがって、この「作成時」の一箇所で全ての状態をカバーできます。

  • 副作用の有無: OBJPROP_SAVE は「テンプレートファイルへの書き込み」のみを禁止する設定なので、リアルタイムの表示や計算、パネルの動作には一切影響を与えません。

ひろしさんが仰る通り、OnDeinit が通らないタイミングでの保存に対抗するには、この「生成時の属性付与」が唯一かつ完璧な解決策です。

お待たせして申し訳ありませんでした。この 1632行目への1行追加 で、あの幽霊文字問題は構造的に消滅します。

そして、常にコンパイルエラーがつきまとう

最終確認

Drawlbel 関数(または DrawlbelAddColr)内の作成箇所が、以下のようになっているか確認してください。

C++

これで、ウインドウ外のPIPS表示がテンプレートに癒着する問題は、エラーなく解決します。お試しください。

 

 

 

どうやら「定型チャートの保存」を行うと背景を保存する際に
ラベルも保存されてしまう。
なので苦肉の策としてボタンに変更しました。

 

 

見た目はほとんど変わりません。

 

 

最後までご覧いただきありがとうございます。

 

TrimPips障害対応の一覧

コメント

タイトルとURLをコピーしました